String.prototype.trim = function() {
	if (this.length == 0) {
		return "";
    } else {
		return(this.replace(/^\s*([\s\S]*\S+)\s*$|^\s*$/,"$1"));
    }
}

function conferma(msg, azione){
  if(confirm(msg)){
    location.href = azione;
  }
}

function confermaTop(msg, azione){
  if(confirm(msg)){
    window.top.location.href = azione;
  }
}

function IsEmpty(obj, label) {
	var TF = false;
	var CmpSel = "compilato";
  	switch (obj.type) {
    case "text":
    	if (obj.value.trim().length == 0) TF = true;
    	break;
    case "textarea":
    	if (obj.value.trim().length == 0) TF = true;
    	break;
    case "checkbox":
    	if (!obj.checked) {
				 TF = true;
				 CmpSel = "selezionato";
			}
    	break;
    case "select-one":
    	if (obj.selectedIndex == 0) {
				 TF = true;
				 CmpSel = "selezionato";
			}
  }
  if (TF) {
  	return "Il campo \"" + label + "\" deve essere " + CmpSel + "\n";
  } else {
   	return "";
  }
}

function IsEmptyRadio(f, objname, label) {
	var TF = true;
	for (var i=1; i<f.elements.length-3; i++) {
			if ((f.elements[i].type == "radio") && (f.elements[i].name == objname)) {
				 if (f.elements[i].checked) {
				 		TF = false;
						break;
				 }
			}
	}
  if (TF) {
  	return "Il campo \"" + label + "\" deve essere selezionato\n";
  } else {
   	return "";
  }
}

function ContaQuanti(pos, str, car, q) {
	// serve per "EmailOK"
	var CQ = str.indexOf(car,pos);
	if (CQ == -1) {
		return(q);
	} else {
		return(ContaQuanti(CQ+1,str,car,q+1));
	}
}

function EmailOK(obj, label) {
	var OK = true;
	if (IsEmpty(obj,"") != "") {
		OK = false;
	} else {
		var valore = obj.value.trim();
		if (ContaQuanti(0,valore,"@",0) == 1) {
			var pAt = valore.indexOf("@");
			var pP = valore.indexOf(".");
			if ((pP > 0) && (pP < (valore.length - 2))) {
				var pPprec = -1;
				pP = 0;
				do {
					pP = valore.indexOf(".",pP);
					if (pP == (-1)) {
						break;
					} else {
						if ((pP == pAt+1) || (pP == pAt-1) || (pPprec == (pP-1) || (pP > (valore.length - 3)))) {
							OK = false;
							break;
						} else {
							pPprec = pP;
							pP += 1;
						}
					}
				} while (pP < valore.length);
				if (valore.indexOf(".",pAt) == -1) OK = false;
			} else {
				OK = false;
			}
		} else {
			OK = false;
		}
	}
    if (OK) {
    	return "";
    } else {
    	return "Il campo \"" + label + "\" non sembra essere un indirizzo e-mail valido\n";
    }
}

function PosNumLen(obj, Ncifre, label) {
	var OK = true;
	if (IsEmpty(obj,"") != "") {
		OK = false;
	} else {
		var valore = obj.value.trim();
		if (isNaN(valore)) {
			OK = false;
		} else {
			if (parseInt(valore,10) <= 0) {
				OK = false;
			} else {
            	if ((Ncifre > 0) && (valore.length != Ncifre)) OK = false;
			}
		}
	}
    if (OK) {
    	return "";
    } else {
    	if ((Ncifre) == 1) {
        	return "Il campo \"" + label + "\" deve essere di 1 cifra\n";
        } else {
    		return "Il campo \"" + label + "\" deve essere di " + Ncifre + " cifre\n";
        }
    }
}

function IntMinMax(obj, min, max, label) {
	var OK = true;
	if (IsEmpty(obj,"") != "") {
		OK = false;
	} else {
		var valore = obj.value.trim();
		if ((isNaN(valore)) || (valore.indexOf(".") > -1)) {
			OK = false;
		} else {
        	valore = parseInt(valore,10);
            if ((valore < min) || (valore > max)) OK = false;
		}
	}
    if (OK) {
    	return "";
    } else {
    	return "Il valore del campo \"" + label + "\" deve essere un numero intero compreso tra " + min + " e " + max + "\n";
    }
}

function FloatMinMax(obj, min, max, label) {
	var OK = true;
	if (IsEmpty(obj,"") != "") {
		OK = false;
	} else {
		var valore = obj.value.trim();
		if (isNaN(valore)) {
			OK = false;
		} else {
        	valore = parseFloat(valore);
            if ((valore < min) || (valore > max)) OK = false;
		}
	}
    if (OK) {
    	return "";
    } else {
    	return "Il valore del campo \"" + label + "\" deve essere compreso tra " + min + " e " + max + "\n";
    }
}

function GMA_OK(valore, Ncifre) {
	var OK = true;
	if (valore.trim() == "") {
		OK = false;
	} else {
		if (isNaN(valore)) {
			OK = false;
		} else {
			if (parseInt(valore,10) <= 0) {
				OK = false;
			} else {
      	if ((Ncifre > 0) && (valore.length != Ncifre)) OK = false;
			}
		}
	}
	return OK;
}

