var arrayCaratteriAmmessi = new Array();
arrayCaratteriAmmessi[0] = 'abcdefghilmnopqrstuvzxwykj0123456789';

//non toccare queste variabili!!!!
var msgErrore = '';
var	msgDefCampo = '';
var charEscape = true;

var shell = "cmd";
var sep_com = '#';  
var sep_opz = '=';  
var sep_par = ';';  
var sep_pc = ':';  
var sep_parc = ',' 

var jguiMsg_valida1='Per proseguire è necessario accettare le condizioni';
var jguiMsg_valida2='Per proseguire è necessario accettare le condizioni';
var jguiMsg_valida3='Selezionare un valore del campo \'';
var jguiMsg_valida4='Selezionare un\'opzione del campo \'';
var jguiMsg_valida5='Inserire il campo \'';
var jguiMsg_valida6='Il campo \'';
var jguiMsg_valida7='\' deve avere almeno ';
var jguiMsg_valida8=' caratteri.';
var jguiMsg_valida9='\' deve avere al massimo di ';
var jguiMsg_valida10='\' contiene dei caratteri non consentiti. I caratteri ammessi sono:\n';
var jguiMsg_valida11=' non è un indirizzo email';
var jguiMsg_valida12=' deve essere un numero';
var jguiMsg_valida13=' deve essere un numero intero';
var jguiMsg_valida14=' deve essere maggiore di ';
var jguiMsg_valida15=' deve essere minore di ';
var jguiMsg_valida16='\' è in formato errato. Il formato è gg mm aaaa.';
var jguiMsg_valida17='\' è in formato errato. Il formato è gg mm aa oppure gg mm aaaa.';
var jguiMsg_valida18='\' non è un indirizzo IP.';
var jguiMsg_valida19='\' non è un codiceFiscale.';
var jguiMsg_valida20=' non è valido: la P.Iva dev\'essere almeno di 11 numeri';
var jguiMsg_valida21=' non è valido: la P.Iva dev\'essere numerica';
var jguiMsg_valida22=' non è valido: la P.Iva deve almeno una cifra maggiore di 0 nei primi 7 caratteri';
var jguiMsg_valida23=' non è valido: il numero di P.Iva non è valido';
var jguiMsg_valida24='La password non è confermata correttamente';
var jguiMsg_valida25='\n\nFormato dell\'anno non corretto.';
var jguiMsg_valida26='\n\nFormato dell\'anno non corretto, inserire in formato aaaa.';
var jguiMsg_valida27='\n\nIl mese deve essere compreso tra 1 e 12.';
var jguiMsg_valida28='\n\nIl mese di febbraio non può avere più di 28 giorni.';
var jguiMsg_valida29='\n\nL\'anno inserito non è bisestile quindi il mese di febbraio non può avere più di 28 giorni.';
var jguiMsg_valida30='\n\nI giorni dei mesi non possono essere maggiori di 31.';
var jguiMsg_valida31='\n\nI giorni dei mesi di Aprile, Giugno, Settembre e Novembre non possono essere maggiori di 30.';
var jguiMsg_valida32='La data inserita in : "';
var jguiMsg_valida33='" deve essere più recente della data in: "';

function _selezionaLinguaBase()
{
}

//******************************************************************************
//reestituisce i parametri di un comando dalla stringa di comando, restituisce #NULL# se non sono presenti opzioni
function getCmdParam(strCmd,tipoc)
{
  var ris = '#NULL#';
	var i;
	var stop = false;
	var strCmdTemp, parametri;

	if ((strCmd != null)&&(strCmd != ''))
	{
  	tipoc = tipoc.toLowerCase() + "=";
	  strCmdTemp = strCmd.toLowerCase();
  	if ((i = strCmdTemp.search(tipoc)) >= 0)
	  {
	    parametri = strCmd.substr(i+tipoc.length,strCmd.length);
  		i = parametri.search(sep_com);
	  	if (i < 0)
		    i = parametri.length;
			if (i > 0)
    		ris = parametri.substr(0,i);
	  }
	}
	
	return ris;
}// fine di getCmdParam()
//******************************************************************************

//******************************************************************************
// scorre tutti gli elementi della form da validare ed effettua la validazione
// da inserire nell'evento onsubmit dei tag form

function validaForm(idForm)
{
	var i;
	var input;
  var eForm;
	
	eForm = document.getElementById(idForm);
	for ( i = 0; i < eForm.elements.length; i++) 
	{
		input = eForm.elements[i];
		if (!validaControl(input)) 
		  return false;
	}
	
	 
	//validazione dell'accettazione delle condizioni	
	if (eForm.accept) 
	{
		if(eForm.accept.type == 'radio') 
		{
			if (!eForm.accept[0].checked) 
			{
				alert(jguiMsg_valida1);
				return false;
			}
		} 
		else 
		{
		  if(eForm.accept.type == 'checkbox')
			{
			  if (!eForm.accept.checked) 
				{
				  alert(jguiMsg_valida2);
				  return false;
  		  }
	    }
		}
	}
	return true;
}// fine di validaForm()
//******************************************************************************

