//   -------------- 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"]		= " Deve essere compreso tra ";
language["max"]		= " e non pu˜ superare il valore ";
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 ";


function addfield(x, type, obbligatorio, HTMLname, min, max )
{
   removefield( x );
   var p;
   var i;
   n = x.name;
   eval("V_"+n+" = new formResult(x, type, obbligatorio, HTMLname, min, max );");
   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 )
{
   this.form = form;
   this.type = type;
   this.obbligatorio = obbligatorio;
   this.HTMLname = HTMLname;
   this.min  = min;
   this.max  = max;
}

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;
             //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";
                   }             
                } 
                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();
      return false;
   } 
   else
   {
     return true;
   }
}

function showhide(layer_ref, show)
{
	if( show )
	{
		state = "block";
	}
	else
	{
		state = "none";
	}

	if (document.getElementById)
	{ // DOM3 = IE5, NS6
		document.getElementById(layer_ref).style.display = state;
	}
	else {
		if (document.layers) { // Netscape 4
		eval( "document." + layer_ref + ".display = state");
	}
	else { // IE 4
		eval( "document.all." + layer_ref + ".style.display = state" );
	}
}
}