//   -------------- commenti -----------------

//  usare come tipo oggetto quanto segue:

//  string: come stringa o testo
//  num   : come numero o valore
//  date  : come data o ora
//  email : per controllare se esiste @

//  modificato mauri 27/07/2001

var checkObjects	= new Array();
var checkRelations = new Array();
var errors = "";
var language = new Array();

language["header"]	= "Errori di compilazione:"
language["start"]	= "->";
language["field"]	= " Il campo ";
language["require"]	= " è obbligatorio";
language["min"]		= " e deve essere almeno ";
language["max"]		= " non può superare ";
language["minmax"]	= " e compreso fra ";
language["chars"]	= " caratteri";
language["num"]		= " deve essere un numero";
language["email"]	= " deve essere un indirizzo di e-mail valido";
language["date"]	= " deve essere una data nel formato gg/mm/aaaa.";
language["maggiore"]	= " deve essere maggiore di ";
language["minore"]	= " deve essere minore di ";
language["maggioreuguale"]	= " deve essere maggiore o uguale a ";
language["minoreuguale"]	= " deve essere minore o uguale a ";
language["uguale"]	= " deve essere uguale a ";
language["exactly"]		= " e deve essere esattamente ";
language["or"]		= " e deve essere esattamente ";
language["invalidm"]		= " non è corretto.";
language["invalidf"]		= " non è corretta.";
language["toolong"]  = "deve contenere al massimo " ;

function check_cf(cf)
{
	var validi, i, s, set1, set2, setpari, setdisp;
	if( cf == '' )  return '';
	cf = cf.toUpperCase();
	validi = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
	for( i = 0; i < 16; i++ ){
		if( validi.indexOf( cf.charAt(i) ) == -1 )
			return "Il codice fiscale contiene un carattere non valido `" +
				cf.charAt(i) +
				"'.\nI caratteri validi sono le lettere e le cifre.\n";
	}
	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 false;
	return true;
}

function check_pi(pi)
{
	if( pi == '' )  return false;
	validi = "0123456789";
	for( i = 0; i < 11; i++ ){
		if( validi.indexOf( pi.charAt(i) ) == -1 )
			return "La partita IVA contiene un carattere non valido `" +
				pi.charAt(i) + "'.\nI caratteri validi sono le cifre.\n";
	}
	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 false;
	return true;
}

function addfield(x, type, obbligatorio, HTMLname, min, max,maxdigits )
{
   removefield( x );
   var p;
   var i;
   n = x.name;
   eval("V_"+n+" = new formResult(x, type, obbligatorio, HTMLname, min, max ,maxdigits);");
   checkObjects[eval(checkObjects.length)] = eval("V_"+n);
}

function removefield( x )
{
	for( i = 0; i < checkObjects.length; i++ )
	{
		if( checkObjects[i].form.name == x.name )
		{
			checkObjects.splice( i, 1 );
			return;
		}
	}
}

function addrelation( x1, labelx1, x2, labelx2, operatore, tipo )
{
   var p;
   var i;
   n = x1.name + x2.name;
   eval("V_"+n+" = new formRelation(x1, labelx1, x2, labelx2, operatore, tipo);");
   checkRelations[eval(checkRelations.length)] = eval("V_"+n);
}

function formResult(form, type, obbligatorio, HTMLname, min, max, maxdigits )
{
   this.form = form;
   this.type = type;
   this.obbligatorio = obbligatorio;
   this.HTMLname = HTMLname;
   this.min  = min;
   this.max  = max;
   this.maxdigits = maxdigits ;
}

function formRelation( x1, labelx1, x2, labelx2, operatore, tipo )
{
   this.x1 = x1;
   this.x2 = x2;
   this.labelx1 = labelx1;
   this.labelx2 = labelx2;
   this.operatore = operatore;
   this.tipo = tipo;
}