var _countInput = 0;

//******************************************************************************
// dato un controllo di input (oggetto), ne effettua la validazione 
function validaControl(input) 
{
	var nomeCampo;
	var id = '';
	var nodo, opz, opzc;
	var cmd, strCmd;
	var tipo = 'STR'; 
	var ric = 'no';
	var i, j;
	var idcpw;
	var sel, lun;
	var val;
  var idData = '';
	var lungMinStr = 0;
	var lungMaxStr = 0;
	var minInt = null;
	var maxInt = null;
	var label = '';
  var param = '';
	var idCheckStr = -1;
	var annoEsteso = false;
	
	if (!input.id)
    input.id = "input_" + (_countInput++); 
  id = input.id;

	if (id != '')
	{
	  nodo = document.getElementById(id);
		strCmd = nodo.getAttribute(shell);
		if (strCmd)
		{
		  strCmd = strCmd.split(sep_com);
		  for (i = 0; i < strCmd.length; i++)
		  {
		    cmd = strCmd[i].split(sep_opz);	// serve per la gestione dei comandi complessi
			                            // in cmd[0] viene inserito il tipo di comando
																	// in cmd[1] vengono insedriti eventuali parametri
																	// di impostazione
	      opz = cmd[1];
			  val = cmd[0].toUpperCase();
		    switch (val)
	  	  {
	  	    //qua ci va l'elenco di tutti i comandi
	     	  case 'TIPO': 
		  		     opzc = opz.split(sep_pc);
							 if (opzc.length > 1)
							 {
							   tipo = opzc[0].toUpperCase();
								 param = opzc[1];
							 }
							 else
  		  				 tipo = opz.toUpperCase();

							 if (param != '')
							 {
							   switch (tipo)
							   {
							     case 'STR':
							     case 'PWD':
								       param = param.split(sep_parc)
      		  				   if (param[0] != '')
        	  				     lungMinStr = parseFloat(param[0]);	
      		  				   if ((param[1] != null)&&(param[1] != ''))
        	  				     idCheckStr = parseFloat(param[1]);					     
							         break;								 
							     case 'CPW':
								       param = param.split(sep_parc)
                       
      		  				   if (param[0] != '')
        	  				     idcpw = param[0];
	      		  				 if ((param[1] != null)&&(param[1] != ''))
        	  				     lungMinStr = parseFloat(param[1]);		
      		  				   if ((param[2] != null)&&(param[2] != ''))
        	  				     idCheckStr = parseFloat(param[2]);														 						     
							         break;
							     case 'INT':
								       param = param.split(sep_parc);
      		  				   if (param[0] != '')
        	  				     minInt = parseFloat(param[0]);
      		  				   if ((param[1] != null)&&(param[1] != ''))
        	  				     maxInt = parseFloat(param[1]);
										   break;
							     case 'DAT':
								       param = param.split(sep_parc);
      		  				   if (param[0] != '')
        	  				     annoEsteso = true;
											 break;										 			 
							   }
							 }
							 break;		
				  case 'RIC': //campo richiesto o non richiesto   LIBRERIA VALIDA.JS
				       opz = opz.split(sep_par);
	  		  		 if ((opz[0] != null)&&(opz[0] != ''))
                 ric = opz[0];
							 else
							   ric = 'no';
							 if ((opz[1] != null)&&(opz[1] != ''))
							 { 
                 label = getNodeText(document.getElementById(opz[1]));
					  	   if (label == null)
						       label = '#valore non definito#';
							 }
							 else
							   label = '#valore non definito#';

							 if ((opz[2] != null)&&(opz[2] != ''))
                 msgDefCampo = opz[2];
							 else
							   msgDefCampo = '';
			  		   break;
				  case 'CDATA':
							 if (opz != '#NULL#')
							 	 idData = opz;									 
						   break;
				  case 'LENGTH':
							 if (opz != '#NULL#')
							 	 lungMaxStr = parseFloat(opz);									 
						   break;							 		 
		     }
	    }

		  // il campo è di tipo SELECT SINGOLA
		  // la validazione è solo sull'obbligatorietà di scegliere una delle opzioni
		  // l'obbligatorietà è soddisfatta se viene scelta una opzione diversa dalla prima (selectedIndex <> 0)
	  	if (input.type == 'select-one') 
	  	{
  			if (ric == 'si') 
	  		{
		  		if (input.selectedIndex == 0) 
			  	{
					  if (msgDefCampo == '')
    					alert(jguiMsg_valida3 + label + '\'');
						else
						  alert(msgDefCampo);
                        _selezionaLinguaBase(); 
						input.focus();
		  			return false;
			  	}
  			}
	  	}
		
	  	// il campo è di tipo SELECT A MULTIPLA
		  // la validazione è solo sull'obbligatorietà di scegliere almeno una delle opzioni
  		// l'obbligatorietà è soddisfatta se viene scelta una opzione (selectedIndex <> -1)
	  	if (input.type == 'select-multiple') 
  		{
	  		if (ric == 'si') 
  			{
  	 			if (input.selectedIndex == -1) 
	  			{
					  if (msgDefCampo == '')
    					alert(jguiMsg_valida3 + label + '\'');
						else
						  alert(msgDefCampo);
                        _selezionaLinguaBase(); 
						input.focus();
  					return false;
  				}
  			}
  		}
		
	  	// il campo è di tipo RADIO
  		// la validazione è solo sull'obbligatorietà di scegliere almeno una delle opzioni
  		// l'obbligatorietà è soddisfatta se uno degli oggetti dell'array è checked
  		if (input.type == 'radio') 
  		{
  			if (ric == 'si') 
  			{
  				sel = false;
  				lun = input.form[input.name].length;
  				for (i = 0; i < lun; i++) 
  				{
  					if (input.form[input.name][i].checked) 
  						sel = true;
  				}
  				if (!sel) 
  				{
					  if (msgDefCampo == '')
    					alert(jguiMsg_valida4 + label + '\'');
						else
						  alert(msgDefCampo);					
                        _selezionaLinguaBase(); 
						input.focus();
						input.select();
  					return false;
  				}
  			}
  		}

  		// il campo è di tipo TEXT o TEXTAREA
  		if ((input.type == 'text')||(input.type == 'hidden')||(input.type == 'textarea')||(input.type == 'password')||(input.type == 'file')) 
  		{		
  			//se il campo è obbligatorio, verifica se il valore non è vuoto
  			if (ric == 'si')
  			{
  				if (input.value == '')
  				{			
						if (msgDefCampo == '')
    					alert(jguiMsg_valida5 + label + '\'');
						else
						  alert(msgDefCampo);		
						if (input.type != 'hidden'){				
                        _selezionaLinguaBase(); 
  						input.focus();
	  					input.select();
						}
  					return false;
  				}
  			}
  		
  			if (input.value != '')
  			{
				
   				if ((tipo == 'STR')||(tipo == 'PWD')||(tipo == 'CPW'))
   				{										
  					if (lungMinStr > 0)	{
  						if (input.value.length < lungMinStr){							
     						if (msgDefCampo == '')
  	  							alert(jguiMsg_valida6 + label + jguiMsg_valida7 + lungMinStr + jguiMsg_valida8);
  							else
			    				alert(msgDefCampo);		
                            _selezionaLinguaBase(); 
  							input.focus();
	  						input.select();								
    						return false;
	  					}
  					}
						
  					if (lungMaxStr > 0)	{
  						if (input.value.length > lungMaxStr){
     						if (msgDefCampo == '')
  	  							alert(jguiMsg_valida6 + label + jguiMsg_valida9 + lungMaxStr + jguiMsg_valida8);
  							else
			    				alert(msgDefCampo);		
                            _selezionaLinguaBase(); 
  							input.focus();
	  						input.select();								
    						return false;
	  					}
  					}						

  					if (idCheckStr >= 0)
						{
						  if (!caratteriCons(input.value,arrayCaratteriAmmessi[idCheckStr]))
							{
     						if (msgDefCampo == '')
    						  alert(jguiMsg_valida6 + label + jguiMsg_valida10 + stampaCaratteriAmm(arrayCaratteriAmmessi[idCheckStr]));
							  else
			    			  alert(msgDefCampo);
                            _selezionaLinguaBase(); 
  							input.focus();
	  						input.select();																		
    						return false;
							}
  					}
  				}
				
  				//validazione del formato e-mail
  				if (tipo == 'EML') 
  				{
  					if (!isEmail(input))
  					{
   						if (msgDefCampo == '')
    						alert(jguiMsg_valida6 + label + '\'' + jguiMsg_valida11);
 						  else
		    			  alert(msgDefCampo);			
                          _selezionaLinguaBase(); 
							input.focus();
							input.select();												
  						return false;
  					}
  				}
          
  				if (tipo == 'EURO') 
  				{
  					if (!isEuro(input))
  					{				
   						if (msgDefCampo == '')
    						alert('Il campo \'' + label + '\'' + ' non è una valuta in euro');
 						  else
		    			  alert(msgDefCampo);			
                          _selezionaLinguaBase(); 
							input.focus();
							input.select();												
  						return false;
  					}
  				}  
          
  				if (tipo == 'FLT') 
  				{
  					if (!isFloat(input))
  					{				
   						if (msgDefCampo == '')
    						alert('Il campo \'' + label + '\'' + ' non è un numero valido! Usare la virgola come separatore dei decimali');
 						  else
		    			  alert(msgDefCampo);			
                          _selezionaLinguaBase(); 
							input.focus();
							input.select();												
  						return false;
  					}
  				}                   
          
  				//validazione del tipo numerico generico
  				if (tipo == 'NUM') 
  				{
  					if (!isNum(input)) 
  					{
   						if (msgDefCampo == '')
    						alert(jguiMsg_valida6 + label + '\'' + jguiMsg_valida12);
 						  else
		    			  alert(msgDefCampo);			
                          _selezionaLinguaBase(); 
							input.focus();
							input.select();												
  						return false;
  					}
  				}
  				//validazione del tipo intero
  				if (tipo == 'INT') 
  				{
  					if (!isInt(input)) 
  					{
   						if (msgDefCampo == '')
    						alert(jguiMsg_valida6 + label + '\'' + jguiMsg_valida13);
 						  else
		    			  alert(msgDefCampo);		
                          _selezionaLinguaBase(); 
							input.focus();
							input.select();								
  						return false;
  					}
						
						if (minInt != null)
						{
						  if (parseFloat(input.value) < parseFloat(minInt))
							{
     						if (msgDefCampo == '')
    						  alert(jguiMsg_valida6 + label + '\'' + jguiMsg_valida14 + (minInt-1));
 		  				  else
		      			  alert(msgDefCampo);		
                          _selezionaLinguaBase(); 
  							input.focus();
	  						input.select();														
  						  return false;
							}
						}

						if (maxInt != null)
						{
						  if (parseFloat(input.value) > parseFloat(maxInt))
							{
     						if (msgDefCampo == '')
    						  alert(jguiMsg_valida6 + label + '\'' + jguiMsg_valida15 + (maxInt+1));
 		  				  else
		      			  alert(msgDefCampo);			
                          _selezionaLinguaBase(); 
  							input.focus();
	  						input.select();															
  						  return false;
							}
						}
  				}
				  
  				//validazione del tipo data
   				if (tipo == 'DAT') 
   				{
  					if (!isDate(input,annoEsteso)) 
  					{
   						if (msgDefCampo == ''){
							  if (annoEsteso)
      						alert(jguiMsg_valida6 + label + jguiMsg_valida16 + msgErrore);
								else
      						alert(jguiMsg_valida6 + label + jguiMsg_valida17 + msgErrore);
							}
	  				  else
	      			  alert(msgDefCampo);								
							msgErrore = '';
                            _selezionaLinguaBase(); 
							input.focus();
							input.select();
  						return false;
  					}
  				}

					//confronto delle date
					if (idData != '')
  					return confronta_date(idData,id);

  				//validazione del tipo inndirizzo IP
   				if (tipo == 'IP') 
   				{
  					if (!isIndirizzoIP(input)) 
  					{
   						if (msgDefCampo == '')
    						alert(jguiMsg_valida6 + label + jguiMsg_valida18 );
	  				  else
	      			  alert(msgDefCampo);	
                      _selezionaLinguaBase(); 
							input.focus();
							input.select();														
  						return false;
  					}
  				}
	
  				//validazione del tipo Codice fiscale
   				if (tipo == 'CF') 
   				{
  					if (!isCodiceFiscale(input)) 
  					{
   						if (msgDefCampo == '')
    						alert(jguiMsg_valida6 + label + jguiMsg_valida19);
	  				  else
	      			  alert(msgDefCampo);	
                      _selezionaLinguaBase(); 
							input.focus();
							input.select();																
  						return false;
  					}
  				}
							
						
  				//validazione del tipo partita IVA
  				if (tipo == 'IVA') 
  				{
  					switch(checkPIva(input.value)) 
  					{
  						case (0): 
  						{
  							break;
  						}
  						case (1): 
  						{
     						if (msgDefCampo == '')
    							alert(jguiMsg_valida6 + label + '\'' + jguiMsg_valida20);
	    				  else
	        			  alert(msgDefCampo);	
                          _selezionaLinguaBase(); 
				  			input.focus();
					  		input.select();
  							return false;
  							break;
  						}
  						case (2): 
  						{
     						if (msgDefCampo == '')
    							alert(jguiMsg_valida6 + label + '\'' + jguiMsg_valida21);
	    				  else
	        			  alert(msgDefCampo);							
                          _selezionaLinguaBase(); 
				  			input.focus();
					  		input.select();
  							return false;
  							break;
  						}
  						case (3): 
  						{
     						if (msgDefCampo == '')
    							alert(jguiMsg_valida6 + label + '\'' + jguiMsg_valida22);
      				  else
	        			  alert(msgDefCampo);							
                          _selezionaLinguaBase(); 
				  			input.focus();
					  		input.select();
  							return false;
  							break;
  						}
  						case (4): 
  						{
     						if (msgDefCampo == '')
    							alert(jguiMsg_valida6 + label + '\'' + jguiMsg_valida23);
	    				  else
	        			  alert(msgDefCampo);							
                          _selezionaLinguaBase(); 
				  			input.focus();
					  		input.select();
  							return false;
  							break;
  						}
  					}
  				}

		  		//validazione della conferma password
  				if (tipo == 'CPW') 
  				{
  				  obj = document.getElementById(idcpw);
  					if (obj.value != input.value) 
  					{
   						if (msgDefCampo == '')
  						  alert(jguiMsg_valida24);
    				  else
        			  alert(msgDefCampo);								
                      _selezionaLinguaBase(); 
				  		input.focus();
					  	input.select();
  						return false
						}
					}					
				}
			}
		}		
	}
	
  if ((input.type == 'text')||(input.type == 'hidden')||(input.type == 'textarea')) {	
		input.value = trim(input.value); //levo gli spazi allinizio e alla fine di una stringa
		//escape dei caratteri < e >
		if ((input.value != '')&&(charEscape)&&(tipo == 'STR')&&((input.type == 'text')||(input.type == 'textarea'))){
	  	input.value = input.value.replace(/</g,'&lt;');
	  	input.value = input.value.replace(/>/g,'&gt;');
	  }
	}
	
	return true;
}// fine di validaControl()
//******************************************************************************

