function trim(s){while(s.substring(0,1)==' '){s=s.substring(1,s.length);}
while(s.substring(s.length-1,s.length)==' '){s=s.substring(0,s.length-1);}
return s;}
function IsValidDate(objDate,sFormat)
{sDate=objDate.value;if((sDate=="")||(sDate==" "))return true;var sLang="";var nSize=0;var sTempDate="";var nDay=0,nMonth=0,nYear=0;var sDay="",sMonth="",sYear="";var bIsLeapYear=false;var bOk=true;var bDebug=true;var errDate="Data Errata";var errDateLen="Lunghezza Data errata";var errMonth="Mese errato";var errDay="Giorno Errato";var errYear="Anno Errato";var errDateFormat="Formato Data Errato";var sErrorMsg=errDate+":\n";var sLangTemp="";var errNotNumeric="Valore Non Numerico";if(sFormat=="dd.MM.yyyy")
{sLang="DE";}
else if(sFormat=="yyyy-MM-dd")
{sLang="DE8601";}
else if(sFormat=="MM/dd/yyyy")
{sLang="EN";}
else if(sFormat=="dd/MM/yyyy")
{sLang="ID";}
else
{{sErrorMsg+=errDateFormat+"\n";}
bOk=false;}
nSize=sDate.length;if(nSize<5)
{bOk=false;}else{if((nSize==5)||(nSize==7)||(nSize==9))
{sDate="0"+sDate;nSize=sDate.length;}
if((nSize==8)&&(sLang=="DE"))
{if(sDate.substr(2,1)==".")
{nSize=nSize+1;}}
if((nSize==8)&&(sLang=="DE8601"))
{if(sDate.substr(2,1)=="-")
{nSize=nSize+1;}}
if((nSize==8)&&((sLang=="EN")||(sLang=="ID")))
{if(sDate.substr(2,1)=="/")
{nSize=nSize+1;}}
if(sLang=="ID"){sLangTemp="ID";sLang="DE";}else{sLangTemp="";}
switch(nSize)
{case 0:break;case 6:{if(isNaN(sDate)==true)
{sErrorMsg+=errNotNumeric+"\n";}
else
{switch(sLang)
{case"DE":{nDay=parseInt(sDate.substr(0,2),10);nMonth=parseInt(sDate.substr(2,2),10);nYear=parseInt(sDate.substr(4,2),10);if(nYear<20)
{nYear=nYear+2000;}
else
{nYear=nYear+1900;}
break;}
case"DE8601":{nYear=parseInt(sDate.substr(0,2),10);nMonth=parseInt(sDate.substr(2,2),10);nDay=parseInt(sDate.substr(4,2),10);if(nYear<20)
{nYear=nYear+2000;}
else
{nYear=nYear+1900;}
break;}
case"EN":{nMonth=parseInt(sDate.substr(0,2),10);nDay=parseInt(sDate.substr(2,2),10);nYear=parseInt(sDate.substr(4,2),10);if(nYear<20)
{nYear=nYear+2000;}
else
{nYear=nYear+1900;}
break;}
default:break;}}
break;}
case 8:{if(isNaN(sDate)==true)
{if(bDebug)
{sErrorMsg+=errNotNumeric+"\n";}
bOk=false;}
else
{switch(sLang)
{case"DE":{nDay=parseInt(sDate.substr(0,2),10);nMonth=parseInt(sDate.substr(2,2),10);nYear=parseInt(sDate.substr(4,4),10);break;}
case"DE8601":{nYear=parseInt(sDate.substr(0,4),10);nMonth=parseInt(sDate.substr(4,2),10);nDay=parseInt(sDate.substr(6,2),10);break;}
case"EN":{nMonth=parseInt(sDate.substr(0,2),10);nDay=parseInt(sDate.substr(2,2),10);nYear=parseInt(sDate.substr(4,4),10);break;}
default:break;}}
break;}
case 9:{switch(sLang)
{case"DE":{nDay=parseInt(sDate.substr(0,2),10);nMonth=parseInt(sDate.substr(3,2),10);nYear=parseInt(sDate.substr(6,2),10);if(nYear<20)
{nYear=nYear+2000;}
else
{nYear=nYear+1900;}
break;}
case"DE8601":{nYear=parseInt(sDate.substr(0,2),10);nMonth=parseInt(sDate.substr(3,2),10);nDay=parseInt(sDate.substr(6,2),10);if(nYear<20)
{nYear=nYear+2000;}
else
{nYear=nYear+1900;}
break;}
case"EN":{nMonth=parseInt(sDate.substr(0,2),10);nDay=parseInt(sDate.substr(3,2),10);nYear=parseInt(sDate.substr(6,2),10);if(nYear<20)
{nYear=nYear+2000;}
else
{nYear=nYear+1900;}
break;}
default:break;}
break;}
case 10:{switch(sLang)
{case"DE":{nDay=parseInt(sDate.substr(0,2),10);nMonth=parseInt(sDate.substr(3,2),10);nYear=parseInt(sDate.substr(6,4),10);break;}
case"DE8601":{nYear=parseInt(sDate.substr(0,4),10);nMonth=parseInt(sDate.substr(5,2),10);nDay=parseInt(sDate.substr(8,2),10);break;}
case"EN":{nMonth=parseInt(sDate.substr(0,2),10);nDay=parseInt(sDate.substr(3,2),10);nYear=parseInt(sDate.substr(6,4),10);break;}
default:break;}
break;}
default:{if(bDebug)
{sErrorMsg+=errDateLen+"\n";}
bOk=false;}
break;}
if(nYear%400==0)
{bLeapYear=true;}
else if(nYear%100==0)
{bLeapYear=false;}
else if(nYear%4==0)
{bLeapYear=true;}
else
{bLeapYear=false;}
if((nYear<1800)||(nYear>9999))
{if(bDebug)
{sErrorMsg+=errYear+"\n";}
bOk=false;}
if((nMonth<1)||(nMonth>12))
{if(bDebug)
{sErrorMsg+=errMonth+"\n";}
bOk=false;}
if((nDay>=1)&&(nDay<=31))
{switch(nMonth)
{case 1,3,5,7,8,10,12:{break;}
case 2:{if((bLeapYear==true)&&(nDay<=29))
{}
else
{if(nDay<=28)
{}
else
{if(bDebug)
{sErrorMsg+=errDay+"\n";}
bOk=false;}}
break;}
case 4,6,9,11:{if(nDay<=30)
{}
else
{if(bDebug)
{sErrorMsg+=errDay+"\n";}
bOk=false;}
break;}
default:{}}}
else
{if(bDebug)
{sErrorMsg+=errDay+"\n";}
bOk=false;}}
if(bOk)
{sDay="";if(nDay<10)
{sDay='0'+nDay.toString(10);}
else
{sDay=nDay.toString(10);}
sMonth="";if(nMonth<10)
{sMonth='0'+nMonth.toString(10);}
else
{sMonth=nMonth.toString(10);}
sYear=nYear.toString(10);if(sLangTemp=="ID")sLang="ID";if(sLang=="DE"){objDate.value=sDay+"."+sMonth+"."+sYear;}else if(sLang=="DE8601"){objDate.value=sYear+"-"+sMonth+"-"+sDay;}else if(sLang=="EN"){objDate.value=sMonth+"/"+sDay+"/"+sYear;}else if(sLang=="ID"){objDate.value=sDay+"/"+sMonth+"/"+sYear;}else{objDate.value="";}
return true;}else{return false;}}
function Validator(frmname)
{this.formobj=document.forms[frmname];if(!this.formobj)
{alert("BUG: couldnot get Form object "+frmname);return;}
if(this.formobj.onsubmit)
{this.formobj.old_onsubmit=this.formobj.onsubmit;this.formobj.onsubmit=null;}
else
{this.formobj.old_onsubmit=null;}
this.formobj.onsubmit=form_submit_handler;this.addValidation=add_validation;this.setAddnlValidationFunction=set_addnl_vfunction;this.clearAllValidations=clear_all_validations;}
function set_addnl_vfunction(functionname)
{this.formobj.addnlvalidation=functionname;}
function clear_all_validations()
{for(var itr=0;itr<this.formobj.elements.length;itr++)
{this.formobj.elements[itr].validationset=null;}}
function form_submit_handler()
{for(var itr=0;itr<this.elements.length;itr++)
{if(this.elements[itr].validationset&&!this.elements[itr].validationset.validate())
{return false;}}
if(this.addnlvalidation)
{str=" var ret = "+this.addnlvalidation+"()";eval(str);if(!ret)return ret;}
return true;}
function add_validation(itemname,descriptor,errstr)
{if(!this.formobj)
{alert("BUG: the form object is not set properly");return;}
var itemobj=this.formobj[itemname];if(!itemobj)
{alert("BUG: Couldnot get the input object named: "+itemname);return;}
if(!itemobj.validationset)
{itemobj.validationset=new ValidationSet(itemobj);}
itemobj.validationset.add(descriptor,errstr);}
function ValidationDesc(inputitem,desc,error)
{this.desc=desc;this.error=error;this.itemobj=inputitem;this.validate=vdesc_validate;}
function vdesc_validate()
{if(!V2validateData(this.desc,this.itemobj,this.error))
{if(this.itemobj.type!="hidden"){this.itemobj.focus();}
return false;}
return true;}
function ValidationSet(inputitem)
{this.vSet=new Array();this.add=add_validationdesc;this.validate=vset_validate;this.itemobj=inputitem;}
function add_validationdesc(desc,error)
{this.vSet[this.vSet.length]=new ValidationDesc(this.itemobj,desc,error);}
function vset_validate()
{for(var itr=0;itr<this.vSet.length;itr++)
{if(!this.vSet[itr].validate())
{return false;}}
return true;}
function validateEmailv2(email)
{if(email=="")return true;var splitted=email.match("^(.+)@(.+)$");if(splitted==null)return false;if(splitted[1]!=null)
{var regexp_user=/^\"?[\w-_\.]*\"?$/;if(splitted[1].match(regexp_user)==null)return false;}
if(splitted[2]!=null)
{var regexp_domain=/^[\w-\.]*\.[A-Za-z]{2,4}$/;if(splitted[2].match(regexp_domain)==null)
{var regexp_ip=/^\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\]$/;if(splitted[2].match(regexp_ip)==null)return false;}
return true;}
return false;}
function V2validateData(strValidateStr,objValue,strError)
{var epos=strValidateStr.search("=");var command="";var cmdvalue="";if(epos>=0)
{command=strValidateStr.substring(0,epos);cmdvalue=strValidateStr.substr(epos+1);}
else
{command=strValidateStr;}
switch(command)
{case"req":case"required":{objValue.value=trim(objValue.value);if(eval(objValue.value.length)==0)
{if(!strError||strError.length==0)
{strError=objValue.name+" : Required Field";}
alert(strError);return false;}
break;}
case"maxlength":case"maxlen":{if(eval(objValue.value.length)>eval(cmdvalue))
{if(!strError||strError.length==0)
{strError=objValue.name+" : "+cmdvalue+" characters maximum ";}
alert(strError+"\n[Current length = "+objValue.value.length+" ]");return false;}
break;}
case"minlength":case"minlen":{if(eval(objValue.value.length)<eval(cmdvalue))
{if(!strError||strError.length==0)
{strError=objValue.name+" : "+cmdvalue+" caratteri minimo  ";}
alert(strError+"\n[Lunghezza corrente = "+objValue.value.length+" ]");return false;}
break;}
case"alnum":case"alphanumeric":{var charpos=objValue.value.search("[^A-Za-z0-9]");if(objValue.value.length>0&&charpos>=0)
{if(!strError||strError.length==0)
{strError=objValue.name+": Sono consentiti soltanto caratteri alfanumerici ";}
alert(strError+"\n [Error character position "+eval(charpos+1)+"]");return false;}
break;}
case"num":case"numeric":{var charpos=objValue.value.search("[^0-9.]");if(objValue.value.length>0&&charpos>=0)
{if(!strError||strError.length==0)
{strError=objValue.name+": Sono consentiti soltanto caratteri numerici ";}
alert(strError);return false;}
break;}
case"int":case"integer":{var charpos=objValue.value.search("[^0-9]");if(objValue.value.length>0&&charpos>=0)
{if(!strError||strError.length==0)
{strError=objValue.name+": Sono consentiti soltanto caratteri numerici ";}
alert(strError);return false;}
break;}
case"alphabetic":case"alpha":{var charpos=objValue.value.search("[^A-Za-z]");if(objValue.value.length>0&&charpos>=0)
{if(!strError||strError.length==0)
{strError=objValue.name+": Only alphabetic characters allowed ";}
alert(strError+"\n [Error character position "+eval(charpos+1)+"]");return false;}
break;}
case"alnumhyphen":{var charpos=objValue.value.search("[^A-Za-z0-9\-_]");if(objValue.value.length>0&&charpos>=0)
{if(!strError||strError.length==0)
{strError=objValue.name+": characters allowed are A-Z,a-z,0-9,- and _";}
alert(strError+"\n [Error character position "+eval(charpos+1)+"]");return false;}
break;}
case"fungenSampleName":{var firstSet=objValue.value.substr(0,3);var secondSet=objValue.value.substr(3,3);var validFirst=firstSet.search("[^A-Za-z]");var validSecond=secondSet.search("[^0-9]");if(objValue.value.length!=6||validFirst>=0||validSecond>=0)
{if(!strError||strError.length==0)
{strError=objValue.name+": Sample Name should be only 6 characters and in the format XXX999 ";}
alert(strError+"\n\n Your Current Entry is  "+objValue.value+" and its invalid");return false;}
break;}
case"email":{if(!validateEmailv2(objValue.value))
{if(!strError||strError.length==0)
{strError=objValue.name+": Inserire un indirizzo e-mail valido ";}
alert(strError);return false;}
break;}
case"lt":case"lessthan":{if(isNaN(objValue.value))
{alert(objValue.name+": Should be a number ");return false;}
if(eval(objValue.value)>=eval(cmdvalue))
{if(!strError||strError.length==0)
{strError=objValue.name+" : value should be less than "+cmdvalue;}
alert(strError);return false;}
break;}
case"gt":case"greaterthan":{if(isNaN(objValue.value))
{alert(objValue.name+": Should be a number ");return false;}
if(eval(objValue.value)<=eval(cmdvalue))
{if(!strError||strError.length==0)
{strError=objValue.name+" : value should be greater than "+cmdvalue;}
alert(strError);return false;}
break;}
case"validDate":{var thisRegEx="([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})";if(objValue.value.length>0)
{if(!objValue.value.match(thisRegEx))
{if(!strError||strError.length==0)
{strError=objValue.name+": Not a valid date in the yyyy-mm-dd ";}
alert(strError);return false;}}
break;}
case"validDateMy":{if(IsValidDate(objValue,"dd/MM/yyyy"))
{return true;}else
{if(!strError||strError.length==0)
{strError=objValue.name+": Non è una data valida nel formato gg/mm/aaaa ";}
alert(strError);return false;}
break;}
case"validTime":{var thisRegEx="([0-9]{1,2}):([0-9]{2})";if(objValue.value.length>0)
{if(!objValue.value.match(thisRegEx))
{if(!strError||strError.length==0)
{strError=objValue.name+": Not a valid date in the yyyy-mm-dd ";}
alert(strError);return false;}}
break;}
case"regexp":{if(!objValue.value.match(cmdvalue))
{if(!strError||strError.length==0)
{strError=objValue.name+": Invalid characters found ";}
alert(strError);return false;}
break;}
case"dontselect":{if(objValue.selectedIndex==null)
{alert("BUG: dontselect command for non-select Item");return false;}
if(objValue.selectedIndex==eval(cmdvalue))
{if(!strError||strError.length==0)
{strError=objValue.name+": Please Select one option ";}
alert(strError);return false;}
break;}
case"commbudget":{if((objValue.value!=strError)&&(strError!="")){if(userConfirmationAlert("ATTENZIONE! E' stata cambiata la commessa su un budget già presente! Questa operazione potrebbe causare delle incoerenze sui dati! Proseguire con il salvataggio?")){}else{return false;}}
break;}}
return true;}