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);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.length){for(var j=0;j<element.length;j++){element[j].style.backgroundColor=bg_color;element[j].style.borderColor=border_color;}}else{element.style.backgroundColor=bg_color;element.style.borderColor=border_color;}},getValue:function(element){var result=element.value;if(!result&&element.tagName=='SELECT'){result=element.options[element.selectedIndex].value;if(!result){result=element.options[element.selectedIndex].text;}}return result;},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,3}|info)$/i.test(val)||/[\(\)\<\>\,\;\:\\\"\[\]]/.test(val)){this.invalidField(element,message);}},ischecked:function(element,message){var i=0,flag=false;if(element.length){while((i<element.length)&&!flag){if(element[i].checked==true)flag=true;i++;}if(!flag){for(var j=0;j<element.length;j++)this.markField(element[j],"#F5EDB4","#FF9933");this.invalidField(element[0],message);}}else{if(element.checked==false)this.invalidField(element,message);}},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 i,sum=0,transformString,val=this.getValue(element),strLength=val.length;if(strLength>0){val=val.replace(/\D/g,"");for(i=strLength;i>0;i--){if((strLength-i)%2!=0){transformString=transformString+parseInt(val.charAt(i-1),10)*2;}else{transformString=transformString+val.charAt(i-1);}}for(i=0;i<transformString.length;i++){sum=sum+parseInt(transformString.charAt(i),10);}if(sum==0||sum%10!=0)this.invalidField(element,message);}},validate:function(){if(this.errorMessage!=""){alert(this.errorMessage);return false;}return true;}};