//******************************************************************************
//elimina gli spazi
function trim(stringa)
{
   reTrim=/\s+$|^\s+/g;
   return stringa.replace(reTrim,"");
}//fine di trim()
//******************************************************************************


//******************************************************************************
function isEuro(campo)
{
  var valoreEuro = campo.value;
	var tempStr, parteIntera, parteDecimale;
	
	valoreEuro = trim(valoreEuro);
  if (valoreEuro.length == 0)
	  return true;

	valoreEuro = valoreEuro.replace(".",",");
	if (!caratteriCons(valoreEuro,"0123456789,-"))
	  return false;
		
	if (valoreEuro.charAt(0) == "," || valoreEuro.charAt(valoreEuro.length-1) == ",")
	  return false;
	
	if (valoreEuro.indexOf("-") > 0)
	  return false;
		
	if (valoreEuro.indexOf(",") > 0)
	{
	  tempStr = valoreEuro.split(",");
		if (tempStr.length > 2)
		  return false;
		parteIntera = "" + parseFloat(tempStr[0]);
		parteDecimale = "" + parseFloat(tempStr[1]);
		if (parteDecimale.length < 2)
		  parteDecimale += "0";		
	}
	else
	{
		parteIntera = "" + parseFloat(valoreEuro);
		parteDecimale = "00";		
	}
	
	campo.value = parteIntera + "," + parteDecimale;
	return true;
}
//******************************************************************************


