// JavaScript Document
var errors="";

var BrowserDetect = {
	init: function () {
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
		this.OS = this.searchString(this.dataOS) || "an unknown OS";
	},
	searchString: function (data) {
		for (var i=0;i<data.length;i++)	{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString) {
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}
			else if (dataProp)
				return data[i].identity;
		}
	},
	searchVersion: function (dataString) {
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
	},
	dataBrowser: [
		{
			string: navigator.userAgent,
			subString: "Chrome",
			identity: "Chrome"
		},
		{ 	string: navigator.userAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari",
			versionSearch: "Version"
		},
		{
			prop: window.opera,
			identity: "Opera"
		},
		{
			string: navigator.vendor,
			subString: "iCab",
			identity: "iCab"
		},
		{
			string: navigator.vendor,
			subString: "KDE",
			identity: "Konqueror"
		},
		{
			string: navigator.userAgent,
			subString: "Firefox",
			identity: "Firefox"
		},
		{
			string: navigator.vendor,
			subString: "Camino",
			identity: "Camino"
		},
		{		// for newer Netscapes (6+)
			string: navigator.userAgent,
			subString: "Netscape",
			identity: "Netscape"
		},
		{
			string: navigator.userAgent,
			subString: "MSIE",
			identity: "Explorer",
			versionSearch: "MSIE"
		},
		{
			string: navigator.userAgent,
			subString: "Gecko",
			identity: "Mozilla",
			versionSearch: "rv"
		},
		{ 		// for older Netscapes (4-)
			string: navigator.userAgent,
			subString: "Mozilla",
			identity: "Netscape",
			versionSearch: "Mozilla"
		}
	],
	dataOS : [
		{
			string: navigator.platform,
			subString: "Win",
			identity: "Windows"
		},
		{
			string: navigator.platform,
			subString: "Mac",
			identity: "Mac"
		},
		{
			   string: navigator.userAgent,
			   subString: "iPhone",
			   identity: "iPhone/iPod"
	    },
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]
 
};

function verify(f){
	errors="";
	var empty_fields="";
	//var errors="";
	var checkOk=true;
	for (var i=0;i<f.length;i++){
		var e=f.elements[i];
		
		if (e.type=="checkbox" || e.type=="radio"){	
		
			if ((e.controlla) && (e.checked==0)){
				if (e.privacy==true){
					
					empty_fields+="\nAutorizzare il trattamento dei dati personali.";
					
				}else{
					
					empty_fields+="\n          "+e.sName;
					checkOk=false;
					
				}
				continue;
			}
			
		}else if (((e.type=="text") || (e.type=="textarea") || (e.type=="password") || (e.type=="file"))){
			//controllo se il campo e' vuoto 
			if ((e.controlla) && ((e.value==null) || (e.value=="") || isblank(e.value))){
				empty_fields+="\n          "+e.sName;
				checkOk=false;
				continue;
			}
			
			//Controllo che il campo sia pieno....
			if ((e.value==null) || (e.value=="") || isblank(e.value)){
				continue;	
			}
			
			BrowserDetect.init();
			
			if( (BrowserDetect.browser=="Chrome") || (BrowserDetect.browser=="Safari") ){
				//Controllo i campi che devono essere numerici
				if (e.numeric){
					var v=parseFloat(e.value);
					if (isNaN(v) || ((e.min!=null) && (v<e.min)) || ((e.max!=null) && (v.value>e.max))){
						if (e.controlla) checkOk=false;
						errors+="-Il campo "+e.sName+" deve essere un numero";
						if (e.min!=null) errors+=" maggiore di "+e.min;
						if (e.max!=null && e.min!=null) 
							errors+=" e minore di "+e.max;
						else if(e.max!=null)
							errors+=" minore di "+e.max;
						errors+=".\n";
					}
				}else if(e.value.length>0){
					if (e.mail){
						Filtro = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-]{2,})+\.)+([a-zA-Z0-9]{2,})+$/;
						if (!Filtro.test(e.value)){
							switch(activeLanguage){
								default:
									errors+="The field "+e.sName+" contains an invalid address!!\n";
									break;
								case "it":
									errors+="Il campo "+e.sName+" contiene un indirizzo non valido!!\n";
									break;
								case "fr":
									errors+="Le champ "+e.sName+" contient une adresse invalide!!\n";
									break;
								case "de":
									errors+=""+e.sName+" Das Feld enthalt eine ungultige Adresse!!\n";
									break;
							}
						
						checkOk=false;
						}
					}else if(e.telefonico){
						
						checkOk=isTelefonico(e.value);
						if(!checkOk) errors+="Il campo "+e.sName+" contiene dati non validi!!\n";
						
					}else if(e.checkPIVA){
					
						checkOk=ControllaPIVA(e.value);
						//if(!checkOk) errors+="Il campo "+e.sName+" contiene dati non validi!!\n";
					}else if(e.codiceFiscale){
						
						checkOk=ControllaCF(e.value);
						//if(!checkOk) errors+="Il campo "+e.sName+" contiene dati non validi!!\n";
					}else if(e.user){
						
						checkOk=isTelefonico(e.value);
						if(!checkOk) errors+="Il campo "+e.sName+" contiene dati non validi!!\n";
					}
				}
			} else {
				//Controllo i campi che devono essere numerici
				if (e.numeric || (e.min!=null) || (e.max!=null)){
					var v=parseFloat(e.value);
					if (isNaN(v) || ((e.min!=null) && (v<e.min)) || ((e.max!=null) && (v.value>e.max))){
						if (e.controlla) checkOk=false;
						errors+="-Il campo "+e.sName+" deve essere un numero";
						if (e.min!=null) errors+=" maggiore di "+e.min;
						if (e.max!=null && e.min!=null) 
							errors+=" e minore di "+e.max;
						else if(e.max!=null)
							errors+=" minore di "+e.max;
						errors+=".\n";
					}
				}else if(e.value.length>0){
					if (e.mail){
						Filtro = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-]{2,})+\.)+([a-zA-Z0-9]{2,})+$/;
						if (!Filtro.test(e.value)){
							switch(activeLanguage){
								default:
									errors+="The field "+e.sName+" contains an invalid address!!\n";
									break;
								case "it":
									errors+="Il campo "+e.sName+" contiene un indirizzo non valido!!\n";
									break;
								case "fr":
									errors+="Le champ "+e.sName+" contient une adresse invalide!!\n";
									break;
								case "de":
									errors+=""+e.sName+" Das Feld enthalt eine ungultige Adresse!!\n";
									break;
							}
						
						checkOk=false;
						}
					}else if(e.telefonico){
						
						checkOk=isTelefonico(e.value);
						if(!checkOk) errors+="Il campo "+e.sName+" contiene dati non validi!!\n";
						
					}else if(e.checkPIVA){
					
						checkOk=ControllaPIVA(e.value);
						//if(!checkOk) errors+="Il campo "+e.sName+" contiene dati non validi!!\n";
					}else if(e.codiceFiscale){
						
						checkOk=ControllaCF(e.value);
						//if(!checkOk) errors+="Il campo "+e.sName+" contiene dati non validi!!\n";
					}else if(e.user){
						
						checkOk=isTelefonico(e.value);
						if(!checkOk) errors+="Il campo "+e.sName+" contiene dati non validi!!\n";
					}
				}
			}
		}
	}
	if (errors || empty_fields){
		msg="____________________________________________________\n";
		if (empty_fields){
			switch(activeLanguage){
				default:
					msg+="- The following compulsory fields are empty:"+empty_fields+"\n";
					break;
					
				case "it":
					msg+="- I seguenti campi richiesti risultano vuoti:"+empty_fields+"\n";
					break;
				
				case "fr":
					msg+="- Les champs suivants sont vides:"+empty_fields+"\n";
					break;
	
				case "it":
					msg+="- Die folgenden Felder sind leer:"+empty_fields+"\n";
					break;
			}
			
			if (errors) msg+="\n";
		}
		msg+=errors;
		msg+="____________________________________________________";
		alert(msg);
	}
	if (checkOk){ 
		return true;
	}else{
		return false;
	}
}



