// ver. 2.3 //
// Seleziona il contenuto del campo errato //
var versione = "2.3";
var err = false;
var msg = "Rilevazione errori ver." + versione + "\n Attenzione!";
var bFuoco = true;
var chValS="_()/-…%&\\";
var chValSP=" ";
var chValAT="@";
var chValP=".,:;!";
var chValN="123456789";
var chValSN="-";
var chValAP="'";
var chValNZ="0";
var chValAst="*";
var chValVirg=",";
var chValPunt=".";
var chValA="'’abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZèéàòìù°€";
var chValMA="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ._";
var chCFis="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
var chPersonale="";
var chValVari="-_()";
var chVbCrLf = String.fromCharCode(13,10);
function ControllaTesto(CampoTesto, DescrittivaTesto, LunghezzaTesto, TipoTesto, UCTesto){
//	Utilizzo della funzione di controllo testo
//		PARAMETRI:	
//			CampoTesto = Valore da controllare
//			DescrittivaTesto = Descrittiva da riportare nel messaggio di avviso
//			LunghezzaTesto = Lunghezza minima del valore da controllare (se > 0 = OBBLIGATORIO)
//			TipoTesto = tipologia di validità dei caratteri che compongono il testo
//			UCTesto = Se si vuole trasformare il testo in soli caratteri maiuscoli e/o
//					  Se si vogliono eliminare gli spazi in testa ed in coda (Trim)
//				Compatibilità ver. 1.0
//					true = applica UpperCase e Trim (dalla ver. 2.0 = 8)
//					false = lascia il testo invariato ed applica la Trim  (dalla ver. 2.0 = 0)
//				ver. 2.0
//					qualsiasi valore diverso da false (0) e tutti i valori sotto riportati assume true (8)
//					2 = Lascia il testo invariato
//					3 = applica solo UpperCase
//					5 = applica solo Trim
//					8 = applica UpperCase e Trim (3 + 5)
//		Le seguenti variabili devono essere inizializzate nella funzione di controllo	
//			msg = "Attenzione!"
//			err = false;
//			bFuoco = true;
//		La Variabile chPersonale può essere utilizzata per gestire una serie di caratteri validi
//			non altrimenti previsti, La chiamata TipoTesto in questo caso è 'PERSONALE'
var PerControllo = "";
var errInterno = false;
var UcT = true;
var TrT = true;
	switch (UCTesto) {
		case false :
			UcT = false;
			TrT = true;
			break;
		case 2 :
			UcT = false;
			TrT = false;
			break;
		case 3 :
			UcT = true;
			TrT = false;
			break;
		case 5 :
			UcT = false;
			TrT = true;
			break;
		default :
			UcT = true;
			TrT = true;
			break;
	} 
	switch (TipoTesto) {
		case "XDATA" :
			PerControllo = chValN+chValNZ+"/";
			break;
		case "XDATA6" :
			PerControllo = chValN+chValNZ+"/";
			break;
		case "TESTO" :
			PerControllo = chValA+chValSP;
			break;
		case "NUMERO" :
			PerControllo = chValN+chValNZ;
			break;
		case "SNUMERO" :
			PerControllo = chValN+chValSN+chValNZ;
			break;
		case "IMPORTO" :
			PerControllo = chValN+chValNZ+chValVirg+chValPunt;
			break;
		case "SIMPORTO" :
			PerControllo = chValN+chValSN+chValNZ+chValVirg+chValPunt;
			break;
		case "LETNUM" :
			PerControllo = chCFis;
			break;
		case "LIBERO" :
			PerControllo = chValA+chValSP+chValN+chValNZ+chValP+chValS+chValAP;
			break;
		case "MULTILINEA" :
			PerControllo = chValA+chValSP+chValN+chValNZ+chValP+chValS+chValAP+chVbCrLf;
			break;
		case "CODICI" :
			PerControllo = chValN+chValNZ+chValSP;
			break;
		case "INMAIL" :
			PerControllo = chValMA+chValAT+chValN+chValNZ;
			break;
		case "PERSONALE" :
			PerControllo = chPersonale;
			break;
		case "LIBEROBIS" :
			PerControllo = chValA+chValPunt+chValVirg+chValN+chValNZ+chValVari+chValSP+chCFis;
			break;
		case "LIBEROTRIS" :
			PerControllo = chValA+chValN+chValNZ+chValVari+chValSP+chCFis;
			break;
		case "TESTOBIS" :
			PerControllo = chValA+chValSP+chValN+chValNZ;
			break;
		case "CODFISC" :
			PerControllo = chCFis;
			break;
		default :
			msg = msg + "\n \n E R R O R E   G E N E R A L E   D I   C O N T R O L L O   I M P O S S I B I L E   P R O S E G U I R E\n \n ";
			errInterno = true;
			break;
	} 
	if (errInterno == false) {
		if (UcT) {
			CampoTesto.value = CampoTesto.value.toUpperCase();
		}
		if (TrT) {
			CampoTesto.value = trim(CampoTesto.value);
		}
		if (ChEsiste(CampoTesto.value,PerControllo)) {
			msg = msg + "\n Il campo " + DescrittivaTesto;
			msg = msg + "\n    contiene caratteri non ammessi";
			errInterno = true;
		}else{
			if (CampoTesto.value.length < LunghezzaTesto) {
				msg = msg + "\n Il campo " + DescrittivaTesto;
				msg = msg + "\n    deve contenere almeno " + LunghezzaTesto + " caratteri";
				errInterno = true;
			}else{
				if (CampoTesto.value.length != 0) { 
					switch (TipoTesto) {
						case "SNUMERO" :
							errInterno = ControlloSegno(CampoTesto.value, DescrittivaTesto);
							break;
						case "SIMPORTO" :
							errInterno = ControlloSegno(CampoTesto.value, DescrittivaTesto);
							break;
						case "XDATA" :
							errInterno = ControlloData(CampoTesto.value, DescrittivaTesto, "aaaa");
							break;
						case "XDATA6" :
							errInterno = ControlloData(CampoTesto.value, DescrittivaTesto, "aa");
							break;
						case "INMAIL" :
							if (AlmenoQuanti(CampoTesto.value,"@",1,false)) {
								msg = msg + "\n Il campo " + DescrittivaTesto;
								msg = msg + "\n    non è nel formato previsto";
								errInterno = true;
							}else{
								if (AlmenoQuanti(CampoTesto.value,".",1,true)) {
									msg = msg + "\n Il campo " + DescrittivaTesto;
									msg = msg + "\n    non è nel formato previsto";
									errInterno = true;
								}else{
									if (CampoTesto.value.indexOf(".",CampoTesto.value.indexOf("@")+3) < 3) {
										msg = msg + "\n Il campo " + DescrittivaTesto;
										msg = msg + "\n    non è nel formato previsto";
										errInterno = true;
									}
								}
							}
							break;
						case "CODFISC" :
							stringa = CampoTesto.value
							var lung=null;
							var test=null;
							lettere=new Array();
							//array= lettera, valore se pari, valore se dispari
							lettere[0]=["A","0","1"];
							lettere[1]=["B","1","0"];
							lettere[2]=["C","2","5"];
							lettere[3]=["D","3","7"];
							lettere[4]=["E","4","9"];
							lettere[5]=["F","5","13"];
							lettere[6]=["G","6","15"];
							lettere[7]=["H","7","17"];
							lettere[8]=["I","8","19"];
							lettere[9]=["J","9","21"];
							lettere[10]=["K","10","2"];
							lettere[11]=["L","11","4"];
							lettere[12]=["M","12","18"];
							lettere[13]=["N","13","20"];
							lettere[14]=["O","14","11"];
							lettere[15]=["P","15","3"];
							lettere[16]=["Q","16","6"];
							lettere[17]=["R","17","8"];
							lettere[18]=["S","18","12"];
							lettere[19]=["T","19","14"];
							lettere[20]=["U","20","16"];
							lettere[21]=["V","21","10"];
							lettere[22]=["W","22","22"];
							lettere[23]=["X","23","25"];
							lettere[24]=["Y","24","24"];
							lettere[25]=["Z","25","23"];
							lettere[26]=["0","0","1"];
							lettere[27]=["1","1","0"];
							lettere[28]=["2","2","5"];
							lettere[29]=["3","3","7"];
							lettere[30]=["4","4","9"];
							lettere[31]=["5","5","13"];
							lettere[32]=["6","6","15"];
							lettere[33]=["7","7","17"];
							lettere[34]=["8","8","19"];
							lettere[35]=["9","9","21"];
							ConfrontoCarattereControllo=new Array();
							ConfrontoCarattereControllo[0]=["A"];
							ConfrontoCarattereControllo[1]=["B"];
							ConfrontoCarattereControllo[2]=["C"];
							ConfrontoCarattereControllo[3]=["D"];
							ConfrontoCarattereControllo[4]=["E"];
							ConfrontoCarattereControllo[5]=["F"];
							ConfrontoCarattereControllo[6]=["G"];
							ConfrontoCarattereControllo[7]=["H"];
							ConfrontoCarattereControllo[8]=["I"];
							ConfrontoCarattereControllo[9]=["J"];
							ConfrontoCarattereControllo[10]=["K"];
							ConfrontoCarattereControllo[11]=["L"];
							ConfrontoCarattereControllo[12]=["M"];
							ConfrontoCarattereControllo[13]=["N"];
							ConfrontoCarattereControllo[14]=["O"];
							ConfrontoCarattereControllo[15]=["P"];
							ConfrontoCarattereControllo[16]=["Q"];
							ConfrontoCarattereControllo[17]=["R"];
							ConfrontoCarattereControllo[18]=["S"];
							ConfrontoCarattereControllo[19]=["T"];
							ConfrontoCarattereControllo[20]=["U"];
							ConfrontoCarattereControllo[21]=["V"];
							ConfrontoCarattereControllo[22]=["W"];
							ConfrontoCarattereControllo[23]=["X"];
							ConfrontoCarattereControllo[24]=["Y"];
							ConfrontoCarattereControllo[25]=["Z"];
							var Carattere=0;
							var ValorePari=1;
							var ValoreDispari=2;
							var SommaCaratteri=0;
							var PariDispari=null;
							stringa=stringa.toUpperCase();
							//alert(stringa);
							lung=stringa.length;
							//alert(lung);
							CarattereControllo=stringa.substr(lung-1,1);
							//alert(CarattereControllo)
							stringa=stringa.substring(lung-1,0);
							//alert(stringa);
							lung=stringa.length;
							//alert(lung);
							for (i=0; i<=lung-1; i++){
								if ((i+1)%2==0){
											PariDispari='P'
										   }
								else		{
										   PariDispari='D'
										}
								//alert(PariDispari);	
								temp=stringa.charAt(i);
								for (t=0; t<=35; t++){
												test=lettere[t][Carattere];
												if (temp==test){break}
											   }
								if(PariDispari=='P')	{
												SommaCaratteri=SommaCaratteri+parseInt(lettere[t][ValorePari])
												}
								else				{
												SommaCaratteri=SommaCaratteri+parseInt(lettere[t][ValoreDispari])
												}
								}
								Risultato=SommaCaratteri % 26;
								//alert(Risultato);
								Risultato=ConfrontoCarattereControllo[Risultato][0];
								//alert(Risultato);
								if (Risultato!=CarattereControllo)	{
										msg = msg + "\n Il campo " + DescrittivaTesto;
										msg = msg + "\n    non è nel formato previsto";
										errInterno = true;
								}
							break;
						default :
							break;
					} 
				} 
			}
		}
	}
	if (errInterno) {
		err = true;
		if (bFuoco) {
			CampoTesto.focus();
			CampoTesto.select();
			bFuoco = false;
		}
		return true;
	}else{
		return false;
	}
}

