function trim(testo) {
	var testo2=testo.replace(/^[ ]*/, "");
	testo2=testo2.replace(/[ ]*$/, "");
	return testo2;
}

function ltrim(testo) {
	return testo.replace(/^[ ]*/, "");
}

function rtrim(testo) {
	return testo.replace(/[ ]*$/, "");
}


function trimCampo(campo) {
	campo.value=trim(campo.value);
}


function stringaVuota(testo) {
	if (testo==null)
		return true;
	else if (testo=="")
		return true;
	else
		return false;
}


function capitalizeFirstLetter(string) {
	var tmpStr, tmpChar, preString, postString, strlen;
	tmpStr = string.toLowerCase();
	stringLen = tmpStr.length;
	if (stringLen > 0) {
		for (i = 0; i < stringLen; i++) {
			if (i==0) {
				tmpChar = tmpStr.substring(0,1).toUpperCase();
				postString = tmpStr.substring(1,stringLen);
				tmpStr = tmpChar + postString;
			} else {
				tmpChar = tmpStr.substring(i,i+1);
				if (tmpChar == " " && i < (stringLen-1)) {
					tmpChar = tmpStr.substring(i+1,i+2).toUpperCase();
					preString = tmpStr.substring(0,i+1);
					postString = tmpStr.substring(i+2,stringLen);
					tmpStr = preString + tmpChar + postString;
				}
			}
		}
	}
	return tmpStr;
}

function capitalizeMe(obj) {
	val = obj.value;
	newVal = '';
	val = val.split(' ');
	for(var c=0; c < val.length; c++) {
		newVal += val[c].substring(0,1).toUpperCase() + val[c].substring(1,val[c].length) + ' ';
	}
	obj.value = newVal;
}

function stCap(strObj){
	return(strObj.charAt(0).toUpperCase()+strObj.substr(1).toLowerCase());
}


function fileExt(filename) {
	var i;
	i=filename.lastIndexOf(".");
	if (i!=-1 && i<(filename.length - 1))
		return rtrim(filename.substr(i+1).toLowerCase());
	else
		return "";
}


function checkInputFile(campo, list, tipo) {
/*	 1 = OK
	-0 = file non specificato
	-1 = estensione contenente virgola
	-2 = estensione non consentita
  null = parametri non corretti
*/
//	var regmail=/^([^ \.]+\.)*[^ \.]+@([^ \.]+\.)+[a-z0-9]{2,4}$/;
//	var reg = new RegExp("" + ext + "((([ ]*,)?)|(([ ]*)$))", "i");
	var i, ext, items, trovato;

	if (campo==null) return null;
	if (tipo==null)
		tipo='A';
	else {
		if (list==null) return null;
		tipo=trim(tipo.toLowerCase());
		if (tipo!='A' && tipo!='D') return null;
	}

	if (trim(campo.value)=="") return 0;

	ext=fileExt(campo.value);
	//alert('campo.value=' + campo.value + ' (campo nullo=' + (campo==null) + ')\next=' + ext + ' (nullo=' + (ext==null) + ')\nlist=' + list + ' (nullo=' + (list==null) + ')\ntipo=' + tipo + ' (nullo=' + (tipo==null) + ')\n');
	if (ext.lastIndexOf(",")!=-1) return -1;

	if (list!=null) {
		trovato=false;
		items=list.toLowerCase().split(/[ ]*,[ ]*/);
		for (i=0; i<items.length; i++) {
			if (ext==items[i]) {
				trovato=true;
				break;
			}
		}
		if ((tipo=='A' && !trovato) || (tipo=='D' && trovato))
			return -2;
	}

	return 1;
}


function sincronizzaCheckbox(checkbox1, checkbox2id) {
	document.getElementById(checkbox2id).checked=checkbox1.checked;
}


function campoVuoto(campo) {
	switch(campo.type) {
		case "text": ;
		case "textarea": ;
		case "password": ;
		case "hidden": ;
			if (trim(campo.value)=="") {
				return true;
			} else {
				return false; }

		case "select-one": ;
		case "select-multiple":
			var i=campo.selectedIndex;
			if (i== -1)
				return true;
			else if (trim(campo.options[i].value)=="")
				return true;
			else
				return false;

		default:
			return null;
	}
}


function campoByIdVuoto(id) {
	var campo=document.getElementById(id);
	if (campo==null)
		return null;
	else
		return campoVuoto(campo);
}


function contieneSpazi(testo) {
	return (testo.indexOf(" ")!=-1);
}