function ControllaCF(cf)
{
    var validi, i, s, set1, set2, setpari, setdisp;
    if( cf == '' )  return false;
    cf = cf.toUpperCase();
    if( cf.length != 16 )
        errors+="La lunghezza del codice fiscale non e' corretta: il codice fiscale dovrebbe essere lungo esattamente 16 caratteri.\n";
    validi = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
    for( i = 0; i < 16; i++ ){
        if( validi.indexOf( cf.charAt(i) ) == -1 ){
            errors+="<strong>Il codice fiscale</strong> contiene un carattere non valido '" + cf.charAt(i) + "'.I caratteri validi sono le lettere e le cifre.\n";
			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) ){
        errors+="Il codice fiscale non e' corretto: il codice di controllo non corrisponde.\n";
		return false;
	}
    return true;
}


function ControllaPIVA(pi)
{
    if( pi == '' )  return false;
    if( pi.length != 11 ){
        errors+="La lunghezza della partita IVA non e' corretta: la partita IVA dovrebbe essere lunga esattamente 11 caratteri.\n";
			return false;
	}
    validi = "0123456789";
    for( i = 0; i < 11; i++ ){
        if( validi.indexOf( pi.charAt(i) ) == -1 ){
            errors+="La partita IVA contiene un carattere non valido '" + pi.charAt(i) + "'.I caratteri validi sono le cifre.\n";
			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) ){
        errors+="La partita IVA non e' valida: il codice di controllo non corrisponde.\n";
		return false;
	}		
    return true;
}


function isblank(s){
	for(var i=0;i<s.length;i++){
		var c=s.charAt(i);
		if ((c!=' ') && (c!='\n') && (c!='\t')) return false;
	}
	return true;
}

function isNumeric(stringa){
	
	if (isNaN(stringa)){
		return true;	
	}else{
		return false;
	}
	
}

function isTelefonico(stringa){

	if (!isNaN(stringa)){
		return true;	
	}else{
		return false;
	}
	
}

//questa funzione controlla i caratteri di un campo confrontandoli con i caratteri della maschera
function controllaDaMaschera(stringa,maschera){
	
	
	
}
