//Author: Davide Magnan, Version 2.5, Date 03-04-2008


// 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");
	
	val=document.getElementById(campo).value;
	
	if ((val.length==10) && (val.substring(2,3)=='/') && (val.substring(5,6)=='/') ) {
		
		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 || dd<1 || mm<1 || yy<1900) {
			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 che data1 sia minore o uguale di data2
function confronta_data(campo1,nome1, campo2,nome2) {
	data1=document.getElementById(campo1).value;
	data2=document.getElementById(campo2).value;
	//trasformo le date nel formato aaaammgg (es. 20081103)
	data1str = data1.substr(6)+data1.substr(3, 2)+data1.substr(0, 2);
	data2str = data2.substr(6)+data2.substr(3, 2)+data2.substr(0, 2);
	//controllo se la seconda data è successiva alla prima
	if (data2str-data1str<0) {
		FD_avviso+='- «'+nome1+'» deve essere precedente a «'+nome2+'»!\n\n';
		errore_layout(campo1); errore_layout(campo2);
		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 (tipo=="1") {
		if ((document.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(campo2);
			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(campo1);
			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_esistenza_2(campo1,nome1,campo2,nome2) {
	
	if ((document.getElementById(campo1).value=="") && (document.getElementById(campo2).value=="")) {
		FD_avviso+='- Deve essere presente almeno uno tra i campi «'+nome1+'» e «'+nome2+'»!\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 = document.getElementById(campo).value.toUpperCase();
	if(cf!='') {
		document.getElementById(campo).value = cf;
		var cfReg = /^[A-Z]{6}\d{2}[A-Z]\d{2}[A-Z]\d{3}[A-Z]$/;
		if (!cfReg.test(cf)) {
			FD_avviso+='- Verificare l\'esattezza del campo «'+nome+'»!\n\n';
			errore_layout(campo);
			FD_errore=1;
		} else {
			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;
			}
		}
	} else {
		FD_avviso+='- Verificare l\'esattezza del campo «'+nome+'»!\n\n';
		errore_layout(campo);
		FD_errore=1;
	}
}

function controlla_piva(campo,nome) {
	pi = document.getElementById(campo).value;
	if(pi!='') {
		if (!pi.match(/^\w{2}\d{9}$/i)) {
			FD_avviso+='- Verificare l\'esattezza del campo «'+nome+'»!\n\n';
			errore_layout(campo);
			FD_errore=1;
		}
	}
}

function controlla_estensione(campo,nome,ext_ok) {
	path = document.getElementById(campo).value;
	posizione_punto=path.lastIndexOf(".");
	lunghezza_stringa=path.length;
	estensione=path.substring(posizione_punto+1,lunghezza_stringa);
	if(ext_ok.indexOf(estensione)=='-1') {
		FD_avviso+='- Verificare l\'estensione 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_d")
				{confronta_data(FD_args[i+1],FD_args[i+2],FD_args[i+3],FD_args[i+4]); i=i+4}
			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]=="e2")
				{controlla_esistenza_2(FD_args[i+1],FD_args[i+2],FD_args[i+3],FD_args[i+4]); i=i+4}
			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_args[i]=="piva")
				{controlla_piva(FD_args[i+1],FD_args[i+2]); i=i+2}
			if (FD_args[i]=="ext")
				{controlla_estensione(FD_args[i+1],FD_args[i+2],FD_args[i+3]); i=i+3}
		}
	}
	
	if (FD_errore==0) {
		return true;
	}
	else {
		alert (FD_avviso);
		return false;
	}
}