

var Forms = {

	
	init : function( _labels ) {
		
		// setto le costanti
		
		Forms.CLASS_REQUIRED_FIELD = 'requiredField';
		Forms.CLASS_REQUIRED_CHECK = 'requiredCheck';
		Forms.CLASS_EMAIL_ERROR = 'emailError';
		
		Forms.DEFAULT_LABEL_EMAIL = 'email errata';
		Forms.DEFAULT_LABEL_CAMPO = 'campo obbligatorio';
		Forms.DEFAULT_LABEL_SCELTA = 'scelta obbligatoria';
		
		
		// setto le variabili
		
		Forms.emailFilter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
		
		Forms.labelEmail = _labels.labelEmail != null ? _labels.labelEmail : Forms.DEFAULT_LABEL_EMAIL;
		Forms.labelCampo = _labels.labelCampo != null ? _labels.labelCampo : Forms.DEFAULT_LABEL_CAMPO;
		Forms.labelScelta = _labels.labelScelta != null ? _labels.labelScelta : Forms.DEFAULT_LABEL_SCELTA;
		
		
		// instanzio i tooltip
		
		Forms.toolTips = new Tips(null,{
		
			className: 'tooltipAlert',
			offsets: {'x':-15,'y':-35 },
			fixed: true
		
		});
		Forms.toolTips.addEvent('show', function(tip){
			
			tip.fade('in');
			
		});
		Forms.toolTips.addEvent('hide', function(tip){
			
			tip.fade('out');
			
		});
		
		
		
		// setto gli eventi agli input 
		// con il controllo dello swap
		
		Forms.setSwaps();
		
		
		// setto i controlli sui form con 
		// i campi obbligatori
		
		Forms.addRequired();
		
	
	},
	
	
	
	/**
	* metodo che assegna gli eventi del mouse
	* agli input che avranno il controllo dello swap
	*/
	
	setSwaps : function() {
		
		var valueSwap = $$('input.valueSwap');
		
		for ( var i = 0 ; i < valueSwap.length ; i ++ ) {
			
			valueSwap[i].rel = valueSwap[i].value;
			
			valueSwap[i].addEvent( 'focus' , Forms.inputFocus );
			valueSwap[i].addEvent( 'blur' , Forms.inputBlur );
			
		}
	
	},
	
	
	
	/**
	* eventi richiamati dagli input
	*/
	
	inputFocus : function(event) {
		
		if ( event.target.value == event.target.rel ) event.target.value = "";
	
	},
	
	inputBlur : function(event) {
		
		if ( event.target.value == "" ) event.target.value = event.target.rel;
	
	},
	
	
	
	/**
	* metodo che ricerca in tutti i form
	* i campi obbligatori, e fa i controlli
	* all'action del form
	*/
	
	addRequired : function() {
	
		
		// cerco i form da controllare
		
		Forms.checkForms = $$('.checkForm');
		
		
		// setto i controlli sul form
		
		Forms.checkForms.addEvent('submit',Forms.check);
		
	
	},
	
	
	/**
	* metodo che crea due array,
	* required. la lista dei campi non ancora compilati
	* emails. la lista delle email errate.
	*/
	
	check : function( event ) {
	
		
		// lista dei campi obbligatori
		
		var fieldsRequired = event.target.getElements('.required');
		var fieldsEmail = event.target.getElements('.email');
		
		
		var required = new Array();
		var emails = new Array();
		
		
		
		// rimuovo i tooltips
		
		Forms.toolTips.detach('.'+Forms.CLASS_EMAIL_ERROR);
		Forms.toolTips.detach('.'+Forms.CLASS_REQUIRED_FIELD);
		
		
		
		/**
		* ciclo tutte le emails
		*/
		
		for ( var src = 0 ; src < fieldsEmail.length ; src ++ ) {
			
			
			// rimuovo l'alert required da tutti i campi
			
			var alertNode = fieldsEmail[src].getParent().getElement(' .'+Forms.CLASS_EMAIL_ERROR);
			
			if (alertNode) fieldsEmail[src].getParent().removeChild(alertNode);
			
			
			// controllo la correttezza dell'email
			
			if (!Forms.emailFilter.test(fieldsEmail[src].value)) emails.push(fieldsEmail[src]);
			
		
		}
		
				
		
		// se ci sono delle email errate
		// visualizzo gli alert
		
		if (emails.length > 0) {
		
			for ( var src = 0 ; src < emails.length ; src ++ ) {
				
				var alertNode = document.createElement('span');
					alertNode.title = Forms.labelEmail;
					alertNode.className=Forms.CLASS_EMAIL_ERROR;
					alertNode.innerHTML="<em>"+Forms.labelEmail+"</em>";
					emails[src].getParent().appendChild(alertNode);
			
			}
			
			
			// setto il tooltip a tutti gli alert
			
			Forms.toolTips.attach('.'+Forms.CLASS_EMAIL_ERROR);
		
		}
		
		
		/**
		* ciclo tutti i campi obbligatori
		*/
		
		for ( var src = 0 ; src < fieldsRequired.length ; src ++ ) {
			
		
			// rimuovo l'alert required da tutti i campi
			
			switch ( fieldsRequired[src].type ) {
			
				case "text":
				case "textarea":
				case "password":
				case "hidden":
				case "file":
				case "select":
				case "select-one":
					
					var alertNode = fieldsRequired[src].getParent().getElement(' .'+Forms.CLASS_REQUIRED_FIELD);
					
					if (alertNode) fieldsRequired[src].getParent().removeChild(alertNode);
					
					break;
				
				case "radio":
				case "checkbox":
					
					var alertNode = fieldsRequired[src].getParent().getElement(' .'+Forms.CLASS_REQUIRED_CHECK);
					
					if (alertNode) fieldsRequired[src].getParent().removeChild(alertNode);
					
					break;
			
			}
			
			
			
			// controllo i campi obbligatori
		
			switch ( fieldsRequired[src].type ) {
			
				case "text":
				case "textarea":
				case "password":
				case "hidden":
				case "file":
				case "select":
				case "select-one":
					
					if (fieldsRequired[src].value==""||fieldsRequired[src].value==fieldsRequired[src].rel) required.push(fieldsRequired[src]);
					
					break;
				
				case "radio":
				case "checkbox":
					
					if (fieldsRequired[src].checked!=true) required.push(fieldsRequired[src]);
					
					break;
			
			}
			
		
		}
		
		
		
		// se ci sono dei campi non compilati
		// visualizzo gli alert
		
		if (required.length > 0) {
		
			for ( var src = 0 ; src < required.length ; src ++ ) {
				
				switch ( required[src].type ) {
			
					case "text":
					case "textarea":
					case "password":
					case "hidden":
					case "file":
					case "select":
					case "select-one":
						
						var alertNode = document.createElement('span');
							alertNode.title = Forms.labelCampo;
							alertNode.className=Forms.CLASS_REQUIRED_FIELD;
							alertNode.innerHTML="<em>"+Forms.labelCampo+"</em>";
							required[src].getParent().appendChild(alertNode);
							
						break;
					
					case "radio":
					case "checkbox":
						
						var alertNode = document.createElement('span');
							alertNode.title = Forms.labelScelta;
							alertNode.className=Forms.CLASS_REQUIRED_CHECK;
							alertNode.innerHTML="<em>"+Forms.labelScelta+"</em>";
							required[src].getParent().appendChild(alertNode);
							
						break;
				
				}
			
			}
			
			
			// setto il tooltip a tutti gli alert
			
			Forms.toolTips.attach('.'+Forms.CLASS_REQUIRED_FIELD);
	
		}
		
		
		// se non ci sono errori ritorno il valore true
		
		return required.length == 0 && emails.length == 0 ? true : false;
		
		
	}
	

};
















