function Validator(a){this.formobj=document.forms[a];if(!this.formobj){alert("BUG: couldnot get Form object "+a);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(a){this.formobj.addnlvalidation=a}function clear_all_validations(){for(var a=0;a<this.formobj.elements.length;a++){this.formobj.elements[a].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(d,b,c){if(!this.formobj){alert("BUG: the form object is not set properly");return}var a=this.formobj[d];if(a.length&&isNaN(a.selectedIndex)){a=a[0]}if(!a){alert("BUG: Couldnot get the input object named: "+d);return}if(!a.validationset){a.validationset=new ValidationSet(a)}a.validationset.add(b,c)}function ValidationDesc(c,b,a){this.desc=b;this.error=a;this.itemobj=c;this.validate=vdesc_validate}function vdesc_validate(){if(!validateInput(this.desc,this.itemobj,this.error)){this.itemobj.focus();return false}return true}function ValidationSet(a){this.vSet=new Array();this.add=add_validationdesc;this.validate=vset_validate;this.itemobj=a}function add_validationdesc(b,a){this.vSet[this.vSet.length]=new ValidationDesc(this.itemobj,b,a)}function vset_validate(){for(var a=0;a<this.vSet.length;a++){if(!this.vSet[a].validate()){return false}}return true}function validateEmail(b){var e=b.match("^(.+)@(.+)$");if(e==null){return false}if(e[1]!=null){var d=/^\"?[\w-_\.]*\"?$/;if(e[1].match(d)==null){return false}}if(e[2]!=null){var c=/^[\w-\.]*\.[A-Za-z]{2,4}$/;if(e[2].match(c)==null){var a=/^\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\]$/;if(e[2].match(a)==null){return false}}return true}return false}function TestComparison(objValue,strCompareElement,strvalidator,strError){var bRet=true;var objCompare=null;if(!objValue.form){alert("BUG: No Form object!");return false}objCompare=objValue.form.elements[strCompareElement];if(!objCompare){alert("BUG: Element with name"+strCompareElement+" not found !");return false}if(strvalidator!="eqelmnt"&&strvalidator!="neelmnt"){if(isNaN(objValue.value)){alert(objValue.name+": Should be a number ");return false}if(isNaN(objCompare.value)){alert(objCompare.name+": Should be a number ");return false}}var cmpstr="";switch(strvalidator){case"eqelmnt":if(objValue.value!=objCompare.value){cmpstr=" should be equal to ";bRet=false}break;case"ltelmnt":if(eval(objValue.value)>=eval(objCompare.value)){cmpstr=" should be less than ";bRet=false}break;case"leelmnt":if(eval(objValue.value)>eval(objCompare.value)){cmpstr=" should be less than or equal to";bRet=false}break;case"gtelmnt":if(eval(objValue.value)<=eval(objCompare.value)){cmpstr=" should be greater than";bRet=false}break;case"geelmnt":if(eval(objValue.value)<eval(objCompare.value)){cmpstr=" should be greater than or equal to";bRet=false}break;case"neelmnt":if(objValue.value.length>0&&objCompare.value.length>0&&objValue.value==objCompare.value){cmpstr=" should be different from ";bRet=false}break}if(bRet==false){if(!strError||strError.length==0){strError=objValue.name+cmpstr+objCompare.value}alert(strError)}return bRet}function TestSelMin(objValue,strMinSel,strError){var bret=true;var objcheck=objValue.form.elements[objValue.name];var chkcount=0;if(objcheck.length){for(var c=0;c<objcheck.length;c++){if(objcheck[c].checked=="1"){chkcount++}}}else{chkcount=(objcheck.checked=="1")?1:0}var minsel=eval(strMinSel);if(chkcount<minsel){if(!strError||strError.length==0){strError="Please Select atleast"+minsel+" check boxes for"+objValue.name}alert(strError);bret=false}return bret}function TestDontSelectChk(b,h,d){var f=true;var a=b.form.elements[b.name];if(a.length){var e=-1;for(var g=0;g<a.length;g++){if(a[g].value==h){e=g;break}}if(e>=0){if(a[e].checked=="1"){f=false}}}else{if(b.checked=="1"){f=false}}if(f==false){if(!d||d.length==0){d="Can't Proceed as you selected "+b.name}alert(d)}return f}function TestRequiredInput(objValue,strError){var ret=true;if(eval(objValue.value.length)==0){if(!strError||strError.length==0){strError=objValue.name+" : Required Field"}alert(strError);ret=false}return ret}function TestMaxLen(objValue,strMaxLen,strError){var ret=true;if(eval(objValue.value.length)>eval(strMaxLen)){if(!strError||strError.length==0){strError=objValue.name+" : "+strMaxLen+" characters maximum "}alert(strError+"\n[Current length = "+objValue.value.length+" ]");ret=false}return ret}function TestMinLen(objValue,strMinLen,strError){var ret=true;if(eval(objValue.value.length)<eval(strMinLen)){if(!strError||strError.length==0){strError=objValue.name+" : "+strMinLen+" characters minimum "}alert(strError+"\n[Current length = "+objValue.value.length+" ]");ret=false}return ret}function TestInputType(objValue,strRegExp,strError,strDefaultError){var ret=true;var charpos=objValue.value.search(strRegExp);if(objValue.value.length>0&&charpos>=0){if(!strError||strError.length==0){strError=strDefaultError}alert(strError+"\n [Error character position "+eval(charpos+1)+"]");ret=false}return ret}function TestEmail(a,c){var b=true;if(a.value.length>0&&!validateEmail(a.value)){if(!c||c.length==0){c=a.name+": Enter a valid Email address "}alert(c);b=false}return b}function TestLessThan(objValue,strLessThan,strError){var ret=true;if(isNaN(objValue.value)){alert(objValue.name+": Should be a number ");ret=false}else{if(eval(objValue.value)>=eval(strLessThan)){if(!strError||strError.length==0){strError=objValue.name+" : value should be less than "+strLessThan}alert(strError);ret=false}}return ret}function TestGreaterThan(objValue,strGreaterThan,strError){var ret=true;if(isNaN(objValue.value)){alert(objValue.name+": Should be a number ");ret=false}else{if(eval(objValue.value)<=eval(strGreaterThan)){if(!strError||strError.length==0){strError=objValue.name+" : value should be greater than "+strGreaterThan}alert(strError);ret=false}}return ret}function TestRegExp(a,c,d){var b=true;if(a.value.length>0&&!a.value.match(c)){if(!d||d.length==0){d=a.name+": Invalid characters found "}alert(d);b=false}return b}function TestDontSelect(objValue,index,strError){var ret=true;if(objValue.selectedIndex==null){alert("BUG: dontselect command for non-select Item");ret=false}else{if(objValue.selectedIndex==eval(index)){if(!strError||strError.length==0){strError=objValue.name+": Please Select one option "}alert(strError);ret=false}}return ret}function TestSelectOneRadio(a,c){var b=a.form.elements[a.name];var e=false;for(var d=0;d<b.length;d++){if(b[d].checked=="1"){e=true;break}}if(false==e){if(!c||c.length==0){c="Please select one option from "+a.name}alert(c)}return e}function validateInput(i,d,f){var e=true;var c=i.search("=");var b="";var g="";if(c>=0){b=i.substring(0,c);g=i.substr(c+1)}else{b=i}switch(b){case"req":case"required":e=TestRequiredInput(d,f);break;case"maxlength":case"maxlen":e=TestMaxLen(d,g,f);break;case"minlength":case"minlen":e=TestMinLen(d,g,f);break;case"alnum":case"alphanumeric":e=TestInputType(d,"[^A-Za-z0-9]",f,d.name+": Only alpha-numeric characters allowed ");break;case"alnum_s":case"alphanumeric_space":e=TestInputType(d,"[^A-Za-z0-9\\s]",f,d.name+": Only alpha-numeric characters and space allowed ");break;case"num":case"numeric":var h=d.value;var a=/(^\d+$)|(^\d+\.\d+$)/;if(!f||f.length==0){f=d.name+": Only numerics allowed "}if(a.test(h)){e=true}else{alert(f);e=false}break;case"decimal":case"dec":var h=d.value;var a=/^\d{1,4}(\.\d\d?)?$/;if(!f||f.length==0){f=d.name+": Only decimals allowed "}if(a.test(h)){e=true}else{alert(f);e=false}break;case"alphabetic":case"alpha":e=TestInputType(d,"[^A-Za-z]",f,d.name+": Only alphabetic characters allowed ");break;case"alphanumeric_hyphen":case"alphanum_h":e=TestInputType(d,"[^A-Za-z0-9-]",f,d.name+": Only alpha-numeric and hyphen characters allowed ");break;case"alphabetic_space":case"alpha_s":e=TestInputType(d,"[^A-Za-z\\s]",f,d.name+": Only alphabetic characters and space allowed ");break;case"email":e=TestEmail(d,f);break;case"lt":case"lessthan":e=TestLessThan(d,g,f);break;case"gt":case"greaterthan":e=TestGreaterThan(d,g,f);break;case"regexp":e=TestRegExp(d,g,f);break;case"dontselect":e=TestDontSelect(d,g,f);break;case"dontselectchk":e=TestDontSelectChk(d,g,f);break;case"selmin":e=TestSelMin(d,g,f);break;case"selone":e=TestSelectOneRadio(d,f);break;case"eqelmnt":case"ltelmnt":case"leelmnt":case"gtelmnt":case"geelmnt":case"neelmnt":return TestComparison(d,g,b,f);break}return e};
