//Author: Davide Magnan, Version 1.9, Date 18-10-2007


<!-- controllo esistenza di un valore all'interno di un campo di form -->
function controlla_esistenza(campo,nome) {

	if (document.getElementById(campo).value=="") {
		FD_avviso+='- Il campo «'+nome+'» è obbligatorio!\n\n';
		errore_layout(campo);
		FD_errore=1;
	}
	
}


<!-- controllo lunghezza massima di un campo di testo 
function controlla_check(campo,nome) {
	
	if (document.getElementById(campo).checked!=true) {
		FD_avviso+='- E\' necessario spuntare il campo «'+nome+'».\n\n';
		errore_layout(campo);
		FD_errore=1;
	}

}


<!-- controllo se tutti i caratteri sono cifre -->
function controlla_numero(campo,nome) {

	if ( isNaN(document.getElementById(campo).value) || document.getElementById(campo).value=='' ) {
		FD_avviso+='- Verificare l\'esattezza del campo «'+nome+'»!\n\n';
		errore_layout(campo);
		FD_errore=1;
	}
	
}


<!-- controllo esattezza dell'indirizzo email -->
function controlla_mail(campo,nome) {
	
	var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	
	if( !filter.test(document.getElementById(campo).value) ) { 
		FD_avviso+='- Verificare l\'esattezza del campo «'+nome+'»!\n\n';
		errore_layout(campo);
		FD_errore=1;
	}
	
}


<!-- controllo esattezza del formato di una data: gg/mm/aaaa -->
function controlla_data(campo,nome) {

	var month_it = new Array("", "Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", 
                "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre");
	
	if (document.getElementById(campo).value.length==10) {
		
		val=document.getElementById(campo).value;
		var dd = parseInt(val.substring(0,2), 10);
		var mm = parseInt(val.substring(3,5), 10);
		var yy = parseInt(val.substring(6,10), 10);
		
		if(dd>31 || mm>12) {
			FD_avviso+='- Verificare l\'esattezza del campo «'+nome+'»!\n\n';
			errore_layout(campo);
			FD_errore=1;
		}
		else {
			
			switch(mm) {
				case 4:
				case 6:
				case 9:
				case 11:
					if (dd > 30) {
						FD_avviso += "- "+month_it[mm]+" ha 30 giorni!\n\n";
						errore_layout(campo);
						FD_errore=1;
					}
				break;
			}
			
			if ((yy % 4) == 0) {
				if ((mm == 2) && (dd > 29)) {
						FD_avviso += "- Nell'anno "+yy+", "+ month_it[mm]+" ha 29 giorni!\n\n";
						errore_layout(campo);
						FD_errore=1;
				}
			}
			else {
				if ((mm == 2) && (dd > 28)) {
						FD_avviso += "- Nell'anno "+yy+", "+ month_it[mm]+" ha 28 giorni!\n\n";
						errore_layout(campo);
						FD_errore=1;
				}
			}
			
			
			if ((dd!=parseInt(dd))||(mm!=parseInt(mm))||(yy!=parseInt(yy))) {
				FD_avviso+='- Verificare l\'esattezza del campo «'+nome+'»!\n\n';
				errore_layout(campo);
				FD_errore=1;
			}
		}
	}
	else {
		FD_avviso+='- Verificare l\'esattezza del campo «'+nome+'»!\n\n';
		errore_layout(campo);
		FD_errore=1;
	}
	
}




<!-- controllo lunghezza minima di un campo di testo -->
function controlla_lunghezza(campo,nome,lunghezza) {

	if (document.getElementById(campo).value.length<lunghezza) {
		FD_avviso+='- Il campo «'+nome+'» non può essere più corto di '+lunghezza+' caratteri!\n\n';
		errore_layout(campo);
		FD_errore=1;
	}
}


<!-- controllo dipendenza di due campi -->
<!-- tipo 1: "se a allora b", tipo 2: "se a allora b e se b allora a" -->
function controlla_dipendenza(campo1,nome1,campo2,nome2,tipo) {

	if ((ddocument.getElementById(campo1).value!="")&&(document.getElementById(campo2).value)) {
		FD_avviso+='- Essendo presente il campo «'+nome1+'» deve essere presente anche il campo «'+nome2+'»!\n\n';
		errore_layout(campo);
		FD_errore=1;
	}
	if (tipo=="2") {
		if ((document.getElementById(campo2).value!="")&&(document.getElementById(campo1).value)) {
			FD_avviso+='- Essendo presente il campo «'+nome2+'» deve essere presente anche il campo «'+nome1+'\'!\n\n';
			errore_layout(campo);
			FD_errore=1;
		}
	}
}