//******************************************************************************
//verifica se il contenuto del campo è un numero intero positivo.     
//ritorna true se è un numero o se è null, altrimenti ritorna false   
function isInt(campo) 
{
	if (campo.value.length == 0) 
		return true;

	var numero = trim(campo.value);
	
	ncar = numero.length;

	//vengono ammessi solo digit
	var cifre = '0123456789';
	var ok = true;
	for (var i = 0; i < ncar; i++) 
	{
		if (cifre.indexOf(numero.charAt(i))<0) 
		{
			//non è un numero
			ok = false;
		}
	}
	if (ok) 
	{
		campo.value = numero;
		return true;
	} 
	else 
		return false;
}// fine di isInt()
//******************************************************************************



//******************************************************************************
//verifica se il contenuto del campo è un numero decimale positivo o negativo.     
//il formato è del tipo [+,-]ii[,ddddd]                                            
//dopo il controllo restituisce sempre nel formato [-]ii,dd						   
//ritorna true se è un numero decimale o se è null, altrimenti ritorna false       
function isNum(campo) {
	
	if (campo.value.length == 0) 
	{
		return true;
	}
	
	var numero = trim(campo.value);
	var cifre1 = '+-0123456789,';
	var cifre2 = '0123456789,';
	//vengono tolti gli spazi in testa ed in coda
	
	ncar = numero.length;

	var num_virgole = 0;  // mi dice quante virgole ci sono
	
	// verifico che il 1^ carattere sia un digit oppure "-" oppure "+" oppure ","
	var ok_primo = true;
	if (cifre1.indexOf(numero.charAt(0))<0) 
		ok_primo = false;
		
	if (numero.charAt(0) == ',')
		num_virgole += 1;

	
	//verifico che gli altri caratteri siano o digit o ","
	var ok = true;
	for (var i = 1; i < ncar; i++) 
	{
		//window.alert('cifra '+i+'^ :'+numero2.charAt(i));
		if (cifre2.indexOf(numero.charAt(i)) < 0)
			ok = false;
		if (numero.charAt(i) == ',')
			num_virgole += 1;
	}
	
	if (ok && ok_primo && (num_virgole <= 1)) 
		return true;
	else 
		return false;
}// fine di isNum()
//******************************************************************************

