// Verifiche formali dei dati ----------------
var rTrim = function (x) {if (x.length>0) while (x.charAt(x.length-1)==" ") x=x.substring(0,x.length-1); return x}
var lTrim = function (x) {if (x.length>0) while (x.charAt(0)==" ") x=x.substring(1); return x}

// funzione privata per controllo presenza carattere in una stringa
function presenteCarattere (valore, vettore) {
	if (valore!="") {
		var trovato=false;		
		for(a=0; a<=valore.length && !trovato; a++) {		
			for(b=0; b<vettore.length && !trovato;b++) {
				if(valore.charAt(a)==vettore.charAt(b)) trovato=true;						
			}
		}
		return trovato;
	}
	return false;
}

// funzione privata per la verifica della formattazione di una stringa
function verificaCoerenza (valore, vettore, lunghezza, uguale) {
	if (valore!="") {
		var errore=false;
		
		for(a=0; a<lunghezza && !errore; a++) {		
			var trovato=false;	
			for(b=0; b<vettore.length && !trovato;b++) {				
				if(valore.charAt(a)==vettore.charAt(b)) trovato=true;						
			}
			if (!trovato) errore=true;
		}
		if (uguale)	if(valore.length!=lunghezza || errore) return false;
		return !errore;
	}
	return true;
}

// funzione privata per la verifica dei caratteri presenti in una stringa
function contaCaratteri (valore, carattere, lunghezza) {
	conta=0;
	if (valore!="") {
		
		for(a=0; a<lunghezza; a++) {		
			if(valore.charAt(a)==carattere) conta++;
		}
	}
	return conta;
}

// funzione privata per la sostituzione di caratteri
function sostituisciCaratteri (valore, carattere, sostituto) {
	appoggio=""
	if (valore!="") {
		for (a=0; a<valore.length; a++) {		
			if (valore.charAt(a)==carattere) {
				appoggio = appoggio + sostituto
			} else {
				appoggio = appoggio + valore.charAt(a)
			}
		}
	}
	return appoggio;
}

// Verifica del CAP
function verificaCAP(valore) {
	if (!verificaCoerenza(valore, "0123456789", 5, true)) {
		alert("Attenzione, il CAP non è stato inserito correttamente");
		return false;
	}
	return true;
}

// Verifica del numero telefonico
function verificaTelefono(valore) {
	if (!verificaCoerenza(valore, "+ 0123456789", valore.length, false)) {
		alert("Attenzione, il numero telefonico contiene dei caratteri non validi");
		return false;
	}
	return true;
}

// Verifica del codice partita IVA
function verificaPartitaIVA(valore) {
	if (valore!="") {
		if (!checkPartitaIVA(valore)) {
			alert("Attenzione, il codice partita iva inserito non è corretto");
			return false;
		}
	}
	return true;
}

// Verifica numero
function isNumero(campo, decimali) {
	campo.value = lTrim(rTrim(campo.value))
	
	if (decimali==null) decimali=0
	if (decimali>0) campo.value = sostituisciCaratteri(campo.value, ",", ".")
	valore = campo.value
	controllo = "-0123456789" + (decimali>0?".":"")

	if (!verificaCoerenza(valore, controllo, valore.length, false)) {
		alert("Attenzione, il testo contiene dei caratteri non validi    ");
		return false;
	}
	if (decimali>0) {
		if (contaCaratteri(valore,".", valore.length)>1) {
			alert("Attenzione, il numero non è formattato correttamente    ");
			return false;
		}
		virgola=valore.indexOf(".");
		if (virgola>0) {
			sd=valore.substring(virgola+1,valore.length)
			if (sd.length>decimali) {
				alert("Attenzione, il campo può accettare soltanto "+decimali+" decimali    ");
				return false;
			}
		}
		
	}
	return true;
}

// Verifica stringa per inserimento DB
function strigaOk_DBselect(valore) {
	var lista="%\\\":.,!*?@#_";
	if (presenteCarattere(valore, lista)) {
		lista2=""
		for (i=0; i<lista.length; i++) { lista2+=" "+lista.charAt(i) }
		alert("Nella stringa non possono essere inseriti i seguenti caratteri:\n\t"+lista2);
		return false;
	}
	return true;
}

// Verifica stringa per inserimento DB
function strigaOk_DBinsert(valore) {
	var lista="%\\\"!*?<>";
	if (presenteCarattere(valore, lista)) {
		lista2=""
		for (i=0; i<lista.length; i++) { lista2+=" "+lista.charAt(i) }
		alert("I seguenti caratteri non sono validi:\t\n\t"+lista2);
		return false;
	}
	return true;
}