function ChEsiste(inputString,chValidi) {
	var checkOK=chValidi;
	var y=0;
	var i=0;
	var ansCorr=false;
	var retValue=inputString;
	var ch=retValue.substr(0, 1);
	for (y=0;y<retValue.length;y++) {
		for (i=0;i<checkOK.length;i++) {
			if (retValue.substr(y,1)==checkOK.substr(i,1)) {
				break;
			}
		}
		if (i==checkOK.length||i>checkOK.length){
			ansCorr=true;
			break;
		}
	}
	return ansCorr;
}

function AlmenoQuanti(inputString,chValido,Quanti,Almeno) {
	var y=0;
	var conto=0;
	var ansCorr=true;
	var retValue=inputString;
	for (y=0;y<retValue.length;y++) {
		if (retValue.substr(y,1)==chValido) {
			conto=conto+1;
		}
	}
	if (Almeno) {
		if (conto==Quanti || conto>Quanti) {
			ansCorr=false;
		}
	}else{
		if (conto==Quanti) {
			ansCorr=false;
		}
	}
	return ansCorr;
}

function trim(inputString) {
   var retValue = inputString;
   var ch = retValue.substring(0, 1);
   while (ch == " ") {
      retValue = retValue.substring(1, retValue.length);
      ch = retValue.substring(0, 1);
   }
   ch = retValue.substring(retValue.length-1, retValue.length);
   while (ch == " ") {
      retValue = retValue.substring(0, retValue.length-1);
      ch = retValue.substring(retValue.length-1, retValue.length);
   }
   return retValue;
}