function isFloat(campo) {
	
	if (campo.value.length == 0) 
		return true;
	
    campo.value = campo.value.replace(".",",");
	var numero = trim(campo.value);
	var cifre1 = '+-0123456789';
	var cifre2 = '0123456789,';
	//vengono tolti gli spazi in testa ed in coda
	
	ncar = numero.length;

	var num_virgole = 0;  // mi dice quante virgole ci sono
	
	// verifico che il 1^ carattere sia un digit oppure "-" oppure "+" oppure ","
	if (cifre1.indexOf(numero.charAt(0))<0) 
		return false;
		
	//verifico che gli altri caratteri siano o digit o ","
	for (var i = 1; i < ncar; i++) 
	{
		if (cifre2.indexOf(numero.charAt(i)) < 0)
			return false;
		if (numero.charAt(i) == ',')
			num_virgole += 1;
	}
	
	if (num_virgole <= 1) 
		return true;
	else 
		return false;
}// fine di isFloat()
//******************************************************************************


//******************************************************************************
function caratteriCons(str,check)
{
  var ris = true;
	
	str = str.toLowerCase();
	check = check.toLowerCase();
	
  for (i = 0; i < str.length; i++) 
	{
	  if (check.indexOf(str.substr(i,1)) < 0)
		{ 
		  ris = false
		  break;
		}
  }
	
	return ris;
}// fine di caratCons()
//******************************************************************************