function checkdate( s ){
//	window.onerror=null // for all other strange errors

	var err=0
	var psj=0;
	if (s.length != 10 ) return 1
	b = s.substring(3, 5)// month
	//alert( 'mese:' + b );
	d = s.substring(0, 2)// day
	//alert( 'giorno:' + d );
	f = s.substring(6, 10)// year
	//alert( 'anno:' + f );

	//basic error checking
	if (b<1 || b>12) {
		//alert("Data Richiesta errata formato GGMMAAAA");//
		return 2
	}

	if (d<1 || d>31) {
        //alert("Data Richiesta errata formato GGMMAAAA");//
		return 3
	}
	if (f<1900 || f>2050) {
        //alert("Data Richiesta errata formato GGMMAAAA");//
		return 8
	}
        //advanced error checking

	// months with 30 days
	if (b==4 || b==6 || b==9 || b==11){
		if (d==31) {
        	//alert("Data Richiesta l'Ultimo giorno del mese è il 30 !!! (formato GGMMAAAA)");//
		return 4
	}
	}

	// february, leap year
	if (b==2){
		// feb
		var g=parseInt(f/4)
		if (isNaN(g)) {
			//alert("Data Richiesta errata formato GGMMAAAA");//
		        return 5
		}

		if (d>29) {
			//alert("Data Richiesta errata formato GGMMAAAA");//
		        return 6
		}

		if (d==29 && ((f/4)!=parseInt(f/4))) {
			//alert("Data Richiesta l'anno non è bisestile !!! (formato GGMMAAAA)");//
		        return 7
		}
	}
   return 0
}