<!-- controllo uguaglianza di due campi -->
<!-- tipo 1: "se a = b OK", tipo 2: "se a = b KO" -->
function controlla_uguaglianza(campo1,nome1,campo2,nome2,tipo) {

	if (tipo=="1") {
		if ((document.getElementById(campo1).value!=document.getElementById(campo2).value)) {
			FD_avviso+='- Il campo «'+nome1+'» deve essere uguale al campo «'+nome2+'»!\n\n';
			errore_layout(campo2);
			FD_errore=1;
		}
	}
	if (tipo=="2") {
		if ((document.getElementById(campo2).value!=document.getElementById(campo1).value)) {
			FD_avviso+='- Il campo «'+nome1+'» deve essere diverso dal campo «'+nome2+'»!\n\n';
			errore_layout(campo2);
			FD_errore=1;
		}
	}

}

function controlla_codice_fiscale(campo,nome){
   var cf = campo.toUpperCase();
   var cfReg = /^[A-Z]{6}\d{2}[A-Z]\d{2}[A-Z]\d{3}[A-Z]$/;
   if (!cfReg.test(cf))
      return false;
   var set1 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
   var set2 = "ABCDEFGHIJABCDEFGHIJKLMNOPQRSTUVWXYZ";
   var setpari = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
   var setdisp = "BAKPLCQDREVOSFTGUHMINJWZYX";
   var s = 0;
   for( i = 1; i <= 13; i += 2 )
      s += setpari.indexOf( set2.charAt( set1.indexOf( cf.charAt(i) )));
   for( i = 0; i <= 14; i += 2 )
      s += setdisp.indexOf( set2.charAt( set1.indexOf( cf.charAt(i) )));
   if ( s%26 != cf.charCodeAt(15)-'A'.charCodeAt(0) ) {
		FD_avviso+='- Verificare l\'esattezza del campo «'+nome+'»!\n\n';
		errore_layout(campo);
		FD_errore=1;
	}
}

/* formatta il campo del modulo in caso di errore */
function errore_layout(campo) {
	document.getElementById(campo).style.borderColor='#FF6F6F';
	if(FD_errore==0)
		document.getElementById(campo).focus();
}


<!-- controlla_form(parametro del tipo di controllo, id del campo, messaggio di errore) -->
<!-- in particolare: "e"=esistenza, "m"=e-mail, "d"=data, "c"=checked, "n"=numero, "l"=lunghezza, "x"=dipendenza, "u"=uguaglianza -->
function controlla_form() {
	var FD_args = controlla_form.arguments;
	FD_avviso=''; FD_errore=0;
	
	for (var i=0; i<FD_args.length; i++) {
		if (FD_args[i]!='') {
			document.getElementById(FD_args[i+1]).style.borderColor='';//ripristino la fomattazione iniziale
			if (FD_args[i]=="e")
				{controlla_esistenza(FD_args[i+1],FD_args[i+2]); i=i+2}
			if (FD_args[i]=="m")
				{controlla_mail(FD_args[i+1],FD_args[i+2]); i=i+2}
			if (FD_args[i]=="d")
				{controlla_data(FD_args[i+1],FD_args[i+2]); i=i+2}
			if (FD_args[i]=="c")
				{controlla_check(FD_args[i+1],FD_args[i+2]);i=i+2}
			if (FD_args[i]=="n")
				{controlla_numero(FD_args[i+1],FD_args[i+2]); i=i+2}
			if (FD_args[i]=="l")
				{controlla_lunghezza(FD_args[i+1],FD_args[i+2],FD_args[i+3]); i=i+3}
			if (FD_args[i]=="x")
				{controlla_dipendenza(FD_args[i+1],FD_args[i+2],FD_args[i+3],FD_args[i+4],FD_args[i+5]); i=i+5}
			if (FD_args[i]=="u")
				{controlla_uguaglianza(FD_args[i+1],FD_args[i+2],FD_args[i+3],FD_args[i+4],FD_args[i+5]); i=i+5}
			if (FD_args[i]=="cf")
				{controlla_codice_fiscale(FD_args[i+1],FD_args[i+2]); i=i+2}
		}
	}
	
	if (FD_errore==0) {
		return true;
	}
	else {
		alert (FD_avviso);
		return false;
	}
}