<!--

error_lunghezza="checkform_error_lunghezza"
error_non_mandatory="checkform_error_non_mandatory"
error_data_non_possibile="checkform_error_data_non_possibile"
error_cf_non_possibile="checkform_error_cf_non_possibile"
error_data="La data inserita non è corretta, usa il formato g/m/aaaa  (es. 28/3/2001)"
error_text="Il campo contiene caratteri non ammessi"
error_intero="Il campo non contiene numeri interi"
error_numerico="Il campo non un numeri"
error_alfanumerico="Il campo non contiene solo caratteri alfanumerici"
error_mail="Il campo non contiene un indirizzo e-mail valido"
error_CAP="Il campo non contiene un CAP valido"
error_currency="Il campo non contiene una valuta valido"
error_time="checkform_error_time"
error_cf="Codice fiscale non valido"
error_piva="Partita IVA non valida"
error_tel="Numero telefonico non valido."
error_any=""

function checkform(the_form){
	/*
	il formato è NOME CAMPO || DATA TYPE || MANDATORY || TXT_ALERT
	*/
	esitotest_form=true;
	for(var i = 0; i < the_form.elements.length && esitotest_form==true; i++) {
		with(the_form.elements[i]){ // for each element of the form...
			if (id!='') {
				var split_id=id.split("||");
				nome_campo_comprensibile=split_id[0]
				datatype=split_id[1]
			  	var mandatory = split_id[2]
			  	txt_alert=split_id[3];
				if (!nome_campo_comprensibile) nome_campo_comprensibile=name
				eseguitest=true
			  	if (eseguitest) {
					var esitotest=checkfield(the_form,the_form.elements[i],datatype,mandatory)
					if (esitotest!=0) esitotest_form=false
					temp=fgestioneErrore(esitotest,the_form.elements[i],nome_campo_comprensibile,datatype,txt_alert)
				}
			}
		}
	}
  	try {
  		if (esitotest_form) {
  			esitotest_form = fInPageFormCheck();
  		}
	} catch (er) {
	}
	return (esitotest_form);
}

