function Validator(i){var I=this;I.formobj=document.forms[i];if(!I.formobj){throw("BUG: couldnot get Form object "+i);return}
if(I.formobj.onsubmit){I.formobj.old_onsubmit=I.formobj.onsubmit;I.formobj.onsubmit=null}else{I.formobj.old_onsubmit=null}
I.formobj.onsubmit=form_submit_handler;I.addValidation=add_validation;I.addOlcutValidation=add_olcutvalidation;I.setAddnlValidationFunction=set_addnl_vfunction;I.clearAllValidations=clear_all_validations}
function set_addnl_vfunction(i){this.formobj.addnlvalidation=i}
function clear_all_validations(){var I=this;for(var i=0;i<I.formobj.elements.length;i++){I.formobj.elements[i].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(I,l,o){var O=this;if(!O.formobj){throw("BUG: the form object is not set properly");return}
var i=O.formobj[I];if(!i){throw("BUG: Couldnot get the input object named: "+I);return}
if(!i.validationset){i.validationset=new ValidationSet(i)}
i.validationset.add(l,o)}
function add_olcutvalidation(o,I,l){if(!this.formobj){alert("BUG: the form object is not set properly");return}
var i=o;if(!i){alert("BUG: Couldnot get the input object: "+o);return}
if(!i.validationset){i.validationset=new ValidationSet(i)}
i.validationset.add(I,l)}
function ValidationDesc(i,l,I){var o=this;o.desc=l;o.error=I;o.itemobj=i;o.validate=vdesc_validate}
function vdesc_validate(){var i=this;if(!V2validateData(i.desc,i.itemobj,i.error)){i.itemobj.focus();return false}
return true}
function ValidationSet(i){var I=this;I.vSet=[];I.add=add_validationdesc;I.validate=vset_validate;I.itemobj=i}
function add_validationdesc(I,i){var l=this;l.vSet[l.vSet.length]=new ValidationDesc(l.itemobj,I,i)}
function vset_validate(){var I=this;for(var i=0;i<I.vSet.length;i++){if(!I.vSet[i].validate()){return false}}
return true}
function validateEmailv2(O){if(O.length<=0){return true}
var i=O.match("^(.+)@(.+)$");if(i==null)return false;if(i[1]!=null){var l=/^\"?[\w-_\.]*\"?$/;if(i[1].match(l)==null)return false}
if(i[2]!=null){var I=/^[\w-\.]*\.[A-Za-z]{2,4}$/;if(i[2].match(I)==null){var o=/^\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\]$/;if(i[2].match(o)==null)return false}
return true}
return false}
function V2validateData(strValidateStr,objValue,strError){var epos=strValidateStr.search("="),command="",cmdvalue="";if(epos>=0){command=strValidateStr.substring(0,epos);cmdvalue=strValidateStr.substr(epos+1)}else{command=strValidateStr}
switch(command){case "req":case "required":{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);return false}
break}
case "minlength":case "minlen":{if(eval(objValue.value.length)<eval(cmdvalue)){if(!strError||strError.length==0){strError=objValue.name+" : "+cmdvalue+" characters minimum  "}
alert(strError);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+": Only alpha-numeric characters allowed "}
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+": Only digits allowed "}
alert(strError+"\n [Error character position "+eval(charpos+1)+"]");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 "email":{if(!validateEmailv2(objValue.value)){if(!strError||strError.length==0){strError=objValue.name+": Enter a valid Email address "}
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 "regexp":{if(objValue.value.length>0){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 "startswith":{if(objValue.value==undefined||objValue.value.indexOf(cmdvalue)!==0){if(!strError||strError.length==0){strError=objValue.name+": Invalid characters found "}
alert(strError);return false}
break}}
return true}