function formattaAnno(campo) {
	ret = formattaDataINNER(campo, "", 'Y')
	if (!ret)	{
    campo.value=""
		campo.focus()			
	}		
		return ret
}

function formattaMeseAnno(campo, separatore) {
	ret = formattaDataINNER(campo, separatore, 'MY')
	if (!ret)	{
    campo.value=""
		campo.focus()			
	}		
	return ret
}

// Formatta il campo data in modo da essere meglio utilizzato nelle applicazioni
function formattaData(campo, separatore) {
 	ret = formattaDataINNER(campo, separatore, 'DMY')
	if (!ret)	{
    campo.value=""
		campo.focus()			
	}		
	return ret
}

function formattaDataINNER(campo, separatore, quale) {
	var gg=0, mm=0, aa=0	
		
	var massimo_caratteri = 0	
	var tipo_data = 0
	
	if (quale=='DMY') {
		massimo_caratteri = 10
		tipo_data = 0
		
	} else if (quale=='MY') {
		massimo_caratteri = 7
		tipo_data = 1
		
	} else if (quale=='Y') {
		massimo_caratteri = 4
		tipo_data = 2
	}		
	//alert("Tipo='"+quale+"', "+massimo_caratteri+", "+ tipo_data)
		
	var verifica = function (valore, vettore) {	if (valore!="") {var errore=false;for(a=0; a<valore.length && !errore; a++) { var trovato=false; for(b=0; b<vettore.length && !trovato;b++) { if(valore.charAt(a)==vettore.charAt(b)) trovato=true } if (!trovato) errore=true } return !errore} return true}

	campo.value = lTrim(rTrim(campo.value))
	var str = campo.value		
  
	if (str.length>0) {
		// Verifica lunghezza campo
		if (str.length>massimo_caratteri) {
			alert('Campo troppo lungo, correggere!')
      return false
		}			
		// Verifica caratteri validi			
		if (!verifica(str,"0123456789 /-.\\")) {
			alert('Il campo contiene dei caratteri non validi, correggere!')
      return false
		}
	 
	 	//Verifica formato data		
		var sep=""; var c=0		
		if (str.indexOf("-")>0) {sep="-"; c++}
		if (str.indexOf("/")>0) {sep="/"; c++}
		if (str.indexOf("\\")>0) {sep="\\"; c++}
		if (str.indexOf(".")>0) {sep="."; c++}
		if (str.indexOf(" ")>0) {sep=" "; c++}
		if (str.indexOf("&nbsp;")>0) {sep="&nbsp;"; c++}
		if (c>1) {
			// ...utilizzati troppi separatori
			alert('Impossibile determinare un valore valido, correggere!')
      return false
		}
	
		if (sep=="") {
			// Data tutta appiccicottata....
			if (tipo_data==0) {
				// Formato giorno/mese/anno
				if (str.length==6) {
	       	// tipo: 010302	per 1 Marzo 2002	       	
					gg = eval(str.substring(0,2))
	       	mm = eval(str.substring(2,4))
	       	aa = eval(str.substring(4))
					if (aa<70) aa=aa+2000 
						else aa=aa+1900						
				} else if (str.length==8) {
					// tipo: 01032002	per 1 Marzo 2002
	       	gg = eval(str.substring(0,2))
	       	mm = eval(str.substring(2,4))
	       	aa = eval(str.substring(4))
				} else {
					alert('Formato inconsistente: valori insufficienti, correggere!')
          return false			
				}
				
			} else if (tipo_data==1) {
				// Formato mese/anno
        gg=1
				if (str.length==4) {
					// tipo: 0302	per Marzo 2002
	       	mm = eval(str.substring(0,2))
	       	aa = eval(str.substring(2))
					if (aa<70) aa=aa+2000 
						else aa=aa+1900										
				} else if (str.length==6) {
					// tipo: 032002 per Marzo 2002
					mm = eval(str.substring(0,2))
	       	aa = eval(str.substring(2,6))					
				} else {
					alert('Formato inconsistente: valori insufficienti, correggere!')
          return false			
				}			
				
			} else if (tipo_data==2) {	
			  // Formato anno
        mm=1
        gg=1
				if (str.length==2) {
					// tipo: 02	per Marzo 2002
	       	aa = eval(str)
					if (aa<70) aa=aa+2000 
						else aa=aa+1900										
				} else if (str.length==4) {
					// tipo: 2002 per Marzo 2002
					aa = eval(str.substring(0,4))					
				} else {
					alert('Formato inconsistente: valori insufficienti, correggere!')
          return false			
				}			
			
			}			
						
		} else {
			// E' stato inserito un separatore
			var pos=str.indexOf(sep)
			
			if (tipo_data==0) {
				// Formato giorno/mese/anno
				gg = eval(str.substring(0,pos))
				str=str.substring(pos+1)					
				pos=str.indexOf(sep)			
				if (pos>=0) {				    
					mm = eval(str.substring(0,pos))
					var app = str.substring(pos+1)					
					if (!verifica(app,"0123456789")) {
						alert('Formato inconsistente: troppi valori, correggere!')
            return false
					}
					aa = eval(app)		
				} else {          
					alert('Formato inconsistente: valori non sufficienti, correggere!')
          return false
				}
				
			} else if (tipo_data==1) {
				// Formato mese/anno
				mm = eval(str.substring(0,pos))
				str = str.substring(pos+1)
				if (pos>=0) {	
					pos=str.indexOf(sep)	
					if (pos>0) {
						alert('Formato inconsistente: valori eccessivi, correggere!')
            return false
					}					
					aa = eval(str)
					
				} else {
					alert('Formato inconsistente: valori non sufficienti, correggere!')
          return false
				}				
							
			} else if (tipo_data==2) {				
				alert('Formato inconsistente, correggere!')
				return false			
			}
						
			if (aa<=99) {
				if (aa<70) aa=aa+2000
					else aa=aa+1900
			} else if (aa<1000) {
				alert('Formato inconsistente: anno troppo basso, correggere!')
				return false
			} else if (aa>9999) {
				alert('Formato inconsistente: anno troppo grande, correggere!')
				return false
			}
		}
		
    
    //alert("valori:" +aa +"-"+mm+"-"+gg)
		if (separatore==null) sep="/"; else sep=separatore
		if (separatore==undefined) sep="/"; else sep=separatore
		
    var data = new Date(aa,mm-1,gg,0,0,0);
		// Attenzione: i valori devono essere modificati nel seguente ordine: second, minute, hour, date, month, year
		/*
    data.setMonth(0);
		data.setDate(1);
		if (tipo_data==0) {
			data.setDate(gg);
		} else {
			data.setDate(1);
		}	
		if (tipo_data<=1) {
			data.setMonth(mm-1);
		} else {
			data.setMonth(0);
		}			
		// -------------- Correzione! -----------
		data.setYear(aa); */
    
    // Per qualche motivo il sistema ritorna un getYear di 2 cifre se la data è tra il 1900 e il 2000 
		anno=data.getYear();		
    if (anno<=199) anno=anno+1900 
    mese=data.getMonth()+1;
    giorno=data.getDate()
    
    //alert("data: "+data.getYear()+"-"+data.getMonth()+"-"+data.getDate() + ", valore: "+anno +"-"+mese+"-"+giorno)
		
		if (tipo_data==0) {
			if ((anno!=aa) || (mese!=mm) || (giorno!=gg)) {
				alert('Data non valida, correggere!')
				return false
			}
			campo.value = (gg<10?"0":"") + gg + sep + (mm<10?"0":"") + mm + sep + aa
      
		} else if (tipo_data==1) {
			if ((anno!=aa) || (mese!=mm)) {
				alert('Mese inserito non valido, correggere!')
				return false
			}
			campo.value = (mm<10?"0":"") + mm + sep + aa
      
		} else if (tipo_data==2) {
		  if ((anno!=aa)) {
				alert('Anno inserito non valido, correggere!')
				return false
			}
			campo.value = aa
		}		
		return true			
	}
	return true
}


