/********************************************/
/*	jquery.forms.js
/*	author: davide reppucci
/*	author uri: http://www.gdlabs.it
/*******************************************/

block = false;

var Forms = {
	init : function() {
		Forms.CLASS_REQUIRED_FIELD = 'requiredError';
		Forms.CLASS_REQUIRED_CHECK = 'checkError';
		Forms.CLASS_EMAIL_ERROR = 'emailError';
		Forms.CLASS_NUMBER_ERROR = 'numberError';
		
		Forms.DEFAULT_LABEL_EMAIL = 'email non valida';
		Forms.DEFAULT_LABEL_CAMPO = 'campo obbligatorio';
		Forms.DEFAULT_LABEL_SCELTA = 'scelta obbligatoria';
		Forms.DEFAULT_LABEL_NUMBER = 'campo numerico';
		
		Forms.DEFAULT_OFFSET_X = -15;
		Forms.DEFAULT_OFFSET_Y = -35;

		Forms.emailFilter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
		Forms.numberRegex = /^([+\_\.\/\s\-\d])+$/;

		Forms.addRequired();
	},	
	addRequired : function() {
		Forms.checkForms = jQuery('.checkForm');
		Forms.checkForms.each( function() {
			$(this).submit(Forms.check);
			$(this).find('input, textarea').each( function(i) { $(this).keyup(Forms.check); });
			$(this).find('select, input[type=checkbox]').each( function(i) { if (!$.browser.msie) { $(this).change(Forms.check); } });
		});
	},
	addTooltip : function( target ) {
		$(target).tooltip({
		    delay: 0,
		    track: true,
		    fade: 250,
		    top: Forms.labelOffsetY, 
			left: Forms.labelOffsetX,
			showBody: " - "
		});
	},
	check : function( event ) {
		if(event.type == "submit") { formTrack = $(this); }
		else { formTrack = $(this).closest('form'); }

		var fieldsRequired = jQuery('.required',formTrack);
		var fieldsEmail = jQuery('.email',formTrack);
		var fieldsNumber = jQuery('.number',formTrack);

		var alertRequired = jQuery('.'+Forms.CLASS_REQUIRED_FIELD,formTrack);
		var alertCheck = jQuery('.'+Forms.CLASS_REQUIRED_CHECK,formTrack);
		var alertEmail = jQuery('.'+Forms.CLASS_EMAIL_ERROR,formTrack);
		var alertNumber = jQuery('.'+Forms.CLASS_NUMBER_ERROR,formTrack);
		
		var required = new Array();
		var emails = new Array();
		var numbers = new Array();
		
		$('#tooltip').hide();
		for ( var i = 0 ; i < alertRequired.length ; i++ ) { jQuery(alertRequired[i]).removeClass(Forms.CLASS_REQUIRED_FIELD).removeAttr('title').unbind('mouseover'); }
		for ( var j = 0 ; j < alertCheck.length ; j++ ) { jQuery(alertCheck[j]).removeClass(Forms.CLASS_REQUIRED_CHECK).removeAttr('title').unbind('mouseover'); }
		for ( var k = 0 ; k < alertEmail.length ; k++ ) { jQuery(alertEmail[k]).removeClass(Forms.CLASS_EMAIL_ERROR).removeAttr('title').unbind('mouseover'); }
		for ( var x = 0 ; x < alertNumber.length ; x++ ) { jQuery(alertNumber[x]).removeClass(Forms.CLASS_NUMBER_ERROR).removeAttr('title').unbind('mouseover'); }
		
		/* REQUIRED */
		for ( var src = 0 ; src < fieldsRequired.length ; src ++ ) {
			switch ( fieldsRequired[src].type ) {
				case "text":
				case "email":
				case "phone":
				case "number":
				case "textarea":
				case "password":
				case "hidden":
				case "file":
				case "select":
				case "select-one":

					if ( fieldsRequired[src].value == "" ) { jQuery(fieldsRequired[src]).closest('p').addClass('requiredError').attr('title', Forms.DEFAULT_LABEL_CAMPO); Forms.addTooltip( jQuery(fieldsRequired[src]).closest('p') ); required.push( fieldsRequired[src] ); }

					break;
				
				case "radio":
				case "checkbox":
									
					if ( fieldsRequired[src].checked != true) { jQuery(fieldsRequired[src]).closest('p').addClass('checkError').attr('title', Forms.DEFAULT_LABEL_SCELTA); Forms.addTooltip( jQuery(fieldsRequired[src]).closest('p') ); required.push( fieldsRequired[src] ); }
					
					break;
			}
		
		}
		
		/* EMAIL */
		for ( var src = 0 ; src < fieldsEmail.length ; src ++ ) { if ( fieldsEmail[src].value != 0 && !Forms.emailFilter.test(fieldsEmail[src].value) ) { jQuery(fieldsEmail[src]).closest('p').addClass('emailError').attr('title', Forms.DEFAULT_LABEL_EMAIL); Forms.addTooltip( jQuery(fieldsEmail[src]).closest('p') ); emails.push(fieldsEmail[src]); } }
		
		/* NUMBER */
		for ( var src = 0 ; src < fieldsNumber.length ; src ++ ) { if ( fieldsNumber[src].value != 0 && !Forms.numberRegex.test(fieldsNumber[src].value) ) { jQuery(fieldsNumber[src]).closest('p').addClass('numberError'); numbers.push(fieldsNumber[src]); Forms.addTooltip( jQuery(fieldsNumber[src]).closest('p') ); jQuery(fieldsRequired[src]).closest('p').attr('title', Forms.DEFAULT_LABEL_NUMBER); } }
		
		block = required.length == 0 && emails.length == 0 && numbers.length == 0 ? false : true;
		return required.length == 0 && emails.length == 0 && numbers.length == 0 ? true : false;
	}
};
