/**
* @class cValidate
* @author Alfredo Cerutti
* @date 29/05/2006
* 
* questa classe permette di validare un form
* 
*/

function cValidate(s_Form)
{
	/**
	* dichiarazioni delle funzioni
	*/
	this.isValid = _isValid;
	this.rule = _rule;
	this.isNotNull = _isNotNull;
	this.isEmail = _isEmail;
	this.isNumeric = _isNumeric;


	/**
	* riferimenti interni
	*/	
	this.s_Form = s_Form
	this.a_rules = Array();


	/**
	* _rule
	*
	* metodo che aggiunge una regola di convalida per il form
	* 
	* @param s_Elem nome del campo da controllare
	* @param s_Rule regola da applicare
	* @param s_Error_Msg messaggio di errore da visualizzare al fallimento della validazione
	* 
	* @return niente
	*/
	function _rule(s_Elem, s_Rule,s_Error_Msg)
	{
		this.a_rules.push(s_Elem+"#"+s_Rule+"#"+s_Error_Msg);
	}

	/**
	* _isValid
	*
	* metodo che convalida le regole impostate
	* 
	* @param nessuno
	* @return TRUE se tutto valido; FALSE altrimenti
	*/
	function _isValid()
	{
		var i_esito_validate = 0;
		for (var i_idx =0; i_idx < this.a_rules.length; i_idx++)
		{
			// splitto tutta la regola
			var a_Rule = this.a_rules[i_idx].split("#");

			// verifico se il secondo parametro della regola è composto
			if (a_Rule[1].match(":"))
			{
				var a_Extra = a_Rule[1].split(":");
				var s_rule_type=a_Extra[0];
			} else {
				var s_rule_type=a_Rule[1];
			}
		
			/**
			* verifico in quale schema ricade la regola
			*/
			var i_esito_parziale=0;
			switch (s_rule_type)
			{
				case "is_not_null":
					i_esito_parziale = this.isNotNull(a_Rule[0]);
					if (i_esito_parziale>0)
					{
						if ("undefined" == a_Rule[2])
						{
							alert("Il campo '"+a_Rule[0]+"' non può rimanere vuoto");
						} else {
	 						alert(a_Rule[2]);
						}
						return false;
					}
					break;

				case "is_email":
					i_esito_parziale = this.isEmail(a_Rule[0]);
					if (i_esito_parziale>0)
					{
						if ("undefined" == a_Rule[2])
						{
							alert("Il campo '"+a_Rule[0]+"' non è una email valida");
						} else {
	 						alert(a_Rule[2]);
						}
						return false;
					}
					break;

				case "is_numeric":
					i_esito_parziale = this.isNumeric(a_Rule[0]);
					if (i_esito_parziale>0)
					{
						if ("undefined" == a_Rule[2])
						{
							alert("Il campo '"+a_Rule[0]+"' non è numerico");
						} else {
	 						alert(a_Rule[2]);
						}
						return false;
					}
					break;
			
				case "max_length":
					if (document.forms[this.s_Form].elements[a_Rule[0]].value.length <= parseInt(a_Extra[1]))
					{
						//niente
					} else {
						i_esito_parziale += 1;
						if ("undefined" == a_Rule[2])
						{
							alert("Il campo '"+a_Rule[0]+"' deve esser inferiore o uguale ai "+a_Extra[1]+" caratteri");
						} else {
	 						alert(a_Rule[2]);
						}
						return false;
					}
					break;

				case "min_length":
					if (document.forms[this.s_Form].elements[a_Rule[0]].value.length >= parseInt(a_Extra[1]))
					{
						//niente
					} else {
						i_esito_parziale += 1;
						if ("undefined" == a_Rule[2])
						{
							alert("Il campo '"+a_Rule[0]+"' deve esser superiore o uguale ai "+a_Extra[1]+" caratteri");
						} else {
	 						alert(a_Rule[2]);
						}
						return false;
					}
					break;
			}
			/**
			* incremento il contatore della validazione
			*/
			i_esito_validate += i_esito_parziale;
		}
		if (i_esito_validate==0)
		{
			return true;
		} else {
			return false;
		}
	}

	/**
	* _isNotNull
	* 
	* funzione che verifica che un campo non sia vuoto
	* 
	* @param s_Form nome del form da controllare
	* @param s_Elem nome del campo
	* 
	* @return 0 se non è null; 1 se è vuoto
	*/
	function _isNotNull(s_Elem)
	{
		var str = document.forms[this.s_Form].elements[s_Elem].value;
		var re = /.+/;
		if(str.match(re)) 
		{
			return 0;
		} else {
			return 1;
		}
	}

	/**
	* _isEmail
	* 
	* metodo che controlla che il dato inserito nella casella di testo
	* sia un indirizzo email
	* 
	* @param s_Elem casella di testo da controllare
	* 
	* @return 0 il dato è un email; 1 altrimenti
	*/
	function _isEmail(s_Elem)
	{
		var str = document.forms[this.s_Form].elements[s_Elem].value;

		// espressione regolare
     	var re = /^[\w-]+(\.[\w-]+)*@([\w-]+\.)+[a-zA-Z]{2,7}$/;

		if (!str.match(re))
		{
			return 1;
     	} else {
			return 0;
     	}
	}

	/**
	* _isNumeric
	* 
	* metodo che controlla che il dato della casella di testo sia numerico
	* 
	* @param s_Elem casella di testo da controllare
	* 
	* @return 0 il dato è un numero; 1 altrimenti
	*/
	function _isNumeric(s_Elem)
	{
		var elem = document.forms[this.s_Form].elements[s_Elem].value;

		var s_validChars = "0123456789.";
		var i_isNumber=0;
		var b_isNumber=true;
   	var s_char;

		//alert("Sto per processare: "+elem);
		for (i_idx=0; i_idx < elem.length && b_isNumber==true; i_idx++) 
		{ 
			s_char = elem.charAt(i_idx); 
			if (s_validChars.indexOf(s_char) == -1) 
			{
				i_isNumber = 1;
				b_isNumber= false;
			}
		}
		//alert(" sto ritornando "+b_isNumber);
		return i_isNumber;
	}

}