function ValidDate(obj, SplCar, label) {
	var valore = obj.value.trim();
	var ArrDataIn = valore.split(SplCar);
	var OK = true;
	if (ArrDataIn.length == 3) {
		if (GMA_OK(ArrDataIn[0],2,"") && GMA_OK(ArrDataIn[1],2,"") && GMA_OK(ArrDataIn[2],4,"")) {
			var g = parseInt(ArrDataIn[0],10);
			var m = parseInt(ArrDataIn[1],10);
			var a = parseInt(ArrDataIn[2],10);
      		var gm = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
      		if (a%4 == 0) gm[1] = 29;
      		if ((m<1) || (m>12)) {
      			OK = false;
      		} else {
      			if ((g<1) || (g>gm[m-1])) OK = false;
      		}
		} else {
			OK = false;
		}
	} else {
		OK = false;
	}
    if (OK) {
    	return "";
    } else {
    	return "Il campo \"" + label + "\" non contiene una data valida\n";
    }
}

function ValidDateMinMax(obj, DataMin, DataMax, SplCar, label) {
	var OK = true;
    if (ValidDate(obj,SplCar,"") == "") {
			var valore = obj.value.trim();
    	var ArrData;
      ArrData = valore.split(SplCar);
      valore = parseInt(ArrData[2] + ArrData[1] + ArrData[0], 10);
      ArrData = DataMin.split(SplCar);
      var DataMinR = parseInt(ArrData[2] + ArrData[1] + ArrData[0], 10);
      ArrData = DataMax.split(SplCar);
      var DataMaxR = parseInt(ArrData[2] + ArrData[1] + ArrData[0], 10);
      if ((valore < DataMinR) || (valore > DataMaxR)) OK = false;
    } else {
    	return "Il campo \"" + label + "\" non contiene una data valida compresa tra " + DataMin + " e " + DataMax + "\n";
    }
    if (OK) {
    	return "";
    } else {
    	return "Il valore del campo \"" + label + "\" deve contenere una data compresa tra " + DataMin + " e " + DataMax + "\n";
    }
}

function SubmitFormInsert(f) {
	if (CheckForm(f)) {
		for (var i=0; i<f.elements.length; i++) {
			switch (f.elements[i].type) {
			case "text":
				f.elements[i].value += " ";
				break;
			case "textarea":
				f.elements[i].value += " ";
				break;
			case "checkbox":
				if (!f.elements[i].checked) {
					f.elements[i].value = "N";
					f.elements[i].checked = true;
				}
			}
		}
		f.AZIONE.value = "SAVE";
		f.submit();
	}
}

function SubmitFormSearch(f) {
	var OK = false;
	for (var i=1; i<f.elements.length-3; i++) {
		OK = IsEmpty(f.elements[i],"") == "";
    	if (OK) break;
	}
	if (OK) {
		f.AZIONE.value = "SEARCH";
		f.submit();
    } else {
    	alert("Compilare almeno un campo per eseguire la ricerca");
    }
}

function SubmitFormNew(f) {
	f.AZIONE.value = "NEW";
	f.submit();
}

function OpenWin(url,winname,w,h) {
	window.open(url,winname,"width=" + w + ",height=" + h + ",left=20,top=20,resizable=1,scrollbars=1;status=0,location=0");
}

function IsCompiled(field) {
	return (field.trim().length);
}

function OpenTblFld(TBL,CODE,DESCR,INPCDNAME,INPDSNAME,FLDADD,RICINT,INPCDVAL,INPDSVAL,WINNAME,COLNAME) {
	if (IsCompiled(INPCDVAL) || IsCompiled(INPDSVAL)) {
		var QS = "";
		QS += ("?TBL=" + TBL + "\n");
		QS += ("&CODE=" + CODE + "\n");
		QS += ("&DESCR=" + DESCR + "\n");
		QS += ("&INPCDNAME=" + INPCDNAME + "\n");
		QS += ("&INPDSNAME=" + INPDSNAME + "\n");
		if (IsCompiled(INPCDVAL)) QS += ("&INPCDVAL=" + INPCDVAL + "&INPDSVAL=" + "\n");
		if (IsCompiled(INPDSVAL)) QS += ("&INPCDVAL=&INPDSVAL=" + INPDSVAL + "\n");
		QS += ("&FLDADD=" + FLDADD);
		QS += ("&WINNAME=" + WINNAME);
		QS += ("&COLNAME=" + COLNAME);
		QS += ("&RICINT=" + RICINT);
		idw = window.open("getTblFld.jsp" + QS, "getTblFld", "width=1,height=1,left=0,top=0,resizable=yes,status=0,location=no,scrollbars=yes");
		idw.focus();
	}
}

function DoSearchTblFld(frm,fld) {
	var fldname = "";
	if (fld.name.substring(fld.name.length - 5) == "_DESC") {
    	fldname = fld.name.substring(0,fld.name.length - 5);
        eval("window.document." + frm.name + "." + fldname + ".value = \"\"");
    } else {
    	fldname = fld.name;
        eval("window.document." + frm.name + "." + fldname + "_DESC.value = \"\"");
    }
    SearchTblFld(frm,fldname);
}