//******************************************************************************
//Validazione di un campo data													   
//il formato è del tipo gg*mm*aaaa dove:                                           
//gg = giorno																	   
//mm = mese																	       
//aaaa = anno																	   
//* = qualsiasi separatore che non sia 0..9										   
//il separatore viene sempre convertito in /									   
function isDate(campo,annoEsteso) 
{
  var check = '0123456789';
	var data = '';
  var sepData = '/';
	var leap;
	var i;
	
  msgErrore = '';
	
  DateField = campo;
  DateValue = DateField.value;
   
  if (DateValue == '') 
	 return true;
	
	for (i = 0; i < DateValue.length; i++) 
	{
	  if (check.indexOf(DateValue.substr(i,1)) < 0)
		  data += '/';
		else
		  data += DateValue.substr(i,1);
  }
	
	data = data.split(sepData);
	if (data.length != 3)
	  return false;

	giorno = data[0];
	mese = data[1];
	anno = data[2];
	
	if ((anno.length < 2)||(anno.length == 3)||(anno.length > 4))	{
		msgErrore = jguiMsg_valida25
	  return false;
	}
	else{
	  if (annoEsteso){
		  if (anno.length != 4){
    		msgErrore = jguiMsg_valida26
	      return false;
			}
		}
		else
  	  if (anno.length == 2)
	      anno = '20' + anno;
	}
	
  if (isNaN(giorno)||isNaN(mese)||isNaN(anno))
	  return false;

  if (anno == 0)
	{
		msgErrore = jguiMsg_valida25
	  return false;
	}

  if (anno < 10)
	  anno = '200' + anno;

  if (anno < 100)
	  anno = '20' + anno;
	
  if ((mese < 1) || (mese > 12))
	{ 
  	msgErrore = jguiMsg_valida27
		return false;
  }	
	
  if ((anno % 4 == 0) || (anno % 100 == 0) || (anno % 400 == 0)) 
    leap = 1;

  if ((mese == 2) && (leap == 1) && (giorno > 29)) 
	{
  	msgErrore = jguiMsg_valida28
    return false;
	}		
	
	if ((mese == 2) && (leap != 1) && (giorno > 28)) 
	{
    msgErrore = jguiMsg_valida29
		return false;
	}
	
	if ((giorno > 31) && ((mese == 1) || (mese == 3) || (mese == 5) || (mese == 7) || (mese == 8) || (mese == 10) || (mese == 12)))
	{ 
		msgErrore = jguiMsg_valida30
		return false;
	}
	
  if ((giorno > 30) && ((mese == 4) || (mese == 6) || (mese == 9) || (mese == 11)))
  { 
  	msgErrore = jguiMsg_valida31
    return false;
	}
	
	DateField.value = giorno + sepData + mese + sepData + anno;
	
	return true;
}// fine di isDate()
//******************************************************************************



//******************************************************************************
//verofoca se il campo è un codice fiscale (verifica solo la sintassi)
function isCodiceFiscale(campo)
{
  var checkstrLet = 'abcdefghilmnopqrstuvzxywkj';
  var checkstrNum = '1234567890';
  var checkstrLetMesi = 'abcdehlmprst';
	var valore;
	var i;
	var temp;
	
	valore = campo.value;
  if (valore == '')
	  return true;

	if (!caratteriCons(valore,checkstrLet+checkstrNum))
	  return false;

	if (valore.length != 16)
	  return false;

	temp = valore.substr(0,6);
	if (!caratteriCons(temp,checkstrLet))
    return false;

	temp = valore.substr(6,2);
	if (!caratteriCons(temp,checkstrNum))
    return false;

	temp = valore.substr(8,1);
	if (!caratteriCons(temp,checkstrLetMesi))
    return false;

	temp = valore.substr(9,2);
	if (!caratteriCons(temp,checkstrNum))
    return false;
	
	if ((temp == 0)||((temp > 31)&&(temp < 41))||(temp > 71))
	  return false;

	temp = valore.substr(11,1);
	if (!caratteriCons(temp,checkstrLet))
    return false;


	temp = valore.substr(12,3);
	if (!caratteriCons(temp,checkstrNum))
    return false;

	temp = valore.substr(15,1);
	if (!caratteriCons(temp,checkstrLet))
    return false;
			
	return true;	
}// fine di isCodiceFiscale()
//******************************************************************************





