// Form Validation v4.2.1 by Derrick Gall (Jan. 2009)
// Last Updated: Jan. 2010

if (!$('script[src$="formValidationFSP.js"]:first').attr('hasexecuted')) {
    
    // Trim string method
    String.prototype.trim = function() { return this.replace(/^\s+/, '').replace(/\s+$/, ''); };
    
    // Form validation
    function formValidation(objForm) {
        // Create objForm object
        var objGroups = {};
        
        // Remove old error if exists
        $('#formError').addClass('formHide');
        $('#formError').removeAttr('id');
        
        // Validate fields
        validateCount = objForm.find('.validate').length;
        validatedCount = 0;
        
        // Gather fields that need validation
        var arrFields = $.makeArray(objForm.find('.validate'));
        
        for (var i=0; i<arrFields.length; i++) {
            var field = $(arrFields[i]), fieldValue = field.val(), fieldID = field.attr('id'), validated = false;
    
            // Text inputs
            if (field.hasClass('text')) {
                if (!fieldValue || fieldValue == field.attr('title')) return showError(fieldID);
                validated = true;
            }
            
            // E-mail inputs
            if (field.hasClass('email')) {
                if (!fieldValue.match(/^[^@]+\@[^@]+$/) || fieldValue == field.attr('title')) return showError(fieldID);
                validated = true;
            }
            
            // Number inputs
            if (field.hasClass('number')) {
                if (!fieldValue.match(/^[\d\- \+\(\)]+$/) || fieldValue == field.attr('title')) return showError(fieldID);
                validated = true;
            }
            
            // Select fields
            if (field.hasClass('select')) {
                if (fieldValue == 'DID NOT RESPOND') return showError(fieldID);
                validated = true;
            }
            
            // Radio fields
            if (field.hasClass('radio')) {
                var fieldName = field.attr('name');
                validated = true;
                if (!objGroups[fieldName]) {
                    // Signify fields with that name have already been validated
                    objGroups[fieldName] = true;
                    if (!objForm.find('input[name="' + fieldName + '"]:checked').length) return showError(fieldID);
                }
            }
            
            // Checkbox fields
            if (field.hasClass('checkbox')) {
                var fieldName = field.attr('name');
                validated = true;
                if (!objGroups[fieldName]) {
                    // Signify fields with that name have already been validated
                    objGroups[fieldName] = true;
                    var count = objForm.find('input[name="' + fieldName + '"]:checked').length,
                    fieldClass = field.attr('class');
                    
                    // Validate based on text and number provided in class attribute
                    if (fieldClass.indexOf('exactly') > -1) {
                        if (count != fieldClass.replace(/.*(exactly)(\d+)?.*/gi, '$2')) return showError(fieldID);
                    }
                    if (fieldClass.indexOf('atLeast') > -1) {
                        if (count < fieldClass.replace(/.*(atLeast)(\d+)?.*/gi, '$2')) return showError(fieldID);
                    }
                    if (fieldClass.indexOf('atMost') > -1) {
                        if (count > fieldClass.replace(/.*(atMost)(\d+)?.*/gi, '$2')) return showError(fieldID);
                    }
                    if (!count && fieldClass.match(/exactly||atLeast||atMost/)) return showError(fieldID);
                }
            }
            
            if (!validated && !fieldValue) return showError(fieldID);
        }
    
        return true;
    }
    
    // Show Error
    function showError(id) {
        $('label.formHide[for="' + id + '"]').attr('id', 'formError');
        $('#formError').removeClass('formHide');
        location.href = '#formError';
        return false;
    }
    
    $(document).ready(function(){
                               
        // Apply function to each intake form
        $('form[id^="intakeForm"],form[id^="blogCommentForm"]').submit(function() {
            if (!formValidation($(this))) return false;
            
            // Empty autofilled fields
            $(this).find('input[title],textarea[title]').each(function(){
                if ($(this).attr('title') == $(this).val()) $(this).val('');
            });
            
            addgmttime();
            return true;
        });
        
        // Disclaimer Popup
        $('#intakeFormShortAutofill,#intakeFormShort').each(function(){
            // Add click event to close link
            $('#intakeFormShortDisclaimer a').click(function(){ $('#intakeFormShortDisclaimer').slideToggle(200); });
            
            // Add click event to disclaimer link
            $(this).find('a.intakeFormShortDisclaimerLink').each(function(){
                $(this).attr('href', '#intakeFormShortDisclaimer');
                $(this).click(function(){
                    // Get estimated position, window position, and set default position
                    var estPosition = $(this)[0].offsetWidth + $(this).offset().left + 300,
                    windowWidth = $(window).width(),
                    positionLeft = $(this).offset().left + $(this).width() + 10;
                    
                    // If estimated position is greater than the window width, position left
                    if (estPosition > windowWidth) positionLeft -= (320 + $(this).width());
                    
                    // Position disclaimer
                    $('#intakeFormShortDisclaimer').css({ position: 'absolute', left: positionLeft, top: $(this).offset().top });
                    
                    // Show disclaimer
                    $('#intakeFormShortDisclaimer').slideToggle(200);
                })
            });
            
        });
        
        // E-mail Obfuscation validation
        $('form[id^="emailObfuscation"]').each(function(){
    
            $(this).submit(function(){
                // Check for guid
                if (!checkObfuscationURL()) return false;
                // Validate form
                if (!formValidation($(this))) return false;
                // Set email_subject value
                $('#email_subject').val($('#emailObfuscationSubject').val());
                // Check if user wants a copy
                if ($('#emailObfuscationCopyMe').attr('checked')) {
                    $('#copymeEmail').val($('#emailObfuscationEmailAddress').val());
                } else $('#copymeEmail').val('');
                
                addgmttime();
                return true;
            });
            
            // Function to check for guid in query string
            function checkObfuscationURL() {
                var url = location.href;
                if (url.indexOf('JSPeditPageContent.do') > -1) return true;
                if (url.indexOf('guid=') > -1) {
                    var guid = url.replace(/.*guid=([^=]*=).*/gi, '$1');
                    $('#guid').val(guid);
                    return true;
                } else {
                    alert('An error occured. Please use the back button on your browser and click on the e-mail link again.');
                    return false;
                }
            }
            
            // Check for guid
            checkObfuscationURL();
            
            // Show subject and copy me inputs
            $('.formHasJavaScript').removeClass('formHasJavaScript');
            // Remove "NoJavaScript" input
            $('#formNoJavaScript').remove();
        });
    });
    
    $('script[src$="formValidationFSP.js"]:first').attr('hasexecuted', true);
}
