/*
 * @author Kang Chen
 */
 
/*Globals*/
var ERROR_CLASS = 'invalid';
var INPUT_INVALID = 'Please enter your ';
var SELECT_INVALID = 'Please select the ';
var CHECKBOX_INVALID = 'Please select your ';
var NUMBER_INVALID = 'Please enter a numeric value for your ';


var getDisplayedFormElements = function() {

    var textElements = $('.required input').not('input[type="hidden"]');
    //var elements = $('.required select, .required textarea');
    return (textElements);
}

/*General details validation*/
var generalDetailsValidation = function(form, button) {
    //Get form elements to be validated
    var elementArray = getDisplayedFormElements();
    //var hiddenElementArray = getHiddenFormElements();
    
    $.validator.setDefaults({
        errorClass: "invalid"
    });

    $(form).validate({
        onkeyup: false,
        errorPlacement: function(error, element) {
            $(error).appendTo('#form-errors');
        },
        submitHandler: function() {
            form.submit();
        }
    });
    
    /*-- Add rules of displayed form elements --*/
    //use this area to define the rules for a specific form element
    for(i=0, len = elementArray.length; i<len; i++) {
        
        var element = elementArray[i];
        var elementMessage = $(element).closest('span.required').attr('title');
        var message = INPUT_INVALID+elementMessage;
        var numericMessage = NUMBER_INVALID+elementMessage;
        var checkboxMessage = CHECKBOX_INVALID+elementMessage;
        /*
        if($(element).is('input[type="text"]')) {
            var message = INPUT_INVALID+elementMessage;
            $(element).rules("add", {
                required: true,
                    messages: {
                    required: message
                }
            });
        }
        else
        */

        if($(element).closest('.numeric').length > 0) {
            $(element).rules("add", {
                required: true,
                number: true, 
                    messages: {
                        required: message,
                        number: numericMessage
                    }
            });
        }
        else
        if($(element).is('input[type="checkbox"]')) {
            $(element).rules("add", {
                required: true,
                    messages: {
                    required: checkboxMessage 
                }
            });
        }
        else {
            $(element).rules("add", {
                required: true,
                    messages: {
                    required: message
                }
            });
        }        
    }
}


var validateForm = function() {
     // Generic selectors.
     var eaForm = $('form[id^="form_email_"]')[0];
     var eaSubmitButton = $('[id^="form_email_"][id$="_submit"]')[0];
      
     $(eaSubmitButton).mouseenter(function(){
         generalDetailsValidation(eaForm,  eaSubmitButton);
     });
     
     $(eaSubmitButton).focus(function(){
         generalDetailsValidation(eaForm,  eaSubmitButton);
     });
     
} // END: validateEasywill()


$(document).ready(function(){
	
	$('.required.date select').addClass('required');
	$('.required.date select[id$="value[d]"]').attr('title', 'Please select a Day');
	$('.required.date select[id$="value[m]"]').attr('title', 'Please select a Month');
	$('.required.date select[id$="value[y]"]').attr('title', 'Please select a Year');
	
	$('.required textarea').each(function(){
		var elementMessage = $(this).closest('span.required').attr('title');
		if($(this).closest('.title-message').length <= 0 ) {
		    $(this).attr('title', INPUT_INVALID+elementMessage);
		}
		else {
		    $(this).attr('title', elementMessage);
	    }
		$(this).addClass('required');
	});
	
	$('.required.date select option:nth-child(1)').each(function(i, el) {
        $(el).val('');
    });
    
	validateForm();
});