function validate( formname )
{
   var first = 0;
   if (checkObjects.length > 0)
   {
      for (i = 0; i < checkObjects.length; i++)
      {
          if( ( formname == null ) || ( formname == checkObjects[i].form.form.name ) )
          {
             validateObject = new Object();
             validateObject.form = checkObjects[i].form;
             validateObject.HTMLname = checkObjects[i].HTMLname;
             validateObject.val = checkObjects[i].form.value;
             validateObject.len = checkObjects[i].form.value.length;
             validateObject.min = checkObjects[i].min;
             validateObject.max = checkObjects[i].max;
             validateObject.obbligatorio = checkObjects[i].obbligatorio;
             validateObject.type = checkObjects[i].type;
			 validateObject.maxdigits = checkObjects[i].maxdigits ;
             //alert("[" + checkObjects[i].form.value + "]");
			 if ( validateObject.obbligatorio == 1 || validateObject.len > 0 )
             {
                if (validateObject.type == "num" )
                {
                   if ((validateObject.len <= 0) || (validateObject.type == "num" && isNaN(validateObject.val)))
                   {
                      errors += language['start'] + language['field'] + "'" +  validateObject.HTMLname + "'" +  language['require'] + language['num'] + "\n";
                   }
                   else if (validateObject.min && validateObject.max && (parseInt(validateObject.val) < validateObject.min || parseInt(validateObject.val) > validateObject.max))
                   {
                      errors += language['start'] + language['field'] + "'" +  validateObject.HTMLname + "'" +  language['require'] + language['min'] + validateObject.min + language['max'] + validateObject.max + "\n";
                   }
                   else if (validateObject.min && !validateObject.max && (parseInt(validateObject.val) < validateObject.min))
                   {
                      errors += language['start'] + language['field'] + "'" + validateObject.HTMLname + "'" + language['require'] + language['min'] + validateObject.min  + "\n";
                   }
                   else if (validateObject.max && !validateObject.min &&(parseInt(validateObject.val) > validateObject.max))
                   {
                      errors += language['start'] + language['field'] + "'" +  validateObject.HTMLname + "'" +  language['require'] + language['max'] + validateObject.max + "\n";
                   }
                   else if (!validateObject.min && !validateObject.max && validateObject.len <= 0)
                   {
                      errors += language['start'] + language['field'] + "'" +  validateObject.HTMLname + "'" +  language['require'] + "\n";
                   }
				}
                else if(validateObject.type == "date")
                {
                   err = checkdate( validateObject.val );
                   if ( err != 0 )
                   {
                      errors += language['start'] + language['field'] + "'" +  validateObject.HTMLname + "'" +  language['date'] + "\n";
                   }
                }
                else if(validateObject.type == "string")
                {
                   if (validateObject.min && validateObject.max && (validateObject.len < validateObject.min || validateObject.len > validateObject.max))
                   {
                      errors += language['start'] + language['field'] + "'" +  validateObject.HTMLname + "'" +  language['require'] + language['min'] + validateObject.min + language['minmax'] + validateObject.max+language['chars'] + "\n";
                   }
                   else if (validateObject.min && !validateObject.max && (validateObject.len < validateObject.min))
                   {
                      errors += language['start'] + language['field'] + "'" +  validateObject.HTMLname + "'" +  language['require'] + language['min'] + validateObject.min + language['chars'] + "\n";
                   }
                   else if (validateObject.max && !validateObject.min &&(validateObject.len > validateObject.max))
                   {
                      errors += language['start'] + language['field'] + "'" +  validateObject.HTMLname + "'" +  language['require'] + language['max'] + validateObject.max + language['chars'] + "\n";
                   }
                   else if (!validateObject.min && !validateObject.max && validateObject.len <= 0)
                   {
                      errors += language['start'] + language['field'] + "'" +  validateObject.HTMLname + "'" + language['require'] + "\n";
                   }
				   if(validateObject.val.length > validateObject.maxdigits)
				   {
				   	 errors += language['start'] + language['field'] + "'" +  validateObject.HTMLname + "' " +  language['toolong'] + " " + validateObject.maxdigits + " " +  language["chars"] + "\n";
				   }
				}
                else if(validateObject.type == "pivacf" || validateObject.type == "piva" || validateObject.type == "cf")
                {
                   if (validateObject.type == "pivacf" )
                   {
                      if( validateObject.len != 16 && validateObject.len != 11 )
                      {
                         errors += language['start'] + "Il campo P. IVA o C.f. è obbligatorio e deve essere esattamente 16 caratteri (per il codice fiscale) o 11 caratteri (per la partita iva)\n";
                      }
                      else if( validateObject.len == 16 )
                      {
                         if( check_cf( validateObject.val ) != true )
                         {
                            errors += language['start'] + language['field'] + "'" +  validateObject.HTMLname + "'" +  language['invalidm'] + "\n";
                         }
                      }
                      else
                      {
                         if( check_pi( validateObject.val ) != true )
                         {
                            errors += language['start'] + language['field'] + "'" +  validateObject.HTMLname + "'" +  language['invalidm'] + "\n";
                         }
                      }
                   }
                   else if (validateObject.type == "cf" )
                   {
                      if( validateObject.len != 16 )
                      {
                         errors += language['start'] + language['field'] + "'" +  validateObject.HTMLname + "'" +  language['require'] + language['exactly'] + 16 +language['chars'] + "\n";
                      }
                      else
                      {
                         if( check_cf( validateObject.val ) != true )
                         {
                            errors += language['start'] + language['field'] + "'" +  validateObject.HTMLname + "'" +  language['invalidm'] + "\n";
                         }
                      }
                   }
                   else if (validateObject.type == "piva" )
                   {  
                      if( validateObject.len != 11 )
                      {
                         errors += language['start'] + language['field'] + "'" +  validateObject.HTMLname + "'" +  language['require'] + language['exactly'] + 11 +language['chars'] + "\n";
                      }
                      else
                      {
                         if( check_pi( validateObject.val ) != true )
                         {
                            errors += language['start'] + language['field'] + "'" +  validateObject.HTMLname + "'" +  language['invalidf'] + "\n";
                         }
                      }
                   }
                } 
                else if(validateObject.type == "email")
                {
                   if ((validateObject.val.indexOf("@") == -1) || (validateObject.val.charAt(0) == ".") || (validateObject.val.charAt(0) == "@") || (validateObject.len < 6) || (validateObject.val.indexOf(".") == -1) || (validateObject.val.charAt(validateObject.val.indexOf("@")+1) == ".") || (validateObject.val.charAt(validateObject.val.indexOf("@")-1) == "."))
                   { 
                      errors += language['start'] + language['field'] + "'" +  validateObject.HTMLname + "'" +  language['email'] + "\n";
                   }
                }
             }
             if ( errors && ( first == 0 ) )
             {
					 first = validateObject.form;
             }
          } 
      }
   }
   if (checkRelations.length > 0)
   {
      for (i = 0; i < checkRelations.length; i++)
      {
         validateObject = new Object();
         validateObject.x1 = checkRelations[i].x1;
         validateObject.x2 = checkRelations[i].x2;
         validateObject.labelx1 = checkRelations[i].labelx1;
         validateObject.labelx2 = checkRelations[i].labelx2;
         validateObject.operatore = checkRelations[i].operatore;
         validateObject.tipo = checkRelations[i].tipo;
         if (validateObject.tipo == "num" )
         {
             if ( validateObject.operatore == ">"  && !( parseInt( validateObject.x1.value ) > parseInt( validateObject.x2.value ) ) )
             { 
                errors += language['start'] + language['field'] + "'" +  validateObject.labelx1 + "'" +  language['maggiore'] + "'" +  validateObject.labelx2 + "'" + "\n";    
             } 
             else if ( validateObject.operatore == ">="  && !( parseInt( validateObject.x1.value ) >= parseInt( validateObject.x2.value ) ) )
             { 
                errors += language['start'] + language['field'] + "'" +  validateObject.labelx1 + "'" +  language['maggioreuguale'] + "'" +  validateObject.labelx2 + "'" +  "\n";    
             } 
             else if ( validateObject.operatore == "<"  && !( parseInt( validateObject.x1.value ) < parseInt( validateObject.x2.value ) ) )
             { 
                errors += language['start'] + language['field'] + "'" +  validateObject.labelx1 + "'" +  language['minore'] + "'" +  validateObject.labelx2 + "'" +  "\n";    
             } 
             else if ( validateObject.operatore == "<="  && !( parseInt( validateObject.x1.value ) <= parseInt( validateObject.x2.value ) ) )
             { 
                errors += language['start'] + "'" +  language['field'] + validateObject.labelx1 + language['minoreuguale'] + "'" +  validateObject.labelx2 + "\n";    
             } 
         }
         else if(validateObject.tipo == "date")
         {
             if ( validateObject.operatore == ">"  && !( validateObject.x1.value > validateObject.x2.value ) )
             { 
                errors += language['start'] + language['field'] + "'" +  validateObject.labelx1 + "'" +  language['maggiore'] + "'" +  validateObject.labelx2 + "'" +  "\n";    
             } 
             else if ( validateObject.operatore == ">="  && !( validateObject.x1.value >= validateObject.x2.value ) )
             { 
                errors += language['start'] + language['field'] + "'" +  validateObject.labelx1 + "'" +  language['maggioreuguale'] + "'" +  validateObject.labelx2 + "'" +  "\n";    
             } 
             else if ( validateObject.operatore == "<"  && !( validateObject.x1.value < validateObject.x2.value ) )
             { 
                errors += language['start'] + language['field'] + "'" +  validateObject.labelx1 + "'" +  language['minore'] + "'" +  validateObject.labelx2 + "'" +  "\n";    
             } 
             else if ( validateObject.operatore == "<="  && !( validateObject.x1.value <= validateObject.x2.value ) )
             { 
                errors += language['start'] + language['field'] + "'" +  validateObject.labelx1 + "'" +  language['minoreuguale']  + "'" + validateObject.labelx2 + "'" +  "\n";    
             } 
         }
         else if(validateObject.tipo == "string")
         {
             if ( validateObject.operatore == ">"  && !( validateObject.x1.value > validateObject.x2.value ) )
             { 
                errors += language['start'] + language['field'] + "'" +  validateObject.labelx1 + "'" +  language['maggiore'] + "'" +  validateObject.labelx2 + "'" +  "\n";    
             } 
             else if ( validateObject.operatore == ">="  && !( validateObject.x1.value >= validateObject.x2.value ) )
             { 
                errors += language['start'] + language['field'] + "'" +  validateObject.labelx1 + "'" +  language['maggioreuguale'] + "'" +  validateObject.labelx2 + "'" +  "\n";    
             } 
             else if ( validateObject.operatore == "<"  && !( validateObject.x1.value < validateObject.x2.value ) )
             { 
                errors += language['start'] + language['field'] + "'" +  validateObject.labelx1 + "'" +  language['minore'] + "'" +  validateObject.labelx2 + "'" +  "\n";    
             } 
             else if ( validateObject.operatore == "=="  && !( validateObject.x1.value == validateObject.x2.value ) )
             { 
                errors += language['start'] + language['field'] + "'" +  validateObject.labelx1 + "'" +  language['uguale'] + "'" +  validateObject.labelx2 + "'" +  "\n";    
             } 
             else if ( validateObject.operatore == "<="  && !( validateObject.x1.value <= validateObject.x2.value ) )
             { 
                errors += language['start'] + language['field'] + "'" +  validateObject.labelx1 + "'" +  language['minoreuguale'] + "'" +  validateObject.labelx2 + "'" +  "\n";    
             } 
         }
          if ( errors && ( first == 0 ) )
          {
             first = validateObject.x1;
          } 

      }
   }
   if (errors)
   {
      alert(language["header"].concat("\n" + errors));
      errors = "";
      //first.focus();
		//alert(false);
      return false;
   } 
   else
   {
     return true;
   }
}





;


;
;
;


;
;
;