function ControlloData(CDvalore, CDDescTesto, CDanno) {
var CDxTappoF = "99/99/99";
var CDxTappoI = "00/00/00";
	if (CDanno == "aaaa") {
		CDxTappoF = CDxTappoF + "" + "99";
		CDxTappoI = CDxTappoI + "" + "00";
	}
	if (AlmenoQuanti(CDvalore,"/",2,false)) {
		msg = msg + "\n Il campo " + CDDescTesto;
		msg = msg + "\n    deve essere nel formato gg/mm/" + CDanno;
		return true;
	}else{
		if ((CDvalore.substr(2,1) + CDvalore.substr(5,1) + "") != "//") {
			msg = msg + "\n Il campo " + CDDescTesto;
			msg = msg + "\n    deve essere nel formato gg/mm/" + CDanno;
			return true;
		}else{
			if (CDvalore != CDxTappoF && CDvalore != CDxTappoI) {
				if (CDvalore.substr(0,2) == "00" || CDvalore.substr(3,2) == "00" || CDvalore.substr(3,2) > "12") {
					msg = msg + "\n Il campo " + CDDescTesto;
					msg = msg + "\n    presenta dati non validi";
					msg = msg + "\n    deve essere nel formato gg/mm/" + CDanno;
					return true;
				}else{
					if (CDvalore.substr(3,2) == "02") {
						if (CDvalore.substr(0,2) > "29") {
							msg = msg + "\n Il campo " + CDDescTesto;
							msg = msg + "\n    ha un giorno non previsto per il mese indicato";
							msg = msg + "\n    deve essere nel formato gg/mm/" + CDanno;
							return true;
						}else{
							if (CDvalore.substr(0,2) > "28") {
								if (CDanno == "aaaa") {
									CDxTappoF = CDvalore.substr(6,4);
								}else{ 
									CDxTappoF = CDvalore.substr(6,2);
									if (parseInt(CDxTappoF) < 27) {
										CDxTappoF = "20" + CDxTappoF + "";
									}else{
										CDxTappoF = "19" + CDxTappoF + "";
									}
								}
								CDxTappoI = parseInt(CDxTappoF) % 4;
								if (CDxTappoI != 0) {
									msg = msg + "\n Il campo " + CDDescTesto;
									msg = msg + "\n    ha un giorno non previsto per il mese indicato";
									return true;
								}else{
									CDxTappoI = parseInt(CDxTappoF) % 100;
									if (CDxTappoI == 0) {
										CDxTappoI = parseInt(CDxTappoF) % 400;
										if (CDxTappoI != 0) {
											msg = msg + "\n Il campo " + CDDescTesto;
											msg = msg + "\n    ha un giorno non previsto per il mese indicato";
											return true;
										}
									}
								} 
							}
						}
					}else{
						if (CDvalore.substr(3,2) == "11" || CDvalore.substr(3,2) == "04" || CDvalore.substr(3,2) == "06" || CDvalore.substr(3,2) == "09") {
							if (CDvalore.substr(0,2) > "30") {
								msg = msg + "\n Il campo " + CDDescTesto;
								msg = msg + "\n    ha un giorno non previsto per il mese indicato";
								msg = msg + "\n    deve essere nel formato gg/mm/" + CDanno;
								return true;
							}
						}else{
							if (CDvalore.substr(0,2) > "31") {
								msg = msg + "\n Il campo " + CDDescTesto;
								msg = msg + "\n    ha un giorno non previsto per il mese indicato";
								msg = msg + "\n    deve essere nel formato gg/mm/" + CDanno;
								return true;
							}
						}
					}
				}
			}
		}
	}

	function ControlloSegno(CSValore, CSTesto) {
		if (AlmenoQuanti(CSValore,"-",1,true)) {
			return false;
		}else{			
			if (AlmenoQuanti(CSValore,"-",1,false)) {
				msg = msg + "\n Il campo " + CSTesto;
				msg = msg + "\n    ha un numero di segni maggiore del consentito";
				return true;
			}else{
				if (CSValore.substr(0,1) != "-") {
					msg = msg + "\n Il campo " + CSTesto;
					msg = msg + "\n    Se viene utilizzato il segno, questo";
					msg = msg + "\n    deve essere posto come primo carattere";
					return true;
				}else{
					return false;
				}
			}
		}
	}

//	return false;
}