//******************************************************************************
function isIndirizzoIP(campo)
{
  var checkstr = '0123456789.';
	var valore;
	var i;
	var errore;
	
	valore = campo.value;
  if (valore == '')
	  return true;

	if (!caratteriCons(valore,checkstr))
	  return false;

	valore = valore.split('.');
	if (valore.length == 4)
	{

	  i = 0;
		errore = false;
	  while ((i < valore.length)&&(!errore))
		{
	    if ((valore[i] == '') || (valore[i] == null))
			  errore = true;
			i++;
		}
		if (errore)
		  return false;
		
		if ((valore[0] < 1)||(valore[0] > 255))
		  return false;

		if ((valore[1] < 0)||(valore[1] > 255))
		  return false;

		if ((valore[2] < 0)||(valore[2] > 255))
		  return false;

		if ((valore[3] < 0)||(valore[3] > 255))
		  return false;
	}
	else
	  return false;
		
	return true;	
}// fine di isIndirizzoIP()
//******************************************************************************



//******************************************************************************
//verifica se il contenuto del campo è un indirizzo e-mail sintatticamente corretto 
//il formato è del tipo user@domain2.domain1                                        
//ritorna true se è un indirizzo e-mail, altrimenti ritorna false                    
function isEmail(campo) 
{
	var email = campo.value;
	var errore = true;
	var i;
	var checkstruser = 'abcdefghilmnopqrstuvzxwykj0123456789.-_';
	var checkstrhost = 'abcdefghilmnopqrstuvzxwykj0123456789.-';
	var host;
	var username;
	var temp;
	
	email = email.toLowerCase();
	
	if (email == '') 
	  errore = true;
	
	if (email.search('@') < 0)
	  return false;
	
  email =	email.split('@')
	if (email.length > 2)
	  return false;
	
	username = email[0];
	host = email[1];
	
	if (username.length < 2)
	  return false;

	if (host.length < 6)
	  return false;
	
	if (!caratteriCons(username,checkstruser))
	  return false;

	if (!caratteriCons(host,checkstrhost))
	  return false;


	temp = host.split('.');
	if ((temp[temp.length-1].length < 2)||(temp[temp.length-1].length > 4))
	  return false;

	if ((host.substr(0,1) == '.')||(host.substr((host.length-1),1) == '.'))
	  return false;
		
	errore = false;
	for (i = 0; i < temp.length; i++)
	{
  	if ((temp[i].substr(0,1) == '-')||(temp[i].substr((temp[i].length-1),1) == '-'))
		{
		  errore = true; 
	    break;
		}
	}
	if (errore)
	  return false;

	return true;
}// fine di isMail()
//******************************************************************************



//******************************************************************************
//	Verifica se un testo è una partita IVA ammissibile	
function checkPIva(value) {
	if (value.length != 11) 
		return 1; // errore su lunghezza
	
	if (isNaN(value))
		return 2; // errore su non numerico

	if (value.substring(0,7)=='0000000')
		return 3; // errore su troppi zeri

	//algoritmo di validazione
	somma = 0;
	checkDigit = value.substring(10,11);
	for (i = 0; i < 10 ;i++) 
	{
		car = value.substring(i,i+1);
		if (((i+1) % 2) == 0) 
		{
		//posizione pari
			car = car * 2;
			if (car>9) car = (car+'').substring(0,1)*1 + (car+'').substring(1,2)*1;
		}
		somma += car*1;
	}
	somma = somma + '';
	
	if (somma.length >1 ) 
		digit = somma.substring((somma.length) - 1,(somma.length))
	else
		digit =somma;
	
	if (digit != 0) 
	  digit = 10 - digit;
	
	if (checkDigit==digit)
		return 0
	else
		return 4
}// finedi checkPIva()
//******************************************************************************



