// Converte in maiuscolo il primo carattere
function FirstToUpper(which){
	var fTxt;
	fTxt = which.value.charAt(0).toUpperCase() + which.value.slice(1);
	which.value = fTxt;
}

function isInteger(s){
	var i;
    for (i = 0; i < s.length; i++){   
    	// Check that current character is number.
    	var c = s.charAt(i);
    	if (((c < "0") || (c > "9"))) return false;
    }
    // All characters are numbers.
    return true;
}

// Fa la validazione dell'indirizzo di E-Mail
function ckEmailAddr(eAddr){
// Ritorna true se ok, false se non ok
	var DomainValidChars="1234567890abcdefghijklmnopqrstuvwxyz-.",UserValidChars=DomainValidChars+"_";
	var eInvalid=0,atPos,strCk;
	var msgEmpt="L'indirizzo di E-Mail è vuoto.",msgInva="L'indirizzo di E-Mail non è valido o contiene caratteri illegali.";
	if(eAddr==""){
		alert(msgEmpt);
		return false;
	}
	eAddr = eAddr.toLowerCase();
	atPos=eAddr.indexOf("@");
	atPos!=eAddr.lastIndexOf("@") || atPos<1 || atPos>(eAddr.length-5)?eInvalid+=1:null;
	strCk=eAddr.substring(0,atPos);
	for(i=0;i<strCk.length;i++){
		UserValidChars.indexOf(strCk.charAt(i))<0?eInvalid+= 1:null;
	}
	strCk=eAddr.slice(atPos+1);
	for(i=0;i<strCk.length;i++){
		DomainValidChars.indexOf(strCk.charAt(i))<0?eInvalid+=1:null;
	}
	strCk.indexOf(".")<0?eInvalid+=1:null;
	strCk=strCk.charAt(strCk.length-1);
	strCk=="." || strCk=="-"?eInvalid+=1:null;
	if(eInvalid!=0){
		alert(msgInva);
		return false;
	}
	return true;
}

// Fa la validazione del form
function FrmChk(which){
	var pass=true;
	if (document.images){		
		for (ff=0;ff<which.length;ff++){
			var tempobj=which.elements[ff];
			var strToTest=tempobj.name.substring(0,2);
			switch (strToTest) {
				case "t_": // Il campo da testare è un testo
					if (((tempobj.type=="text"||tempobj.type=="textarea")&&tempobj.value=='')||(tempobj.type.toString().charAt(0)=="s"&&(tempobj.selectedIndex==-1)||tempobj.value=="")){
						alert("Uno o più campi obbligatori mancanti o non validi.")
						return false;
					}
					break;
				case "e_": // Il campo da testare contiene un indirizzo di e-mail
					if (!ckEmailAddr(tempobj.value)) {
						return false;
					}
					break;
				case "d_": // Il campo da testare contiene una data ed è obbligatorio
					if (!isDate(tempobj.value)) {
						return false;
					}
					break;
				case "c_": // Il campo da testare contiene una data ma non è obbligatorio (viene testato solo se non è vuoto)
					if (!tempobj.value=='') {
						if (!isDate(tempobj.value)) {
							return false;
						}
					}
					break;
				case "v_": // Il campo da testare contiene una valuta ed è obbligatorio
					if (!isCurrency(tempobj.value)) {
						return false;
					}
					break;
				case "u_": // Il campo da testare contiene una valuta ma non è obbligatorio (viene testato solo se non è vuoto)
					if (!tempobj.value=='') {
						if (!isCurrency(tempobj.value)) {
							return false;
						}
					}				
				 break;
				case "m_": // Il campo da testare contiene un numero positivo ma NON è obbligatorio
					if (!tempobj.value=='') {
						tempobj.value = tempobj.value.replace(/(^\s*)|(\s*$)/g, "");
						if (!isInteger(tempobj.value) || tempobj.value.length < 1) {
							alert("Uno o più campi obbligatori mancanti o non validi.")
							return false;
						}
					}				
				 break;
				case "n_": // Il campo da testare contiene un numero positivo ed è obbligatorio
					tempobj.value = tempobj.value.replace(/(^\s*)|(\s*$)/g, "");
					if (!isInteger(tempobj.value) || tempobj.value.length < 1) {
						alert("Uno o più campi obbligatori mancanti o non validi.")
						return false;
					}
				break;
			}
		}
	}
	return true;
}	

