/*
	***********************************************************************************
					VALIDACIÓ DE FORMULARI (c)2008 PereGR
					pgrvalida.js v1.1

					IE 6,7
					FireFox 1
	***********************************************************************************



	Ús:
	-----------------------------------------------------------------------------------
	En el HEAD del document s'ha d'afegir
		<script type="text/javascript" src="pgrvalida.js"></script>
		En el cas que el fitxer pgrvalida.js no estigui a la mateixa carpeta que el 
		document, s'haurà de corregir el valor src.


	-----------------------------------------------------------------------------------
	En el Formulari s'ha d'afegir
		ONSUBMIT="javascript: return valida(formulari,idioma);"

		formulari:  És el nom del formulari.
					Es pot utilitzar this per defecte
		idioma: 	És l'idioma en el que donarà les respostes.
					El nom de l'idioma haurà d'anar entre cometes simples, p.ex: 'ct'
					Aquest pot ser:
						ct - Català
						es - Castellà
						en - Anglés
						de - Alemany
						nl - Holandés
						fr - Francés
						it - Italià
					Si no es defineix "return valida(this);", per defecte serà Català. 
		
		Exemple: Validació de formulari en Català
		<FORM NAME="NOM" ACTION="URL" METHOD="POST" ONSUBMIT="javascript: return valida(this,'ct');">



	-----------------------------------------------------------------------------------
	Marcar camps per a validació:
		VAL="tipus de validació" ALT="Texte descriptiu del camp"

		VAL: És el tipus de validació que volem.
			 Tant sols pot ser d'un tipus.
			 Aquesta validació pot ser:
			 	OB - Camp OBligatori

				MM - Ha de ser superior a un Mínim i/o inferior a un Màxim.
					 El mínim i el màxim els definirem amb els paràmetres MIN i MAX.
					 P.ex: 
						Entre 0 i 4: <INPUT TYPE="TEXT" NAME="NUM" VAL="MM" MIN="0" MAX="4">
						Superior a 2: <INPUT TYPE="TEXT" NAME="NUM" VAL="MM" MIN="2">
						Inferior a 12: <INPUT TYPE="TEXT" NAME="NUM" VAL="MM" MAX="12">

				EM - El camp ha de ser una adreça de correu o EMail vàlida.
					 Comprovarà que hi hagi una @ i un .
					 A més a més, comprovarà que la llargada total tingui un mínim de 8
					 caracters. 2 per a l'usuari + @ + 2 per el domini + . + 2 per al TLD
					 
				TM - Telefon mob.
				TF - Telefon fixe
				
				HR - Hora hh:mm (MAX / MIN)

		ALT: Texte descriptiu del camp o 
			 Missatge d'error (Tant sols en el cas dels camps OBligatoris).

			 Si no es defineix, es presentarà el nom del camp i el missatge d'error per defecte.
			 P.ex: <INPUT TYPE="TEXT" NAME="NOM" VAL="OB" ALT="Ompli el Nom de l'empresa">
*/

/*
	*************************************************************************************

							NO MODIFICAR A PARTIR D'AQUEST PUNT !!!!

	*************************************************************************************
*/



