function controllaCampiObbligatori(campiObbligatori) {
// restituisce un array con le descrizioni dei campi obbligatori mancanti
	var j, atmp;
	var campiMancanti=new Array();
	var i=0;

	for (j=0; j<campiObbligatori.length; j++) {
		atmp=campiObbligatori[j].split('|');
		//alert("j=" + j + "\natmp[0]=" + atmp[0] + "\natmp[1]=" + atmp[1]);
		if (campoByIdVuoto(atmp[0])) {
			//alert("j="+ j + " - i=" + i);
			campiMancanti[i]=atmp[1];
			i++;
		}
	}

	return campiMancanti;
}


function validaPassword(pswd1id, pswd2id, minChars, maxChars) {
/*	 1 = OK
	-1 = password1 vuota
	-2 = password1 contiene spazi
	-3 = password1 troppo corta
	-4 = password1 troppo lunga
	-5 = password2 vuota
	-6 = password1 e password2 diverse
*/
	var pswd1, pswd2, pswd2input;
	if (pswd1id==null) pswd1id="password1";
	if (pswd2id==null) pswd2id="password2";
	if (minChars==null) minChars=6;
	if (maxChars==null) maxChars=20;
	
	pswd1=document.getElementById(pswd1id).value;
	if (pswd1=="") return -1;
	if (contieneSpazi(pswd1)) return -2;
	if (pswd1.length<minChars) return -3;
	if (pswd1.length>maxChars) return -4;

	pswd2input=document.getElementById(pswd2id);
	if (pswd2input!=null)
		if (!pswd2input.disabled) {
			pswd2=pswd2input.value;
			if (pswd2=="") return -5;
			if (pswd1!=pswd2) return -6;
		}

	// Superate tutte le verifiche
	return 1;
}


function checkEmail(email) {
/*	 1 = OK
	-1 = stringa vuota
	-2 = formato e-mail non valido
*/
	var regmail=/^([^ \.]+\.)*[^ \.]+@([^ \.]+\.)+[a-zA-Z0-9]{2,4}$/;
	
	if (trim(email)=="")
		return -1;
	else if (!regmail.test(email))
		return -2;

	// Superate tutte le verifiche
	return 1;
}


function checkCodiceFiscale(cf) {
/*	 1 = OK
	-1 = stringa vuota
	-2 = numero caratteri diverso da 16
	-3 = carattere non valido
	-4 = codice di controllo errato
*/
	var validi, i, s, set1, set2, setpari, setdisp;
	var regcf = /^[A-Z]{6}\d{2}[A-Z]\d{2}[A-Z]\d{3}[A-Z]$/;
	
	if(cf=='')  return -1;
	cf = cf.toUpperCase();

	//if (!regcf.test(cf)) return -5;

	// Verifica lunghezza
	if(cf.length!=16)
		return -2;		//"La lunghezza del codice fiscale non è corretta: \n"+"il codice fiscale dovrebbe essere lungo esattamente 16 caratteri.";

	// Verifica caratteri validi
	validi = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
	for(i=0; i<16; i++) {
		if( validi.indexOf(cf.charAt(i)) == -1 )
			return -3;		//"Il codice fiscale contiene un carattere non valido '" + cf.charAt(i) + "'.\nI caratteri validi sono le lettere e le cifre.";
	}

	// Verifica codice di controllo
	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) )
		return -4;		//"Il codice fiscale non è corretto:\n"+"il codice di controllo non corrisponde.";

	// Superate tutte le verifiche
	return 1;
}


function extCheckCodiceFiscale(cf) {
/*	 1 = OK
	-1 = stringa vuota
	-2 = numero caratteri diverso da 16
	-3 = carattere non valido
	-4 = codice di controllo errato
*/
}


function checkPartitaIVA(pi) {
/*	 1 = OK
	-1 = stringa vuota
	-2 = numero caratteri diverso da 11
	-3 = carattere non valido
	-4 = codice di controllo errato
*/
	var validi, i, s, c;

	if(pi=='')  return -1;

	// Verifica lunghezza
	if(pi.length!=11)
		return -2;		//"La lunghezza della partita IVA non è corretta: \n" +"la partita IVA dovrebbe essere lunga esattamente 11 caratteri.";

	// Verifica caratteri validi
	validi = "0123456789";
	for(i=0; i<11; i++) {
		if( validi.indexOf( pi.charAt(i) ) == -1 )
			return -3;		//"La partita IVA contiene un carattere non valido `" +	pi.charAt(i) + "'.\nI caratteri validi sono le cifre.";
	}
	
	// Verifica codice di controllo
	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) )
		return -4;		//"La partita IVA non è valida:\n" + "il codice di controllo non corrisponde.";

	// Superate tutte le verifiche
	return 1;
}

