// ver. 2.0 //
var err = false;
var msg = "Attenzione!"
var bFuoco = true;
var chValS="_()/-…%&\\";
var chValSP=" ";
var chValAT="@";
var chValP=".,:;!";
var chValN="123456789";
var chValAP="'";
var chValNZ="0";
var chValAst="*";
var chValVirg=",";
var chValPunt=".";
var chValA="'’abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZèéàòìù°€";
var chValMA="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ._";
var chCFis="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
var chPersonale="";
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 "IMPORTO" :
			PerControllo = chValN+chValNZ+chValVirg+chValPunt;
			break;
		case "LETNUM" :
			PerControllo = chCFis;
			break;
		case "LIBERO" :
			PerControllo = chValA+chValSP+chValN+chValNZ+chValP+chValS+chValAP;
			break;
		case "CODICI" :
			PerControllo = chValN+chValNZ+chValSP;
			break;
		case "INMAIL" :
			PerControllo = chValMA+chValAT+chValN+chValNZ;
			break;
		case "PERSONALE" :
			PerControllo = chPersonale;
			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 "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;
						default :
							break;
					} 
				} 
			}
		}
	}
	if (errInterno) {
		err = true;
		if (bFuoco) {
			CampoTesto.focus();
			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;
							}
						}
					}
				}
			}
		}
	}
//	return false;
}

