var RexObblig = "";
var Rex = new Array();
Rex["Alpha"]  = "^[a-zA-Z]*$";
Rex["AlphaNum"]  = "^[a-zA-Z0-9_]*$";
Rex["Email"] = "^[\\w\\.=-]+@[\\w\\.-]+\\.[a-zA-Z]{2,3}$";
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})?)?$";
Rex["Url"] = "";//"^http[s]?://[\\w\\.-]+[\\w]+\\.[a-zA-Z]{2,4}$";

function RexErr(tp,fn){
	var v = '0';
	if (tp=="Alpha") v = "Il campo "+fn+" deve contenere soltanto lettere.\n\n";
	else if (tp=="AlphaNum") v = "Il campo "+fn+" non deve contenere spazi o caratteri speciali.\n\n";
	else if (tp=="Date") v = "Il campo "+fn+" deve contenere una data valida.\n\n";
	else if (tp=="Email") v = "Il campo "+fn+" deve contenere un indirizzo email valido.\n\n";
	else if (tp=="Int") v = "Il campo "+fn+" deve contenere un numero intero.\n\n";
	else if (tp=="Num") v = "Il campo "+fn+" deve contenere un numero.\n\n";
	else if (tp=="Obblig") v = "Il campo "+fn+" e\' obbligatorio.\n\n";
	else if (tp=="Time") v = "Il campo "+fn+" deve contenere un orario in formato hh:mm o hh:mm:ss (es. 12:47 oppure 12:47:10)\n\n";
	else if (tp=="Url") v = "Il campo "+fn+" deve contenere un indirizzo web valido (es. http://www.guidasicilia.it)\n\n";
	return v;
}

function RexVal(){
  var i,obj,tp,fv,fn,r;
  var err="";
  var args=RexVal.arguments;

  var obblig_count = 0;
  var obblig_current = "";
  for (i=0; i<(args.length-2); i+=3) {
	obj = args[i];
	tp = args[i+1];
	r = args[i+2];
	fv = (obj.value).toLowerCase();
	fn = (r!='1') ? r : (obj.name).replace(/_/g," ");
	if (fv==null) alert('il campo ' + obj + ' non esiste');

	if (r && fv.length<=0) obblig_current += ", " + fn;
	else if (tp){
		if (tp!="Date"){
		  trex = new RegExp(Rex[tp]);
		  t = eval(trex.test(fv));
		  if (fv.length>0 && !(t)) err += RexErr(tp,fn);
		}
		else if (fv!=''){
		  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++;
		  else {
		  	  var sprt = fv.substring(4,5) + fv.substring(7,8);
			  if (sprt!="--" && sprt!="//" && sprt!="..") dataerr++;
			  aa = fv.substring(0,4);
			  mm = fv.substring(5,7);
			  gg = fv.substring(8,10);
			  if ( isNaN(gg) || isNaN(mm) || isNaN(aa) ) dataerr++;
			  if ( mm > 12 || mm < 1)  dataerr++;
			  if (aa % 4 == 0) bis = !(aa % 100 == 0  && aa % 1000 != 0 );
			  max_gg = gg_mm[mm-1];
			  if (mm == 2 && bis) max_gg++;
			  if ( gg > max_gg || gg < 1 )  dataerr++;
		  }
		  if (dataerr>0) err+= RexErr(tp,fn);
		}
	  }
  }
  if (RexObblig!="") {
  	RexObblig = RexObblig.substring(2);
	obblig_count += (RexObblig.split(",").length);
  }
  if (obblig_current!="") {
  	obblig_current = obblig_current.substring(2);
	obblig_count += (obblig_current.split(",").length);
  }
  if (obblig_count>1) err +=  "I seguenti campi sono obbligatori:\n" + RexObblig + ((RexObblig=='')?'':', ') + obblig_current +"\n\n";
  else if (obblig_count==1) err +=  "Il campo " + RexObblig + obblig_current + " e\' obbligatorio\n";

  return err;
}

function lengthInput(obj,massimo){
  var ol = (obj.value).length;
  if (ol>massimo) obj.value = (obj.value).slice(0,massimo);
}

function valueOfRadio(obj){
	if (obj){
		var vl = 0;
		if (obj.length==1 || isNaN(obj.length)) {
			if (obj.checked) vl = obj.value;
		}
		else for (i=0;i<obj.length;i++) if (obj[i].checked) vl = obj[i].value;
		return vl;
	}
}

function checkedRadio(obj,vl){
	if (obj){
		if (obj.length==1) obj.checked;
		else for (i=0;i<obj.length;i++) if (obj[i].value == vl) obj[i].checked = true;
	}
}

function disabledRadio(obj,vl,b){
	if (obj){
		if (obj.length==1) obj.disabled = b;
		else for (i=0;i<obj.length;i++) if (obj[i].value == vl) obj[i].disabled = b;
	}
}

function valueOfSelect(obj){
	var vl = "";
	for (i=0;i<obj.length;i++) if (obj[i].selected) vl += "," + obj[i].value;
	if (vl!="") vl = vl.substring(1);
	return vl;
}

function textOfSelect(obj){
	var vl = "";
	for (i=0;i<obj.length;i++) if (obj[i].selected) vl = obj[i].text;
	if (vl==null) vl = "";
	return vl;
}

function singleSelect(obj){
	obj.selectedIndex = obj.selectedIndex;
}

function multiSelect(obj,vl){
	var slc = vl.split(",");
	for (j=0;j<slc.length;j++) for (i=0;i<obj.length;i++) if (obj.options[i].value == slc[j]) obj.options[i].selected = true;
}

function trim(str) {
	return str.replace(/^\s*([\s\S]*\S*)\s*$|^\s*$/,'$1'); // replace(/\s+$|^\s+/g,"")
//    s = str.replace(/^(\s)*/, '');
//    s = s.replace(/(\s)*$/, '');
//    return s;
}