// USO: onKeyPress="return consentiCarattere('tipo', event);"
function consentiCarattere(tipo, e) {
	var key, keychar, charsSet;

	if (window.event)
		key = window.event.keyCode;
	else if (e)
		key = e.which;
	else
		return true;
		
	switch(tipo.toUpperCase()) {
		case "N":
			charsSet="0123456789";
			break;
		case "L":
			charsSet="abcdefghijklmnopqrstuvwxyz";
			break;
		case "A":
			charsSet="abcdefghijklmnopqrstuvwxyz0123456789";
			break;
		default:
			return true;
	}

	keychar = String.fromCharCode(key);
	keychar = keychar.toLowerCase();

	// control keys
	if (key==null || key==0 || key==8 || key==9 || key==13 || key==27)
		return true;
	// caratteri consentiti
	else if (charsSet.indexOf(keychar) > -1)
		return true;
	else
		return false;
}


// copyright 1999 Idocs, Inc. http://www.idocs.com
// Distribute this script freely but keep this notice in place
function numbersonly(myfield, e, dec) {
	var key;
	var keychar;
	
	if (window.event)
		key = window.event.keyCode;
	else if (e)
		key = e.which;
	else
		return true;
	keychar = String.fromCharCode(key);
	
	// control keys
	if (key==null || key==0 || key==8 || key==9 || key==13 || key==27)
		return true;
	// numbers
	else if ((("0123456789").indexOf(keychar) > -1))
	   return true;
	// decimal point jump
	else if (dec && (keychar==".")) {
		myfield.form.elements[dec].focus();
		return false;
	} else
	   return false;
}


// copyright 1999 Idocs, Inc. http://www.idocs.com
// Distribute this script freely but keep this notice in place
function letternumber(e) {
	var key;
	var keychar;
	
	if (window.event)
		key = window.event.keyCode;
	else if (e)
		key = e.which;
	else
		return true;
	keychar = String.fromCharCode(key);
	keychar = keychar.toLowerCase();
	
	// control keys
	if (key==null || key==0 || key==8 || key==9 || key==13 || key==27)
		return true;
	// alphas and numbers
	else if ((("abcdefghijklmnopqrstuvwxyz0123456789").indexOf(keychar) > -1))
		return true;
	else
		return false;
}



//////////////////////////////

function componiStringaData(giorno, mese, anno) {
	var d, s;
	d = new Date();
	d.setFullYear(anno);
	d.setMonth(mese-1);
	d.setDate(giorno);
	if (isNaN(d)) return '';

	giorno=d.getDate();
	mese=1+d.getMonth();
	anno=d.getFullYear();

	s=(giorno<10?'0':'') + giorno + '/' + (mese<10?'0':'') + mese + '/' + anno;
	return s;
}


function componiStringaOra(ore, minuti, secondi) {
	var d, s;
	d = new Date();
	d.setHours(ore);
	d.setMinutes(minuti);
	d.setSeconds(secondi);
	if (isNaN(d)) return '';

	ore=d.getHours();
	minuti=d.getMinutes();
	secondi=d.getSeconds();

	s=(ore<10?'0':'') + ore + ':' + (minuti<10?'0':'') + minuti + ':' + (secondi<10?'0':'') + secondi;
	return s;
}


function componiStringaDatetime(giorno, mese, anno, ore, minuti, secondi) {
	var d, s;
	d = new Date();
	d.setFullYear(anno);
	d.setMonth(mese-1);
	d.setDate(giorno);
	d.setHours(ore);
	d.setMinutes(minuti);
	d.setSeconds(secondi);
	if (isNaN(d)) return '';

	giorno=d.getDate();
	mese=1+d.getMonth();
	anno=d.getFullYear();
	ore=d.getHours();
	minuti=d.getMinutes();
	secondi=d.getSeconds();

	s=(giorno<10?'0':'') + giorno + '/' + (mese<10?'0':'') + mese + '/' + anno;
	s+=' ' + (ore<10?'0':'') + ore + ':' + (minuti<10?'0':'') + minuti + ':' + (secondi<10?'0':'') + secondi;
	return s;
}