//******************************************************************************
//date due date (data1 e data2), verifica che data2 sia    
//più recente di data1, altrimenti da errore e ritorna false							   
//data1 = data iniziale																	   
//data2 = data finale																	   
//label_data1 = label del campo che contiene data1										   
//label_data2 = label del campo che contiene data2								     	   
function confronta_date(data1, data2)
{
  var eData1, eData2;
	var giorno1, giorno2;
	var mese1, mese2;
	var anno1, anno2;
	var checkstr = '0123456789';
	var DateTemp1 = '';
	var DateTemp2 = '';
	var label_data1, label_data2;
	var opz;
  var errore = true;
	
  eData1 = document.getElementById(data1);
	eData2 = document.getElementById(data2);
	opz = getCmdParam(eData1.getAttribute(shell),'RIC');
	opz = opz.split(sep_par);
  label_data1 = getNodeText(document.getElementById(opz[1]));
	if (label_data1 == null)
	  label_data1 = '#valore non definito#'; 
  opz = getCmdParam(eData2.getAttribute(shell),'RIC');
	opz = opz.split(sep_par);
  label_data2 = getNodeText(document.getElementById(opz[1]));
	if (label_data2 == null)
	  label_data2 = '#valore non definito#'; 	
	
	
	if ((eData1.value != '')&&(eData2.value != ''))
	{
		for (i = 0; i < eData1.value.length; i++) 
		{
		  if (checkstr.indexOf(eData1.value.substr(i,1)) >= 0) 
	      DateTemp1 += eData1.value.substr(i,1);
  		else
	  	  DateTemp1 += '-';
    }
	
  	for (i = 0; i < eData2.value.length; i++) 
	  {
	    if (checkstr.indexOf(eData2.value.substr(i,1)) >= 0) 
	      DateTemp2 += eData2.value.substr(i,1);
  		else
	  	  DateTemp2 += '-';
    }
 
	  DateTemp1 = DateTemp1.split('-');
  	DateTemp2 = DateTemp2.split('-');
	  giorno1 = DateTemp1[0];
  	giorno2 = DateTemp2[0];
	  mese1 = DateTemp1[1];
  	mese2 = DateTemp2[1];
	  anno1 = DateTemp1[2];
  	anno2 = DateTemp2[2];

	  if (anno1.length == 2)
	    anno1 = '20' + anno1;

	  if (anno2.length == 2)
	    anno2 = '20' + anno2;

		if ((anno1 == anno2)&&(mese1 == mese2)&&(giorno1 == giorno2))
	  	return true;
				
	  if (anno1 < anno2)
  	  return true;

  	mese1 = eliminaZero(mese1);
  	mese2 = eliminaZero(mese2);
		

  	if ((mese1 < mese2)&&(anno1 == anno2))
	  	return true;

	  giorno1 = eliminaZero(giorno1);
	  giorno2 = eliminaZero(giorno2);
	  if ((giorno1 < giorno2)&&(mese1 == mese2)&&(anno1 == anno2))
	    return true;
	}
	else
		return true;
		
	if (msgDefCampo == '')
 		alert(jguiMsg_valida32 + label_data2 + jguiMsg_valida33 + label_data1+'"');
	else
	  alert(msgDefCampo);
      _selezionaLinguaBase(); 
	eData1.focus();
	eData1.select();
	return false;
}// fine di confronta_date()
//******************************************************************************


//******************************************************************************
function eliminaZero(num)
{
  switch (num)
	{
	  case '00':
				 return 0;
	  case '01':
				 return 1;
	  case '02':
				 return 2;
	  case '03':
				 return 3;
	  case '04':
				 return 4;
	  case '05':
				 return 5;
	  case '06':
				 return 6;
	  case '07':
				 return 7;
	  case '08':
				 return 8;
	  case '09':
				 return 9;
		default:
				 return parseFloat(num);
	}
}
//******************************************************************************


//******************************************************************************
function verLengthString(obj,maxc)
{
	if (obj == null)
	  var obj = this;
	
	if (obj.value.length > maxc)
		 obj.value = obj.value.substr(0,obj.value.length-1);	
}// fine di verLengthString()
//******************************************************************************



//******************************************************************************
function stampaCaratteriAmm(str){
  var i;
	var tempStr = '';
	
	for (i = 0; i < str.length; i++){
	  if (str.charAt(i) == ' ')
		  tempStr += '[spazio]   ';
		else 
  	  tempStr += str.charAt(i) + '   ';
	}
	
	return tempStr;
}//fine di stampaCaratteriAmm()
//******************************************************************************

//******************************************************************************
//restituisce la parte testuale di un nodo (innerText non è supportato da tutti i browser)
function getNodeText(nodo){
  if (nodo){
	  if (nodo.innerText)
		  return nodo.innerText;
		else
		  return innerTextCmd(nodo);
	}
	else
	  return null;
}//fine di getNodeText()
//******************************************************************************


//******************************************************************************
//restituisce la parte testuale di un nodo (innerText non è supportato da tutti i browser)
function innerTextCmd(nodo){
  var i;
	var eInput;
	var testo = '';
	
	if (nodo){	
  	if (nodo.hasChildNodes()) {
	    for (i = 0; i < nodo.childNodes.length; i++){
	  	 	if ((nodo.nodeValue != null) && (nodo.nodeValue != ''))
		  		 testo += nodo.nodeValue;
		    testo += innerTextCmd(nodo.childNodes[i]);
  		}
	  }
  	else{
	   	if ((nodo.nodeValue != null) && (nodo.nodeValue != ''))
		  	 testo += nodo.nodeValue;
		}	 
  }
				 
	return testo;
}// fine di innerTextCmd();
//******************************************************************************