/*
	DEFINICIO MISSATGES D'ERROR.
*/
	// CATALÀ - CT
	var Err_ct_Ob = " és un camp obligatori.";
	var Err_ct_Minim = " ha de ser igual o superior a ";
	var Err_ct_Maxim = " ha de ser igual o inferior a ";
	var Err_ct_Numeric = " ha de ser un valor numèric.";
	var Err_ct_Email = " no és una adreça vàlida.";
	//ANGLÉS - EN
	var Err_en_Ob = " is a mandatory field.";
	var Err_en_Minim = " must be equal to or greater than ";
	var Err_en_Maxim = " must be equal to or less than ";
	var Err_en_Numeric = " must be a number.";
	var Err_en_Email = " is not a valid email address.";
	// CASTELLÀ - ES
	var Err_es_Ob = " es un campo obligatorio.";
	var Err_es_Minim = " debe ser igual o superior a ";
	var Err_es_Maxim = " debe ser igual o inferior a ";
	var Err_es_Numeric = " debe ser un número.";
	var Err_es_Email = " no es una dirección valida.";
	// FRANCÉS - FR
	var	Err_fr_Ob = " est obligatoire."; 
	var	Err_fr_Minim = " doit être égal ou supérieur à "; 
	var	Err_fr_Maxim = " doit être inférieur ou égal à "; 
	var Err_fe_Numeric = " doit être un nombre.";
	var	Err_fr_Email = " n'est pas une adresse email valide."
	// ALEMANY - DE
	var	Err_de_Ob = " ist ein Pflichtfeld." 
	var	Err_de_Minim = " muss grösser oder gleich als "; 
	var	Err_de_Maxim = " muss gleich oder weniger als ";
 	var Err_de_Numeric = " muss eine Zahl.";
	var	Err_de_Email = " ist keine gültige E-Mail-Adresse."
	// ITALIÀ - IT
	var Err_it_Ob = " è un campo obbligatorio."; 
	var Err_it_Minim = " deve essere pari o superiore a "; 
	var Err_it_Maxim = " deve essere uguale o inferiore a "; 
	var Err_it_Numeric = " deve essere un numero.";
	var Err_it_Email = " non è un indirizzo email valido.";
	// HOLANDÉS - NL
	var Err_nl_Ob = " is een verplicht veld."; 
	var Err_nl_Minim = " moet gelijk zijn aan of groter dan "; 
	var Err_nl_Maxim = " moet gelijk aan of minder dan ";
	var Err_nl_Numeric = " moet een aantal."; 
	var Err_nl_Email = " is geen geldig e-mailadres.";