function normalizzaData(campo) {
/*	 1 = OK
	 0 = campo vuoto
	-1 = delimitatori numeri non corretti
	-2 = conversione numeri non riuscita
	-3 = anno fuori intervallo
*/
	var delimitatore, anum, giorno, mese, anno;
	var regdata1=/^[0-9]{1,2}[ ]*\/[ ]*[0-9]{1,2}[ ]*\/[ ]*[0-9]{2,4}$/;
	var regdata2=/^[0-9]{1,2}[ ]*\\[ ]*[0-9]{1,2}[ ]*\\[ ]*[0-9]{2,4}$/;
	var regdata3=/^[0-9]{1,2}[ ]*-[ ]*[0-9]{1,2}[ ]*-[ ]*[0-9]{2,4}$/;
	var regdata4=/^[0-9]{1,2}[ ]+[0-9]{1,2}[ ]+[0-9]{2,4}$/;
	var stringaData=trim(campo.value);

	if (stringaData=="") {
		campo.value=stringaData;
		return 0;
	}
	
	if (regdata1.test(stringaData)) {
		delimitatore=/[ ]*\/[ ]*/;
	} else if (regdata2.test(stringaData)) {
		delimitatore=/[ ]*\\[ ]*/;
	} else if (regdata3.test(stringaData)) {
		delimitatore=/[ ]*-[ ]*/;
	} else if (regdata4.test(stringaData)) {
		delimitatore=/[ ]+/;
	} else {
		return -1;
	}

	anum=stringaData.split(delimitatore);
	giorno=parseInt(anum[0], 10);
	mese=parseInt(anum[1], 10);
	anno=parseInt(anum[2], 10);
	
	if (isNaN(giorno) || isNaN(mese) || isNaN(anno) || anum[2].length==3)
		return -2;
	if (anum[2].length==2) {
		if (anno<50)
			anno=anno+2000;
		else
			anno=anno+1900;
	}

	campo.value=componiStringaData(giorno, mese, anno);

	if (anno<1900 || anno>3000)
		return -3;

	// Superate tutte le verifiche
	return 1;
}


function normalizzaOra(campo) {
/*	 1 = OK
	 0 = campo vuoto
	-1 = delimitatori numeri non corretti
	-2 = conversione numeri non riuscita
*/
	var delimitatore, anum, ore, minuti, secondi;
	var regora1=/^[0-9]{1,2}[ ]*:[ ]*[0-9]{1,2}([ ]*:[ ]*[0-9]{1,2})?$/;
	var regora2=/^[0-9]{1,2}[ ]*\.[ ]*[0-9]{1,2}([ ]*\.[ ]*[0-9]{1,2})?$/;
	var regora3=/^[0-9]{1,2}[ ]+[0-9]{1,2}([ ]+[0-9]{1,2})?$/;
	/*var regora1=/^[0-9]{1,2}[ ]*:[ ]*[0-9]{1,2}$/;
	var regora2=/^[0-9]{1,2}[ ]*\.[ ]*[0-9]{1,2}$/;
	var regora3=/^[0-9]{1,2}[ ]+[0-9]{1,2}$/;*/
	var stringaOra=trim(campo.value);

	if (stringaOra=="") {
		campo.value=stringaOra;
		return 0;
	}

	if (regora1.test(stringaOra)) {
		delimitatore=/[ ]*:[ ]*/;
	} else if (regora2.test(stringaOra)) {
		delimitatore=/[ ]*\.[ ]*/;
	} else if (regora3.test(stringaOra)) {
		delimitatore=/[ ]+/;
	} else {
		return -1;
	}

	anum=stringaOra.split(delimitatore);
	ore=parseInt(anum[0], 10);
	minuti=parseInt(anum[1], 10);
	if (anum.length==3)
		secondi=parseInt(anum[2], 10);
	else
		secondi=0;

	if (isNaN(ore) || isNaN(minuti) || isNaN(secondi))
		return -2;

	campo.value=componiStringaOra(ore, minuti, secondi);

	// Superate tutte le verifiche
	return 1;
}


