// inserire l'include nel tag head:
// <script language="JavaScript" src="/lib/js/validate.js" type="text/javascript"></script>
// Nel tag form mettere: onsubmit="return e3_validate_form(this)"
// oppure onsubmit="return e3_validate_form(document.forms['nomeForm'])"
// ________________________________________ validazione campi form

function e3_validate_findobj(n, d) { //v4.0
  var p,i,x;  
  
  if(!d) d=document; 
  if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; 
    n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; 
  for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=e3_validate_findobj(n,d.layers[i].document);
  if(!x && document.getElementById) x=document.getElementById(n); 
  return x;
}


function e3_validate_getFieldName(field) {
  var name;
	
  name=field.getAttribute("title");
  if ((name=="") || (name==null))
    name=field.getAttribute("id");
  if ((name=="") || (name==null))
    name=field.getAttribute("name");
  if ((name=="") || (name==null))
    name="";
  return name;
}


function e3_validate_validateField(field) { //v4.0
  var i, btn, errors='';
  var subtype;
  var required;
  var type;
	var minValue;
	var maxValue;
  var data1;
  var data2;
  var data3;
  var data4;
  var equalsToName;
  var equalsTo;
  var name;
	var minLength;
	var maxLength;
  
  name=e3_validate_getFieldName(field);  
  required=parseInt(field.getAttribute('required'));
	//Se required non specificato allora = falso
	if (isNaN(required)) 
	  required=false;

  //Se il campo non e' obbligatorio ed e' vuoto esce	
  if ((!required) && (field.value=="")) 
	  return true;
  
  equalsToName=field.getAttribute('equalsTo');
  if (equalsToName!=null) {
    equalsTo=e3_validate_findobj(equalsToName);
	 if (equalsTo.value!=field.value) {
	   errors += "- " + name + " diverso da " + e3_validate_getFieldName(equalsTo) + ".\n";
	 }
  }
	//Controlla campo obbligatorio
  if ((required) && (field.value=="")) {
   errors += "- " + name + " obbligatorio.\n";
  }
	
  //Controlla checkbox obbligatoria
	if ((required) && (field.type.toUpperCase()=="CHECKBOX")) {
		if (!field.checked) {
			errors += "- " + name + " obbligatorio.\n";
		}
	}

  type=field.getAttribute('subtype');
  minValue=parseInt(field.getAttribute('min'));
  maxValue=parseInt(field.getAttribute('max'));
  data1=parseInt(field.getAttribute('data1'));
  data2=parseInt(field.getAttribute('data2'));
  data3=parseInt(field.getAttribute('data3'));
  data4=parseInt(field.getAttribute('data4'));

	//Controllo lunghezza minima e massima
	minLength=parseInt(field.getAttribute('minLength'));
	if (minLength==0)
	  minLength=parseInt(field.getAttribute('minlength'));
	maxLength=parseInt(field.getAttribute('maxLength'));
	if (maxLength==0)
	  maxLength=parseInt(field.getAttribute('maxlength'));
	
 	if ((minLength!=0) && (field.value.length<minLength)) {
	  errors+="- " + name + " troppo corto, min " + minLength + " caratteri.\n";
	}
 	if ((maxLength!=0) && (field.value.length>maxLength)) {
	  errors+="- " + name + " troppo lungo, max " + maxLength + " caratteri.\n";
	}
	
  switch (type) {
    //eMail
    case 'email': {
			var filter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9])+$/;
			if (!filter.test(field.value)) errors+="- " + name + " non e\' indirizzo e-mail.\n";
    	break;}
    //Numero Intero
    case 'int': {
			//N.B. parseInt("1.2abc")   Returns 1.2
      var valueAux=parseInt(field.value);
      if (isNaN(valueAux) || (valueAux+""!=field.value)) errors+="- " + name + " non e\' un numero.\n";
    	if ((isNaN(minValue)) || (isNaN(maxValue))) break;
    	if ((field.value<minValue) || (field.value>maxValue)) errors+="- " + name + " deve essere compreso tra " + minValue + " e " + maxValue + ".\n";
    	break;}
  //Numero Reale
    case 'real': {
			//N.B. parseFloat("1.2abc")   Returns 1.2
      //var valueAux=parseFloat(field.value);
      //if (isNaN(valueAux) || (valueAux+""!=field.value))
			var filter  = /(^-?\d\d*\,\d*$)|(^-?\d\d*$)|(^-?\,\d\d*$)/;
			if (!filter.test(field.value)) 
			  errors+="- " + name + " non e\' un numero.\n";
			else
//				field.value=parseFloat(field.value); //parseFloat("1.2abc")   // Returns 1.2.
    	if ((isNaN(minValue)) || (isNaN(maxValue))) break;
    	if ((field.value<minValue) || (field.value>maxValue)) errors+="- " + name + " deve essere compreso tra " + minValue + " e " + maxValue + ".\n";
    	break;}
  //Data/Ora
    case 'datetime': {
    	if (isNaN(Date.parse(field.value))) errors+="- " + name + " non e\' una data.\n"; 
    	break;}
  }

	//Mostra errori
  if (errors) 
	  alert(errors);

	//Ritorna true se tutto ok
  return (errors == '');
}


function e3_validate_form(form)
{
  var i;
  var elem;
	var Operazione;
	var isValid;

//Esegue la validazione solo durante Avanti,Indietro e Salva
	elem=form.elements["Operazione"];
	if (typeof(elem)!="undefined") {
		Operazione=parseInt(elem.value);
		if (!isNaN(Operazione)) {
			if ((Operazione!=10) && (Operazione!=20) && (Operazione!=30)) 
				return true;
		}
	}
//Se uguale a Avanti,Indietro o Salva valida campi			
  for (i=0;i<form.elements.length;++i) {
  	elem=form.elements[i];
//Ignora campi hidden
    if (elem.type=="hidden") continue;
//Valida campo
    isValid=e3_validate_validateField(elem);
//Se il campo non e' valido imposta il focus ed esce
		if (!isValid) {
			if (typeof(elem.focus)=="object") {
			  elem.focus();
			}
			return false;
		}
  }

  return true;
}

// ________________________________________ validazione campi form fine
