function FormValidator(formNode){this.errorMessage="";this.formNode=formNode;}FormValidator.prototype={addRule:function(fieldName,message,validatorType,args){validatorType=validatorType.toLowerCase(validatorType);var element=this.formNode[fieldName];if(element!=null){switch(validatorType){case"required":this.required(element,message);break;case"rangelength":this.rangelength(element,message,args[0],args[1]);break;case"rangevalues":this.rangevalues(element,message,args[0],args[1]);break;case"numeric":this.numeric(element,message);break;case"positivenumber":this.positivenumber(element,message);break;case"integer":this.integer(element,message);break;case"positiveinteger":this.positiveinteger(element,message);break;case"lettersonly":this.lettersonly(element,message);break;case"zipcode":this.zipcode(element,message);break;case"email":this.email(element,message);break;case"ischecked":this.ischecked(element,message,args);break;case"compare":var elementPivot=this.formNode[args];if(elementPivot!=null)this.compare(element,message,elementPivot);break;case"creditcard":this.creditcard(element,message);break;case"expression":this.expression(element,message,args);break;default:}}},markField:function(element,bg_color,border_color){if(element.style){element.style.backgroundColor=bg_color;element.style.borderColor=border_color;}if(element.length){for(var i=0,l=element.length;i<l;i++){if(element[i].style){element[i].style.backgroundColor=bg_color;element[i].style.borderColor=border_color;}}}},getValue:function(e){var r='';if(e.tagName=='SELECT'){if(e.selectedIndex!=-1){r=e.options[e.selectedIndex].getAttribute('value');if((typeof r=='undefined')||(typeof r=='object')){r=e.options[e.selectedIndex].text;}}else{r='';}}else if(e.length!=undefined){for(i=0;i<e.length;i++){if(e[i].checked){r=e[i].value;break;}}}else{r=e.value;}return r;},invalidField:function(element,message){this.markField(element,"#F5EDB4","#FF9933");this.errorMessage=this.errorMessage+message+"\n";},required:function(element,message){if(!/\S/.test(this.getValue(element))){this.invalidField(element,message);}},rangelength:function(element,message,minLength,maxLength){var val=this.getValue(element);if((minLength!=null&&val.length<minLength)||(maxLength!=null&&val.length>maxLength)){this.invalidField(element,message);}},rangevalues:function(element,message,minValue,maxValue){var val=this.getValue(element);if((minValue!=null&&val<minValue)||(maxValue!=null&&val>maxValue)){this.invalidField(element,message);}},numeric:function(element,message){var val=this.getValue(element);if(val.length>0&&!/^(\-?(\d+\.?\d+)|(-?\d+)){1}$/.test(val)){this.invalidField(element,message);}},positivenumber:function(element,message){var val=this.getValue(element);if(val.length>0&&!/^((\d+\.?\d+)|(\d+)){1}$/.test(val)){this.invalidField(element,message);}},integer:function(element,message){var val=this.getValue(element);if(val.length>0&&!/^-?\d+$/.test(val)){this.invalidField(element,message);}},positiveinteger:function(element,message){var val=this.getValue(element);if(val.length>0&&!/^\d+$/.test(val)){this.invalidField(element,message);}},lettersonly:function(element,message){var val=this.getValue(element);if(val.length>0&&!/^[a-zA-Z\s]+$/.test(val)){this.invalidField(element,message);}},zipcode:function(element,message){var val=this.getValue(element);if(val.length>0&&!/^\d{5}$/.test(val)){this.invalidField(element,message);}},email:function(element,message){var val=this.getValue(element);if(val.length>0&&!/^\S+@\S+(\.\S+)*\.(\S{2,4})$/i.test(val)||/[\(\)\<\>\,\;\:\\\"\[\]]/.test(val)){this.invalidField(element,message);}},ischecked:function(element,message,args){var me=this;var operator="or";function verifyGroup(element){var i=0;var flag=(operator=='and')?true:false;if(element.length){while(i<element.length){if(operator=="and"){flag=flag&&element[i].checked;}else{flag=flag||element[i].checked;}i++;}if(!flag){for(var j=0;j<element.length;j++)me.markField(element[j],"#F5EDB4","#FF9933");me.invalidField(element[0],message);}}else{if(element.checked==false)me.invalidField(element,message);}};if(args){operator=(args[0].toLowerCase()=="all")?"and":"or";if(args.length>1){var tmpArr=new Array();tmpArr=tmpArr.concat(element);for(var i=1;i<args.length;i++){tmpArr=tmpArr.concat(me.formNode[args[i]]);}element=tmpArr;}}verifyGroup(element);},compare:function(element,message,elementPivot){var val=this.getValue(element),valPivot=this.getValue(elementPivot);if(val!=valPivot){this.markField(elementPivot,"#F5EDB4","#FF9933");this.invalidField(element,message);}},expression:function(element,message,regularExpression){if(!regularExpression.test(this.getValue(element))){this.invalidField(element,message);}},creditcard:function(element,message,regularExpression){var s=this.getValue(element);s=s.replace(/\D/g,"");var nl=s.length,p=nl%2,t=0;for(i=0;i<nl;i++){var d=s.charAt(i);if(i%2==p){d=d*2;if(d>9){d=d-9;}}t=t+parseInt(d);}if(t%10!=0){this.invalidField(element,message);}},validate:function(){if(this.errorMessage!=""){alert(this.errorMessage);return false;}return true;}};