function normalizzaDatetime(campo) {
/*	 1 = OK
	 0 = campo vuoto
	-1 = delimitatori numeri non corretti
	-2 = conversione numeri non riuscita
	-3 = anno fuori intervallo
*/
	var delimitatore, anum, i, giorno, mese, anno, ore, minuti, secondi;
	var regdata1=/^[0-9]{1,2}[ ]*\/[ ]*[0-9]{1,2}[ ]*\/[ ]*[0-9]{2,4}/;			// ([ ]+[.]+)?$
	var regdata2=/^[0-9]{1,2}[ ]*\\[ ]*[0-9]{1,2}[ ]*\\[ ]*[0-9]{2,4}/;
	var regdata3=/^[0-9]{1,2}[ ]*-[ ]*[0-9]{1,2}[ ]*-[ ]*[0-9]{2,4}/;
	var regdata4=/^[0-9]{1,2}[ ]+[0-9]{1,2}[ ]+[0-9]{2,4}/;
	
	var regora1=/^[0-9]{1,2}[ ]*:[ ]*[0-9]{1,2}([ ]*:[ ]*[0-9]{1,2})?$/;
	var regora2=/^[0-9]{1,2}[ ]*\.[ ]*[0-9]{1,2}([ ]*\.[ ]*[0-9]{1,2})?$/;
	var regora3=/^[0-9]{1,2}[ ]+[0-9]{1,2}([ ]+[0-9]{1,2})?$/;

	var stringaDatetime=trim(campo.value);

	if (stringaDatetime=="") {
		campo.value=stringaDatetime;
		return 0;
	}
	
	if (regdata1.test(stringaDatetime)) {
		delimitatore=/[ ]*\/[ ]*/;
	} else if (regdata2.test(stringaDatetime)) {
		delimitatore=/[ ]*\\[ ]*/;
	} else if (regdata3.test(stringaDatetime)) {
		delimitatore=/[ ]*-[ ]*/;
	} else if (regdata4.test(stringaDatetime)) {
		delimitatore=/[ ]+/;
	} else {
		return -1;
	}

	anum=stringaDatetime.split(delimitatore);
	for (i=3; i<anum.length; i++) anum[2]=anum[2] + ' ' + anum[i];
	//tmp=''; for (i=0; i<anum.length; i++) tmp+='anum['+i+']='+anum[i]+'#\n'; alert(tmp);
	giorno=parseInt(anum[0], 10);
	mese=parseInt(anum[1], 10);
	
	delimitatore=/[ ]+/;
	anum=anum[2].split(delimitatore);
	for (i=2; i<anum.length; i++) anum[1]=anum[1] + ' ' + anum[i];
	//tmp=''; for (i=0; i<anum.length; i++) tmp+='anum['+i+']='+anum[i]+'#\n'; alert(tmp);
	anno=parseInt(anum[0], 10);
	if (anum[0].length==3)
		return -2;
	else if (anum[0].length==2) {
		if (anno<50)
			anno=anno+2000;
		else
			anno=anno+1900;
	}
	
	if (anum.length==1) {
		ore=0;
		minuti=0;
		secondi=0;
	} else {
		if (regora1.test(anum[1])) {
			delimitatore=/[ ]*:[ ]*/;
		} else if (regora2.test(anum[1])) {
			delimitatore=/[ ]*\.[ ]*/;
		} else if (regora3.test(anum[1])) {
			delimitatore=/[ ]+/;
		} else {
			return -1;
		}
	
		anum=anum[1].split(delimitatore);
		//tmp=''; for (i=0; i<anum.length; i++) tmp+='anum['+i+']='+anum[i]+'#\n'; alert(tmp);
		ore=parseInt(anum[0], 10);
		minuti=parseInt(anum[1], 10);
		if (anum.length==3)
			secondi=parseInt(anum[2], 10);
		else
			secondi=0;
	}

	if (isNaN(giorno) || isNaN(mese) || isNaN(anno) || isNaN(ore) || isNaN(minuti) || isNaN(secondi))
		return -2;

	campo.value=componiStringaDatetime(giorno, mese, anno, ore, minuti, secondi);

	if (anno<1900 || anno>3000)
		return -3;

	// Superate tutte le verifiche
	return 1;
}




/*
------- N.B. 
------- [\s] nelle RegExp contiene sia gli spazi che i ritorni a capo, avanzamento riga 
------- tabulatore, tabulatore verticale. Tutti questi caratteri, se presenti, verranno 
------- eliminati. 
------- --- */ /*
function Trim() { 
return this.replace(/\s+$|^\s+/g,""); 
} 

function LTrim() { 
return this.replace(/^\s+/,""); 
} 

function RTrim() { 
return this.replace(/\s+$/,""); 
} 
    
String.prototype.Trim=Trim;    
String.prototype.RTrim=RTrim;    
String.prototype.LTrim=LTrim;    
*/


////////////////////////////////////////////////////////

function warningCampoData(campo) {
	if (!convalidaCampoData(campo)) {
		alert('Attenzione! Data non valida.')
		return false;
	}
	return true;
}

function warningCampoOra(campo) {
	if (!convalidaCampoOra(campo)) {
		alert('Attenzione! Ora non valida.')
		return false;
	}
	return true;
}
