function RexVal(){ // include tutti i controlli impossibili e inimmaginabili
var fmnm,i,obj,tp,fv,fn,err="",r,args=RexVal.arguments;
  fmnm="document."+args[0];
  Rex = new Array();
  RexErr = new Array();
  for (i=1; i<(args.length-2); i+=3) {	
	obj=args[i];
	tp=args[i+1];
	r=args[i+2];
	fv = eval(fmnm+"."+obj+".value");
	fn = eval(fmnm+"."+obj+".name");

	Rex["Alpha"]  = "^[a-zA-Z]*$";
	Rex["AlphaNum"]  = "^\\w*$";
	Rex["Email"] = "^[\\w\\.=-]+@[\\w\\.-]+\\.[a-z, A-Z]{2,3}$";
	Rex["File"]  = "^\\w{1,8}\\.\\w{3}$";
	Rex["Img"] = "^\\w{1,8}\\.(gif|jpg)$";
	Rex["Int"]  = "(^-?\\d\\d*$)";	
	Rex["Num"]  = "(^-?\\d\\d*\\.\\d*$)|(^-?\\d\\d*$)|(^-?\\.\\d\\d*$)";
	Rex["Time"] = "^([1-9]|1[0-2]):[0-5]\\d(:[0-5]\\d(\\.\\d{1,3})?)?$";

	RexErr["Alpha"]  = "Il campo "+fn+" deve contenere soltanto lettere.\n";
	RexErr["AlphaNum"]  = "Il campo "+fn+" deve contenere soltanto numeri o lettere.\n";
	RexErr["Date"] = "Il campo "+fn+" deve contenere una data valida. (es. 01/01/2001)\n";
	RexErr["Email"]  = "Il campo "+fn+" deve contenere un indirizzo email valido.\n";
	RexErr["File"]  = "Il campo "+fn+" deve contenere un nome di un file.\n";
	RexErr["Img"] = "Il campo "+fn+" deve contenere un immagine di tipo gif o jpg.\n";
	RexErr["Int"]  = "Il campo "+fn+" deve contenere un numero intero.\n";
	RexErr["Num"]  = "Il campo "+fn+" deve contenere un numero.\n";
	RexErr["Obblig"] = "Il campo "+fn+" è obbligatorio.\n";
	RexErr["Time"] = "Il campo "+fn+" deve contenere un orario in formato hh:mm o hh:mm:ss (es. 12:47 oppure 12:47:10)\n";


	if(r && fv.length<=0) err+= RexErr["Obblig"]; // il campo è obbligatorio
	else if(tp){
		if (tp!="Date"){ // il campo non è una data
		  trex = new RegExp(Rex[tp]);
		  t = eval(trex.test(fv));
		  if(fv.length>0 && !(t)) err+= RexErr[tp];
		  }
		else { // il campo è una data
		  var gg_mm = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
		  var k=0,j=0,dataerr=0,bis;
		  if (fv.length<10) dataerr++;
		  for (j=0;j<10;j++) if (fv.substring(j,j+1)=="/") k++;
		  if (k > 2) dataerr++;
		  if (fv.substring(2,3)!="/" || fv.substring(5,6)!="/") dataerr++;
		  aaaa = fv.substring(6,10);
		  mm = fv.substring(3,5);
		  gg = fv.substring(0,2);
		  if ( isNaN(gg) || isNaN(mm) || isNaN(aaaa) ) dataerr++;
		  if ( mm > 12 || mm < 1)  dataerr++;
		  if (aaaa % 4 == 0){
			bis=true;
			if (aaaa % 100 == 0  && aaaa % 1000 != 0 ) bis=false;
			}
		  max_gg=gg_mm[mm-1];
		  if (mm == 2 && bis == true) {max_gg++};
		  if ( gg > max_gg || gg <1 )  dataerr++;
		  if (dataerr>0) err+= RexErr[tp];
		  }
	    }
 	}
  return err;
}

function LengthMax(obj,nm){ // controlla che il value di obj non contenga + di nm caratteri
  var ol = (obj.value).length;
  if(ol>nm)obj.value = (obj.value).slice(0,nm);
}

function ClearText(testo) { // sostituisce gli apici doppi e singoli coi rispettivi codici di escape

		var pos = testo.indexOf("'");
		while (pos > -1){
			testo = testo.substring(0,pos)+"&lsquo;"+testo.substring(pos+1);
			pos = testo.indexOf("'");
		}
		pos = testo.indexOf("\"");
		while (pos > -1){
			testo = testo.substring(0,pos)+"&quot;"+testo.substring(pos+1);
			pos = testo.indexOf("\"");
		}
	 return testo;

}
