// ATTENZIONE!!! Una volta on-line, la variabile path deve essere resa assoluta!!!var path = "temaEnti/";var preloadFlag = false;var warning = "";var obbligatorio = "";ggmese = new Array();ggmese[1] = 31;ggmese[3] = 31;ggmese[4] = 30;ggmese[5] = 31;ggmese[6] = 30;ggmese[7] = 31;ggmese[8] = 31;ggmese[9] = 30;ggmese[10] = 31;ggmese[11] = 30;ggmese[12] = 31;// Funzione che si occupa di controllare la validita' dei form// Per attivare un controllo, copiare gli array sottostanti che devono essere utilizzati// all'interno della pagina (o in un .js esterno) sostituendo a "campi da controllare" i nomi// (o il numero) dei campi su cui deve essere eseguito il controllo all' onSubmit del form.// Esempi:// campo_nonVuoto = new Array("nonVuoto" , campi da controllare);// campo_telefono = new Array("telefono" , campi da controllare);// campo_email = new Array("email", campi da controllare;// campo_piva = new Array("piva", campi da controllare);// campo_cf = new Array ("cf", campi da controllare);// campo_numeri = new Array("numeri", campi da controllare);// campo_numeriDecimali = new Array("numeriDecimali", campi da controllare);// campo_primoSelezionato = new Array("primoSelezionato", campi da controllare);// campo_data = new Array("data", campi da controllare);// campo_cap = new Array("cap", campi da controllare);// campo_anno = new Array("anno", campi da controllare);// campo_ora = new Array("ora", campi da controllare);// campo_aggMessaggio = new Array("aggMessaggio", messaggi da aggiungere);//// E' possibile anche richiamare la funzione inserendo new Array direttamente nella chiamata:// Es. onSubmit='return controlla(new Array("nonVuoto" , campi da controllare),// new Array("telefono" , campi da controllare))'//// E' possibile eseguire un controllo facoltativo di un campo (l'utente viene SOLO avvertito// della non conformita' di alcuni dati) semplicemente aggiungendo "_fac" dopo il nome del controllo.// Esempi:// campo_nonVuoto = new Array("nonVuoto_fac" , campi da controllare);// campo_telefono = new Array("telefono_fac" , campi da controllare);function controlla() {	for(var i=0; i<arguments.length; i++) {		controllore = arguments[i];		target = controllore.slice(1);		funzione = controllore[0];		facoltativo = (funzione.substring(funzione.length-4) == "_fac") ? true : false;		if (facoltativo) {			funzione = funzione.substr(0, (funzione.length-4));		}		if (funzione == "nonVuoto") {			nonVuoto(target);		}		if (funzione == "cf") {			codiceFiscale(target);		}		if (funzione == "piva") {			conta(11, target);			caratteri("0123456789", target);		}		if (funzione == "cap") {			conta(5, target);			caratteri("0123456789", target);		}		if (funzione == "anno") {			conta(4, target);			caratteri("0123456789", target);		}		if (funzione == "telefono") {			caratteri("0123456789 -/", target);		}		if (funzione == "numeri") {			caratteri("0123456789", target);		}		if (funzione == "numeriDecimali") {			caratteri("0123456789,.", target);		}		if (funzione == "email") {			email(target);		}		if (funzione == "primoSelezionato") {			primoSelezionato(target);		}		if (funzione == "data") {			data(target);		}		if (funzione == "ora") {			ora(target);		}		if (funzione == "aggMessaggio") {			aggMessaggio(target);		}	}	if (obbligatorio != "") {		testo = "I SEGUENTI CAMPI NON SONO STATI\nCOMPILATI CORRETTAMENTE\n" + obbligatorio;		obbligatorio ="";		if (warning !="") {			testo += warning;			warning = "";		}		alert (testo);		return false;	} else if (warning != "") {		testo = "I SEGUENTI CAMPI NON SONO STATI\nCOMPILATI CORRETTAMENTE\n" + warning + "\n\nDesideri continuare lo stesso?";		warning = "";		return confirm (testo);	} else {		return true;	}}// Funzione di appoggio per la compilazione dei messaggi di errorefunction gestMessaggio(messaggio) {	facoltativo ? (warning += "- " + messaggio) : (obbligatorio += "- " + messaggio); }// Funzione per aggiungere dei messaggi di errorefunction aggMessaggio(target) {	for (i=0; i<target.length; i++) {		gestMessaggio(target[i] + "\n");	}}// Funzione che controlla che il campo target non sia vuoto (funziona sia con textbox che con radio button)function nonVuoto(target) {	for (i=0; i<target.length; i++) {		selTarget = target[i];		if (typeof(document.forms[0].elements[selTarget].length) != "undefined") {			checkRadio = false;			for (n=0; n<document.forms[0].elements[selTarget].length; n++) {				if (document.forms[0].elements[selTarget][n].checked) {					checkRadio = true;				}			}			if (checkRadio == false) {				gestMessaggio("Non e' stato selezionato nessuno dei\nvalori del campo " + selTarget + ".\n");			}		} else if (document.forms[0].elements[selTarget].value.length == 0) {			gestMessaggio ("Il campo " + selTarget + " non e' stato compilato.\n");		}	}}// Funzione che conta la lunghezza dei caratteri di un campofunction conta(n, target) {	for (i=0; i<target.length; i++) {		selTarget = target[i];		lunghezza = document.forms[0].elements[selTarget].value.length;		if (lunghezza != 0) {			if (lunghezza != n ) {				gestMessaggio ("Il campo " + selTarget + " deve essere di " + n + " caratteri.\n");			}		}	}}// Funzione che confronta la conformita' dei caratteri contenuti in un campo rispetto a una stringafunction caratteri(confronta, target) {	for (i=0; i<target.length; i++) {		selTarget = target[i];		errore= false;		analisi = document.forms[0].elements[selTarget].value;		for (f=0; f<analisi.length; f++) {			carattere = analisi.substring (f, f+1);			if (confronta.indexOf(carattere) == -1) {				errore = true;			}		}		if (errore) {			gestMessaggio ("Il campo " + selTarget + " contiene caratteri non validi.\n");		}		}}// Funzione che controlla che il campo abbia le caratteristiche di un'e-mailfunction email(target) {	for (i=0; i<target.length; i++) {		selTarget = target[i];		em = /^[_\.0-9A-Z-]+@([0-9A-Z][0-9A-Z-]+\.)+[A-Z]{2,6}$/;		reTrim=/\s+$|^\s+/g;		analisi = document.forms[0].elements[selTarget].value.toUpperCase();		if (analisi.length != 0) {			emailCtrl = analisi.replace(reTrim,"");    		if (em.test(emailCtrl) != true) {				gestMessaggio ("L'e-mail inserita nel campo " + selTarget + " non e' valida.\n");			}		}	}}// Funzione che controlla la validita' del codice fiscalefunction codiceFiscale(target) {	for (i=0; i<target.length; i++) {		selTarget = target[i];		cf = /^[A-Z]{6}\d{2}[A-Z]\d{2}[A-Z]\d{3}[A-Z]$/;		reTrim=/\s+$|^\s+/g;		analisi = document.forms[0].elements[selTarget].value.toUpperCase();		if (analisi.length != 0) {			codiceF = analisi.replace(reTrim,"");    		if (cf.test(codiceF) != true) {				gestMessaggio ("Il codice fiscale inserito nel campo " + selTarget + " non e' valido.\n");			}		}	}}// Funzione che controlla che il primo valore di un menu' a tendina non sia selezionatofunction primoSelezionato(target) {	for (i=0; i<target.length; i++) {		selTarget = target[i];		if (document.forms[0].elements[selTarget].options.selectedIndex == 0) {			gestMessaggio ("La prima voce del menu' " + selTarget + " non puo' essere selezionata.\n");		}	}}// Funzione che controlla la validita' della datafunction data(target) {	for (i=0; i<target.length; i++) {		selTarget = target[i];		campoData = document.forms[0].elements[selTarget].value;		separatore = new Array();		numeri = "0123456789";		if (campoData.length >0) {			errore = true;// individuazione dei separatori			for (f=0; f<campoData.length; f++) {				carattere = campoData.charAt (f);				if (numeri.indexOf(carattere) == -1) {					separatore [separatore.length] = f;				}			}			giorno = parseInt(campoData.substring(0,separatore[0]),10);			mese = parseInt(campoData.substring(separatore[0]+1,separatore[1]),10);			anno = parseInt(campoData.substring(separatore[1]+1,campoData.length),10);// controllo della validita' dei dati inseriti (anno bisestile)			if (mese <= 12 && mese >= 1 && anno <= 2200 && anno >= 1899 && giorno >=1) {				if (mese == 2) {					if ((anno%400 == 0 && giorno <= 29) || (anno%4 == 0 && anno%100 != 0 && giorno <= 29)) {						errore = false;					} else if (giorno <= 28) {						errore = false;										}				} else if (ggmese[mese] >= giorno) {					errore = false;				}				}			if (errore) {				gestMessaggio ("La data del campo " + selTarget + " non e' stata scritta correttamente.\n");			} else {				giorno = (giorno < 10) ? ("0" + giorno) : giorno;				mese = (mese < 10) ? ("0" + mese) : mese;				document.forms[0].elements[selTarget].value = giorno + "/" + mese + "/" + anno;			}		}	}}// Funzione che controlla la validita' dell'orafunction ora(target) {	for (i=0; i<target.length; i++) {		selTarget = target[i];		campoOra = document.forms[0].elements[selTarget].value;		separatore = new Array();		numeri = "0123456789";		if (campoOra.length >0) {			errore = true;// individuazione dei separatori			for (f=0; f<campoOra.length; f++) {				carattere = campoOra.charAt(f);				if (numeri.indexOf(carattere) == -1) {					separatore [separatore.length] = f;				}			}			if (separatore.length == 1) {				orario = parseInt(campoOra.substring(0,separatore[0]),10);				minuti = parseInt(campoOra.substring(separatore[0]+1,campoOra.length),10);				secondi = false;			} else if (separatore.length == 2) {				orario = parseInt(campoOra.substring(0,separatore[0]),10);				minuti = parseInt(campoOra.substring(separatore[0]+1,separatore[1]),10);				secondi = parseInt(campoOra.substring(separatore[1]+1,campoOra.length),10);			} else {				orario = parseInt(campoOra);				minuti = 0;				secondi = false;			}// controllo della validita' dei dati inseriti			if (orario >= 1 && orario <= 24 && minuti >= 0 && minuti <= 59) {				if (secondi !== false) {					errore = (secondi >= 0 && secondi <= 59) ? false : true;				} else {					errore = false;				}			}			if (errore) {				gestMessaggio ("L'ora del campo " + selTarget + " non e' stata scritta correttamente.\n");			} else {				orario = (orario < 10) ? ("0" + orario) : orario;				minuti = (minuti < 10) ? ("0" + minuti) : minuti;				if (secondi !== false) {					secondi = (secondi < 10) ? ("0" + secondi) : secondi;					document.forms[0].elements[selTarget].value = orario + ":" + minuti + "." + secondi;				} else {					document.forms[0].elements[selTarget].value = orario + ":" + minuti;				}			}		}	}}//funzione che controlla, aggiunge e arrotonda i decimali se necessario, richiamata dall'onBlur nei textfield function decimali(textObj) {	var newValue = textObj.value;	var decAmount = "";	var dolAmount = "";	var decFlag = false;	var aChar = "";// controlla il decimale e toglie la virgola o il punto (aChar)	for(i=0; i < newValue.length; i++) {		aChar = newValue.substring(i,i+1);		if(aChar >= "0" && aChar <= "9") {			if(decFlag) {				decAmount = "" + decAmount + aChar;			} else {				dolAmount = "" + dolAmount + aChar;			}		}		if(aChar == "." || aChar == ",") {			if(decFlag) {				dolAmount = "";				break;			}			decFlag=true;		}	}// assicura che appaia uno zero se non ci sono interi.	if(dolAmount == "") {    	dolAmount = "0";	}// toglie momentaneamente gli zero 	if(dolAmount.length > 1) {		while(dolAmount.length > 1 && dolAmount.substring(0,1) == "0") {			dolAmount = dolAmount.substring(1,dolAmount.length);	    }	}// arrotonda il decimale	if(decAmount.length > 2) {		if(decAmount.substring(2,3) > "4") {			decAmount = parseInt(decAmount.substring(0,2)) + 1;			if(decAmount < 10) {				decAmount = "0" + decAmount;			} else {				decAmount = "" + decAmount;			}		} else {			decAmount = decAmount.substring(0,2);	    }    	if (decAmount == 100) {			decAmount = "00";			dolAmount = parseInt(dolAmount) + 1;		}	}// calcola quanti decimali devono essere inseriti	if(decAmount.length == 1) {		decAmount = decAmount + "0";	}	if(decAmount.length == 0) {		decAmount = decAmount + "00";	}// controlla il valore negativo e azzera il textObj	if(newValue.substring(0,1) != '-' ||(dolAmount == "0" && decAmount == "00")) {		textObj.value = dolAmount + "." + decAmount;	} else {		textObj.value = '-' + dolAmount + "." + decAmount;	}}// Funzione ausiliaria per il precaricamento delle immaginifunction newImage(arg) {	if (document.images) {		rslt = new Image();		rslt.src = arg;		return rslt;	}}// Funzione che gestisce i roll-overfunction changeImages() {	if (document.images && (preloadFlag == true)) {		for (var i=0; i<changeImages.arguments.length; i+=2) {			document[changeImages.arguments[i]].src = changeImages.arguments[i+1];		}	}}// Funzione che precarica le immagini dei roll-overfunction preloadImages() {	if (document.images) {		progetti_over = newImage(path + "images/progetti-over.gif");		apprendisti_over = newImage(path + "images/apprendisti-over.gif");		preloadFlag = true;	}}// Funzione che setta il valore di un cookiefunction setCookie(name, value, expires, path, domain, secure) {	var expString = ((expires == null)? "" : ("; expires=" + expires.toGMTString()));	var pathString = ((path == null) ? "" : ("; path=" + path));	var domainString = ((domain == null)? "" : ("; domain=" + domain));	var secureString = ((secure == true) ? "; secure" : "");	document.cookie = name + "=" + escape(value) + expString + pathString + domainString + secureString;}// Funzione che restituisce il valore di un cookiefunction getCookie(name) {	var result = null;	var myCookie = " " + document.cookie + ";";	var searchName = " " + name + "=";	var startOfCookie = myCookie.indexOf(searchName);	var endOfCookie;	if (startOfCookie != -1) {		startOfCookie += searchName.length; 		endOfCookie = myCookie.indexOf(";", startOfCookie);		result = unescape(myCookie.substring(startOfCookie,endOfCookie));	}	return result;}// Funzione che cancella un cookiefunction clearCookie (name) {	var ThreeDays = 3 * 24 * 60 * 60 * 1000;	var expDate = new Date();	expDate.setTime (expDate.getTime() - ThreeDays);	document.cookie = name + "=ImOutOfHere; expires=" + expDate.toGMTString();}