/*
	FI DEFINICIO MISSATGES D'ERROR.
*/


	function valida(idf,idioma){
		if (!idioma) idioma='ct';
		var TxtOb = eval("Err_"+idioma.toLowerCase()+"_Ob")
		var TxtNum = eval("Err_"+idioma.toLowerCase()+"_Numeric");
		var TxtMin = eval("Err_"+idioma.toLowerCase()+"_Minim");
		var TxtMax = eval("Err_"+idioma.toLowerCase()+"_Maxim");
		var TxtEmail = eval("Err_"+idioma.toLowerCase()+"_Email");
		var Err = 0;
		var ErrTmp = 0;
		var Err_Msg = "";
		var Err_Tmp = "";
		for (var x = 0; x < idf.elements.length; x++){
			ErrTmp = 0;
			if (!idf.elements[x].getAttribute("ALT"))
				Err_Tmp = idf.elements[x].name.toUpperCase()
			else
				Err_Tmp = idf.elements[x].getAttribute("ALT");
			switch(idf.elements[x].getAttribute("VAL")){
				case "OB":
				
					if (idf.elements[x].value.length==0){
						ErrTmp++;
						if (!idf.elements[x].getAttribute("ALT"))
							Err_Tmp = Err_Tmp + "\n- "+ TxtOb
						else
							Err_Tmp = idf.elements[x].getAttribute("ALT");
					}
					break;
				case "MM":
					if (!IsNumeric(idf.elements[x].value)){
						ErrTmp++;
						Err_Tmp = Err_Tmp + "\n- " + TxtNum
					} else {
						if (idf.elements[x].getAttribute("MIN")){
							if (parseInt(idf.elements[x].value) < parseInt(idf.elements[x].getAttribute("MIN")) ){
								ErrTmp++;
								Err_Tmp = Err_Tmp + "\n- " + TxtMin + idf.elements[x].getAttribute("MIN");
								if (idf.elements[x].getAttribute("MAX")){
									Err_Tmp = Err_Tmp + "\n- " + TxtMax + idf.elements[x].getAttribute("MAX");
								}
							}
						}
						if (idf.elements[x].getAttribute("MAX")){
							if (idf.elements[x].value > idf.elements[x].getAttribute("MAX")){
								ErrTmp++;
								Err_Tmp = Err_Tmp + "\n- " + TxtMax + idf.elements[x].getAttribute("MAX");
								if (idf.elements[x].getAttribute("MIN")){
									Err_Tmp = Err_Tmp + "\n- " + TxtMin + idf.elements[x].getAttribute("MIN");
								}
							}
						}
					}
					break;
				case "EM":
					if (!isValidEmail(idf.elements[x].value) || idf.elements[x].value.length < 8){
							ErrTmp++;
							Err_Tmp = Err_Tmp + "\n- " +idf.elements[x].value+ TxtEmail;
					}
					break;

				case "TM":
					//alert(idf.elements[x].value.length);
					var len;
					var str;
					len=idf.elements[x].value.length;
					str=idf.elements[x].value;

					//alert ();
					if ((!IsNumeric(idf.elements[x].value))||(str.substr(0,1)!=6)||((len<9))){
						
						ErrTmp++;
						Err_Tmp = Err_Tmp + "\n- " + TxtNum
					}

				break;

				case "TF":
					//alert(idf.elements[x].value.length);
					var len;
					var str;
					len=idf.elements[x].value.length;
					str=idf.elements[x].value;

					//alert ();
					if ((!IsNumeric(idf.elements[x].value))||(str.substr(0,1)!=9)||((len<9))){
						
						ErrTmp++;
						Err_Tmp = Err_Tmp + "\n- " + TxtNum
					}

				break;

				
				// FORMAT HORA: VALIDA QUE ESTIGUI ENTRE MAX i MIN
				case "HR":
				
					//alert(idf.elements[x].value.length);
					var RegExPattern = /([0-1][0-9]|2[0-3])|:[0-5][0-9]$/;
					var len;
					var str;
					var hora;
					
					len=idf.elements[x].value.length;
					str=idf.elements[x].value;
					
					if (str.match(RegExPattern)) 
					{
						hora=str.split(":")[0];
						hora=hora.split(".")[0];
						hora=hora.split("-")[0];
						
						//alert("HORA BONA!! "+hora);
						
						if (idf.elements[x].getAttribute("MIN")){
							if (hora < parseInt(idf.elements[x].getAttribute("MIN")) ){
								ErrTmp++;
								Err_Tmp = Err_Tmp + "\n- " + TxtMin + idf.elements[x].getAttribute("MIN");
								if (idf.elements[x].getAttribute("MAX")){
									Err_Tmp = Err_Tmp + "\n- " + TxtMax + idf.elements[x].getAttribute("MAX");
								}
							}
						}
						if (idf.elements[x].getAttribute("MAX")){
							if (hora > idf.elements[x].getAttribute("MAX")){
								ErrTmp++;
								Err_Tmp = Err_Tmp + "\n- " + TxtMax + idf.elements[x].getAttribute("MAX");
								if (idf.elements[x].getAttribute("MIN")){
									Err_Tmp = Err_Tmp + "\n- " + TxtMin + idf.elements[x].getAttribute("MIN");
								}
							}
						}
						
					
					}
					else 
					{
						ErrTmp++;
					}
					/*
					else if ( (!IsNumeric ( str ) )|| ( str.substr(0,1)!=9 )|| (len!=9) )
					{	
						ErrTmp++;
						Err_Tmp = Err_Tmp + "\n- " + TxtNum
					}
*/
				break;


				case "OP":
					// CAS ESPECIAL MATINIT
					if (idf.elements[x].name=="matinit")
					{
						//alert(idf.elements[x].value+" EEEE "+idf.elements[x].value.length);
						if (!document.getElementById("matinit").checked && !document.getElementById("matinit2").checked)
						{
								ErrTmp++;
								//Err_Tmp = Err_Tmp + "\n- " + idf.elements[x].getAttribute("ALT");
								//Err_Tmp = Err_Tmp + "\n- " + idf.elements[x].getAttribute("ALT");
						}
					}

				break;
}
			if (ErrTmp > 0 ){
				Err_Msg = Err_Msg + Err_Tmp + "\n\n";
				Err = Err + ErrTmp;
			}
		}
		if (Err > 0 ){
			alert(Err_Msg);
			return false;
		} else {
			return true;
		}
	}

	function IsNumeric(strString)
	   //  check for valid numeric strings 
	   {
	   var strValidChars = "0123456789.-";
	   var strChar;
	   var blnResult = true;

	   if (strString.length == 0) return false;

	   //  test strString consists of valid characters listed above
	   for (i = 0; i < strString.length && blnResult == true; i++)
	      {
	      strChar = strString.charAt(i);
	      if (strValidChars.indexOf(strChar) == -1)
	         {
	         blnResult = false;
	         }
	      }
	   return blnResult;
	   }




	function isValidEmail(str) {
	   return (str.indexOf(".") > 2) && (str.indexOf("@") > 0);
	 
	}

	function handleError(msg, url, linenumber){
		alert('Error message= '+msg+'\nLine Number= '+linenumber)
		return true
}


	window.onerror = handleError;

