// Initialise form and set up required fields
$(document).ready(function() {
	
	$.each(requiredFields, function(i, field) {
		
		var msg = '<span class="required" id="' + field.fieldName + '_val_msg"></span>';
						
		if(field.displayNode)
			$('#' + field.displayNode).append(msg);
		else
			$('[name=' + field.fieldName + ']').after(msg); // $('label[for=' + field.fieldName + ']').append(msg);

		$('[name=' + field.fieldName + ']').bind('blur', { validators: field.validators, customAction: field.customAction }, function(event) { 

			$('#' + field.fieldName + '_val_msg').empty();

			var f = $(this);

            if(event.data.customAction) event.data.customAction(f, true);
			
			$.each(event.data.validators, function(i, getValidator) {
				
				var validatorObject = getValidator(f);
				
				if(!validatorObject.valid) 
                {
                    if(event.data.customAction)
					    event.data.customAction(f, false);
                    else
                    {
                        $('#' + field.fieldName + '_val_msg').append(validatorObject.message);
                        $('#' + field.fieldName + '_val_msg').addClass('required-highlight');
                    }

                    // f.parents('form:first').find('input[type=submit]').attr('disabled', 'disabled');
                } else {
                    $('#' + field.fieldName + '_val_msg').removeClass('required-highlight');
                }
				
			});

		});
			
		// Only show the mandatory field indicator if an isRequiredValidator 
		// has been specified as a validator for this field
		$.each(field.validators, function(i, validator) {
			if(validator == isNotEmptyValidator)
			{
				if(field.displayNode)
					$(field.displayNode).after('<span class="req_indicator"> * </span>');
				else
					$('label[for=' + field.fieldName + ']').after('<span class="req_indicator"> * </span>');
				return false;
			}
		});
		
	});

    if(typeof(formName) != 'undefined')
        $('#' + formName).bind('submit', submitForm);
    else
	    $('form').bind('submit', submitForm);

});
	
var submitForm = function () {

	var isValid = true;
	
	$.each(requiredFields, function(i, field) {
			
		$('#' + field.fieldName + '_val_msg').empty();
		
		var f = $('[name=' + field.fieldName + ']');
		
        if(field.customAction) field.customAction(f, true);

		$.each(field.validators, function(i, getValidator) {
			
			var validatorObject = getValidator(f);
			
			if(!validatorObject.valid) 
			{
                if(field.customAction)
					field.customAction(f, false);
                else
				    $('#' + field.fieldName + '_val_msg').append(validatorObject.message);

				isValid = false;
			}
		});
			
	});
	
	return isValid;
	
};