function checkfield(the_form,oCampo,datatype,mandatory){
/*		se tf e dest_ è all'inizio del nome campo OPPURE dest_ non è all'inizio (o non c'è)		*/
	/*
	0: ok
	2: //obbligatorio e lunghezza 0 -> esco
		"Errore "+nome_campo_comprensibile+" ! "+eval("error_"+datatype))
	3: errore generico di formato
	4: non obbligatorio e inserito male
	10: errore di data non possibile 31/2/2002
	11: cf non valido
	*/
	value=oCampo.value
	type=oCampo.type
	if (mandatory!=0 && value.length==0) return 2 //obbligatorio e lunghezza 0 -> esco
	if (mandatory==0 && value.length==0) return 0 //non obbligatorio e lunghezza 0 -> esco
	if ((datatype=="*") || (!datatype) || (datatype.toLowerCase()=="select") || (type=="hidden") || (!mandatory && value.length==0)) return 0;
	var reg1 = null;
	switch (datatype) {
case 	"text":
	//solo lettere maiuscole o minuscole, lettere accentate, apostrofo (niente dieresi o simili)
	var reg1 = /[\[\]\#\§\,\.\-_:;<>\^\?=\)\(\/\&%\$£"\!\\\|]/; // not valid
	var reg2 = /[0-9]|[ùàòèéì' ]|\w/i; // valid
	break;
case "intero":
	//solo interi positivi o negativi
	var reg1 = /[\[\]\#\§\,\._:;<>\^\?=\)\(\/\&%\$£"\!\\\|ùàòèéì' ]|[a-zA-Z]/; //invalid
	var reg2 = /(^-?\d\d*$)/; //valid
   break;
case "numerico":
	//solo punto per decimali
	var reg1 = /[\[\]\#\§\,_:;<>\^\?=\)\(\/\&%\$£"\!\\\|ùàòèéì' ]|[a-zA-Z]/;; // not valid
	var reg2 = /((^-?\d\d*\.\d*$)|(^-?\d\d*$)|(^-?\.\d\d*$))/; // valid
	//sia punto che virgola validi per decimali
	//var reg1 = /[\[\]\#\§\_:;<>\^\?=\)\(\/\&%\$£"\!\\\|ùàòèéì' ]|[a-zA-Z]/;; // not valid
	//var reg2 = /((^-?\d\d*[\.,]\d*$)|(^-?\d\d*$)|(^-?[\.,]\d\d*$))/; // valid
   break;
case "alfanumerico":
  	var reg1 = /[\|!"£\$%\&\(\)=\?\^\[\]\+\*ç°§,\.\-_:;<>@#]/; // not valid
	var reg2 = /[a-zA-Z0-9òàùèéì'\/\\]/; // valid
   break;
case "mail":
  	var reg1 = /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/; // not valid
	var reg2 = /^[a-zA-Z0-9/\.-_]{1,}@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$/; // valid tolto \'
	//[a-zA-Z0-9]{1,}[\w\.-]{0,}
	//var reg2 = /^[a-z0-9]([a-z0-9_\-\.]*)@([a-z0-9_\-\.]*)(\.[a-z]{2,3}(\.[a-z]{2}){0,2})$/i;
	//var reg2 = /(^[a-z]([a-z_\.]*)@([a-z_\.]*)([.][a-z]{3})$)|(^[a-z]([a-z_\.]*)@([a-z_\.]*)(\.[a-z]{3})(\.[a-z]{2})*$)/i;
	break;
case "CAP":
  	var reg1 = /[\[\]\#\§\,\._\-:;<>\^\?=\)\(\/\&%\$£"\!\\\|ùàòèéì' ]|[a-zA-Z]/; // valid
	var reg2 = /(^\d{5}$)/; // valid
	//var reg2 = /(^\d{5}$)|(^\d{5}-\d{4}$)/; // valid USZIP
   break;
case "currency":
	var reg2 = /(^\$\d{1,3}(,\d{3})*\.\d{2}$)|(^\(\$\d{1,3}(,\d{3})*\.\d{2}\)$)/;
   break;
case "time":
	var reg2 = /^([1-9]|1[0-2])[:.][0-5]\d([:.][0-5]\d(\.\d{1,3})?)?$/;
   break;
case "piva":
	//var reg1 = /\D/; // not valid
  	var reg2 = /(^\d{11}$)/; // valid
   break;
case "data":
	var reg2 = /^(([1-9])|([0123][0-9]))[\/\-. ]([0]{0,1}[1-9]|[1][012])[\/\-. ][012][0-9]{3}$/; // valid
	var trovatoerrore = (!reg2.test(value));
	if (trovatoerrore){
		return 3;
	}else{
		var arrDate = new Array();
		splitvalue=/\D/;
		var arrDate = value.split(splitvalue);
		var my_date = new Date(arrDate[2],arrDate[1]-1,arrDate[0]);
		testgiorno=(my_date.getDate()==arrDate[0]);
		testmese=(my_date.getMonth() ==arrDate[1]-1);
		if (!(testgiorno && testmese)) {
			return 10;
		}
		reg2 = null; //ho finito il test, non interessa fare dopo quello generico
		value=arrDate[0]+'/'+(arrDate[1])+'/'+arrDate[2]
	}
	break;
case "cf":
		splitvalue=/\D/;
		var reg1 = /\W/; // not valid
		var reg2 = /\w{6}\d{2}\w{1}\d{2}\w{1}\d{3}\w{1}/; // valid
		if (ckCFCControllo(value)) return 0
		else return 11
	break;
case "tel":
	var reg1 = false; // ^([0-9\.\\\/ \-\+])/; // not valid
	var reg2 = /([0-9\ \.\\\/ \-\+])/; //(^\+{0,1}?\d\d*$)/; //valid
	num_falso=false
	if ((value.charAt(0)!=0)&&(value.charAt(0)!=3)&&(value.charAt(0)!="+")){
		num_falso=true;
	}else{
		temp=value;
		primo_char=temp.charAt(0)
		//prendo il primo carattere
	  	if (primo_char=="+") var re = /\+/
	  	else var re = new RegExp(primo_char,"gi");
	  	//sostituisco in tutta la stringa il carattere selezionato con "", serve per vedere se la stringa è una ripetizione di caratteri
		temp=temp.replace(re,"");
		if (temp.length==0) num_falso=true;
	}
  	if(num_falso) return 3;
   break;
}//switch
if (!reg1&&!reg2){//non testare
	trovatoerrore=false;
}
else if (!reg1) var trovatoerrore =(!reg2.test(value));
else if (!reg2) var trovatoerrore =(reg1.test(value));
else var trovatoerrore = (reg1.test(value) || (!reg2.test(value)));

if(trovatoerrore){
		if (!mandatory && (value.length!=0)) return 4
		else return 3
}
else return 0
}

function ckCFCControllo(CODICE){

	CODICE=CODICE.toUpperCase()
	// Per le posizioni pari vale il numero del carattere
	// Torna TRUE se coincide
	var dispari = new Array(1,0,5,7,9,13,15,17,19,21,2,4,18,20,11,3,6,8,12,14,16,10,22,25,24,23,1,0,5,7,9,13,15,17,19,21);
	var somma=0;
	var valcar;
	var caso;
	for (x=0; x < (CODICE.length-1); x++) {
		car=CODICE.substr(x , 1);
		ccar=car.charCodeAt();
		if (isFinite(car)) {
			if ((x+1)%2==0) { /* PARI */
				somma=somma+Math.floor(car);
				valcar=Math.floor(car);
				caso=1;
			}else{
				somma=somma+dispari[26+Math.floor(car)];
				valcar=dispari[26+Math.floor(car)];
				caso=2;
			}
		}else{
			if ((x+1)%2==0) { // PARI
				somma=somma+ccar-65;
				valcar=ccar-65;
				caso=3;
			}else{
				somma=somma+dispari[ccar-65];
				valcar=dispari[ccar-65];
				caso=4;
			}
		}
		//alert("passaggio: "+x+"caso: "+caso+" valore carattere: "+valcar+" carattere: "+car+" somma: "+somma)
	}
	var resto=somma%26; //arrotonda i numeri decimali in interi, ma qui va bene
	//alert("resto: "+(resto+65))
	//alert(CODICE.substr(CODICE.length-1 ,1)+"<->"+CODICE.substr(CODICE.length-1 ,1).charCodeAt())
	var vero_falsoCC=((CODICE.substr(CODICE.length-1 ,1).charCodeAt())==resto+65);
	//se test codice di controllo è passato: vero_falsoCC=true
	//alert("vero_falso: "+vero_falsoCC);

	return (vero_falsoCC)

	/*inizio controllo data*/
	//vero_falsoDATA=true;
	//if (ckCFCControllo.arguments.length==4) { //c'è anche giorno, mese, anno
	//	//alert(giorno+" "+ mese+" "+ anno)
	//	var array_mese=new Array("A","B","C","D","E","H","L","M","P","R","S","T")
	//	var posiz=anno.toString(10).length-2
	//	if (!((giorno%40)==CODICE.substr(6,2)) && (array_mese[mese-1]==CODICE.substr(8,1)) && (anno.toString(10).substr(posiz,2)==CODICE.substr(6,2))) {
	//		//alert("data OK");
	//		vero_falsoDATA=true;
	//	}else{
	//		vero_falsoDATA=false;
	//	}
	//}
}

function fgestioneErrore(codiceErr,oCampo,nome,dt,txt_alert){
	/*
	0: ok
	2: obbligatorio e lunghezza 0 -> esco
	3: errore generico di formato
	4: non obbligatorio e inserito male
	10: errore di data non possibile 31/2/2002
	11: cf non valido
	*/
switch(codiceErr){
case 	0:
	return true;
	break;
case 	2:
	alert(txt_alert)
	break;
case 	3:
	alert(txt_alert)
	break;
case 	4:
	alert(txt_alert)
	break;
case 	10:
	alert(txt_alert)
	break;
case 	11:
	alert(txt_alert)
	break;
}
if (codiceErr!=1){
	oCampo.select();
	oCampo.focus();
	return false;
}
}
//-->