function formattaOra(campo, separatore) {
	ret = formattaOraINNER(campo, separatore, 'HMS')
	if (!ret)	{
    campo.value=""
		campo.focus()			
	}			
	return ret
}

function formattaOreMinuti(campo, separatore) {
	ret = formattaOraINNER(campo, separatore, 'HM')
	if (!ret)	{
    campo.value=""
		campo.focus()			
	}			
	return ret
}

function formattaOraINNER(campo, separatore, quale) {
	var hh=0, mm=0, ss=0	
		
	var massimo_caratteri = 0	
	var data_completa
	if (quale=='HMS') {
		massimo_caratteri = 8
		ora_completa = true

	} else if (quale=='HM') {
		massimo_caratteri = 5
		ora_completa = false
	}		
	//alert("Tipo='"+quale+"', "+massimo_caratteri+", "+ ora_completa)
		
	var verifica = function (valore, vettore) {	if (valore!="") {var errore=false;for(a=0; a<valore.length && !errore; a++) { var trovato=false; for(b=0; b<vettore.length && !trovato;b++) { if(valore.charAt(a)==vettore.charAt(b)) trovato=true } if (!trovato) errore=true } return !errore} return true}
	campo.value = lTrim(rTrim(campo.value))
	 
	var str = campo.value		
	
	//alert("Lunghezza='"+str.length+"'")
	if (str.length>0) {
		// Verifica lunghezza campo
		if (str.length>massimo_caratteri) {
			alert('Campo troppo lungo, correggere!')
			return false
		}			
		// Verifica caratteri validi			
		if (!verifica(str,"0123456789 :.")) {
			alert('Il campo contiene dei caratteri non validi, correggere!')
			return false
		}
	 
	 	//Verifica formato data		
		var sep=""; var c=0		
		if (str.indexOf(".")>0) {sep="."; c++}
		if (str.indexOf(":")>0) {sep=":"; c++}
		if (str.indexOf(" ")>0) {sep=" "; c++}
		if (str.indexOf("&nbsp;")>0) {sep="&nbsp;"; c++}
		if (c>1) {
			// ...utilizzati troppi separatori
			alert('Impossibile determinare un valore valido, correggere!')
			return false
		}
	
		if (sep=="") {
			// Data tutta appiccicottata....
			if (ora_completa) {
				// Formato ore/minuti/secondi
				if (str.length==6) {
	       	// tipo: 120302	per 12:03:02       	
					hh = eval(str.substring(0,2))
	       	mm = eval(str.substring(2,4))
	       	ss = eval(str.substring(4))				
				} else {
					alert('Formato inconsistente: valori insufficienti, correggere!')
					campo.focus()
					return false			
				}
			} else {
   			// Formato ore/minuti
			  if (str.length==4) {
					// tipo: 1203	per 12:03 
	       	hh = eval(str.substring(0,2))
	       	mm = eval(str.substring(2))
				} else {
					alert('Formato inconsistente: valori insufficienti, correggere!')
					campo.focus()
					return false			
				}
			}			
						
		} else {
			// E' stato inserito un separatore
			var pos=str.indexOf(sep)
			
			if (ora_completa) {
				// Formato giorno/mese/anno
				hh = eval(str.substring(0,pos))
				str=str.substring(pos+1)					
				pos=str.indexOf(sep)			
				if (pos>=0) {				    
					mm = eval(str.substring(0,pos))
					var app = str.substring(pos+1)					
					if (!verifica(app,"0123456789")) {
						alert('Formato inconsistente: troppi valori, correggere!')
						return false
					}
					ss = eval(app)		
				} else {
					alert('Formato inconsistente: valori non sufficienti, correggere!')
					return false
				}
				
			} else {
				// Formato mese/anno
				mm = eval(str.substring(0,pos))
				str=str.substring(pos+1)					
				
				if (pos>=0) {				    
					ss = eval(str.substring(0,pos))					
				} else {
					alert('Formato inconsistente: valori non sufficienti, correggere!')
					return false
				}				
			}
			
		}
		
		if (separatore==undefined) sep=":"; else sep=separatore
		var ora = new Date;
		// Attenzione: i valori devono essere modificati nel seguente ordine: second, minute, hour, date, month, year
		
		ora.setSeconds(0);
		ora.setMinutes(0);
		if (ora_completa) {
			ora.setSeconds(ss);
		} else {
			ora.setSeconds(0);
		}	
		ora.setMinutes(mm);
		ora.setHours(hh);		
		
		//alert(ora.getHours()+":"+ora.getMinutes()+":"+ora.getSeconds())		
		if ((ora.getHours()!=hh) || (ora.getMinutes()!=mm) || (ora.getSeconds()!=ss)) {
			alert('Ora non valida, correggere!')
			return false
		}
		if (ora_completa) {
			campo.value = (hh<10?"0":"") + hh + sep + (mm<10?"0":"") + mm + sep + (ss<10?"0":"") + ss
		} else {
			campo.value = (hh<10?"0":"") + hh + sep + (mm<10?"0":"") + mm
		} 		
		return true	
	}
	return true
}



// Verifica la validita del codice PARTITA IVA
function checkPartitaIVA (codice) {
	var nValore, nSomma1=0, nSomma2=0;

  if (codice.length!=11 || isNaN(parseFloat(codice)) || parseFloat(codice)<parseFloat(0))	return false;
  for (var lcv=0;lcv<9;lcv+=2) {
  	nValore=parseInt(codice.charAt(lcv));
    nSomma1+=nValore;
    nValore=parseInt(codice.charAt(lcv+1));
    nSomma1+=Math.floor(nValore/5) + (nValore<<1) % 10;
  }
  nSomma2 = 10 - (nSomma1 % 10);
	if (nSomma2==10) nSomma2=0;
  nValore=parseInt(codice.charAt(10));
  if (nSomma2==nValore) return true;
  return false;
}