// Verifica formale del codice fiscale
function ControllaCF(cf) {
	var validi, i, s, set1, set2, setpari, setdisp, msg;
	cf = cf.toUpperCase();
	
	if(cf.length != 16) {
		alert("La lunghezza del codice fiscale non è corretta.\rIl codice fiscale deve essere lungo 16 caratteri.");
		return false;
	}
	
	validi = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
	for(i = 0; i < 16; i++) {
		if(validi.indexOf(cf.charAt(i)) == -1) {
			msg = "Il codice fiscale contiene un carattere non valido `" +
				cf.charAt(i) +
				"'.\nI caratteri validi sono le lettere e le cifre.\n";
			alert(msg);
			return false;
		}
	}
	
	set1 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
	set2 = "ABCDEFGHIJABCDEFGHIJKLMNOPQRSTUVWXYZ";
	setpari = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
	setdisp = "BAKPLCQDREVOSFTGUHMINJWZYX";
	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)) {
		alert("Il codice fiscale non è valido.");
		return false
	}
	
	return true;
}


// Verifica formale della partita IVA
function ControllaPIVA(pi) {
	if(pi.length != 11) {
		alert("La lunghezza della partita IVA non è corretta./rLa partita IVA deve essere lunga 11 caratteri.");
		return false;
	}
	validi = "0123456789";
	for(i = 0; i < 11; i++) {
		if(validi.indexOf( pi.charAt(i) ) == -1) {
			msg = "La partita IVA contiene un carattere non valido `" +
					pi.charAt(i) + "'.\nI caratteri validi sono le cifre.\n";
			alert(msg);
			return false;
		}
	}
	s = 0;
	for(i = 0; i <= 9; i += 2)
		s += pi.charCodeAt(i) - '0'.charCodeAt(0);
	for(i = 1; i <= 9; i += 2) {
		c = 2*( pi.charCodeAt(i) - '0'.charCodeAt(0) );
		if( c > 9 )  c = c - 9;
		s += c;
	}
	if(( 10 - s%10 )%10 != pi.charCodeAt(10) - '0'.charCodeAt(0)) {
		alert("La partita IVA non è valida.") ;
		return false;
	}

	return true;
}


// Verifica formale form registrazione utente
function frmUserCk(which){
	var ret;
	
	if ((which.nome.value.length == 0) && (which.cognome.value.length == 0) && (which.ragsoc.value.length == 0)) {
		alert("Inserire nome e cognome o ragione sociale.");
		return false;
	}

	if (which.ragsoc.value.length == 0) {
		if (which.nome.value.length == 0) {
			alert("Il campo nome è vuoto");
			return false;
		}
		if (which.cognome.value.length == 0) {
			alert("Il campo cognome è vuoto");
			return false;
		}
	}
	
	ret = FrmChk(which);
	if (ret == false) {
		return false;	
	}
	
	if ((which.cf.value.length == 0) && (which.piva.value.length == 0)) {
		alert("Il codice fiscale e la partita IVA non possono essere entrambi vuoti.");
		return false;
	}
	
	if (which.cf.value.length > 0) {
		if (!ControllaCF(which.cf.value)) {
			return false;	
		}
	}

	if (which.piva.value.length > 0) {
		if (!ControllaPIVA(which.piva.value)) {
			return false;	
		}
	}
	
	if (!isInteger(which.tel.value) || which.tel.value.length < 6) {
		alert("Il numero di telefono non è valido o contiene degli spazi.");
		return false;
	}
	
	if (which.fax.value.length > 0) {
		if (!isInteger(which.fax.value) || which.fax.value.length < 6) {
			alert("Il numero di fax non è valido o contiene degli spazi.");
			return false;
		}
	}
	
	if (which.cell.value.length > 0) {
		if (!isInteger(which.cell.value) || which.cell.value.length < 8) {
			alert("Il numero di cellulare non è valido o contiene degli spazi.");
			return false;
		}
	}
	
	if (which.passw.value.length < 5) {
		alert ("La password deve essere lunga almeno 5 caratteri.");
		return false;
	}
	
	if (which.passw.value != which.cpassw.value) {
		alert ("Errore nella conferma della password.\r\rI campi \"Password\" e \"Conferma password\" devono contenere la stessa parola");
		return false;
	}

	if (!which.ckDatiPers.checked) {
		alert ("Per registrarti devi abilitare la spunta \"Acconsento al trattamento dei miei dati personali\"");
		return false;
	}
	
	return true;
}

