function FormValidator(formNode){
	this.errorMessage="";
	this.formNode=formNode;
}

FormValidator.prototype={
	addRuler:
	function(fieldName,message,validatorType,args){
		validatorType=validatorType.toLowerCase(validatorType);
		var element=this.formNode[fieldName];
		if(element!=null){
			this.markField(element,"","");
			switch(validatorType){
				case"required":
					this.required(element,message);
					break;
				case"rangelength":
					this.rangelength(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);
				case"comparesq":
					this.comparesq(element,message,args);
					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;
		}
	},invalidField:
	function(element,message){
		this.markField(element,"#F5EDB4","#FF9933");
		this.errorMessage=this.errorMessage+message+"\n";
	},required:
	function(element,message){
		if(!/\S/.test(element.value)){
			this.invalidField(element,message);
		}
	},rangelength:
	function(element,message,minLength,maxLength){
		if((minLength!=null&&element.value.length<minLength)||(maxLength!=null&&element.value.length>maxLength)){
			this.invalidField(element,message);
		}
	},numeric:
	function(element,message){
		if(!/^(-?(\d+\.?\d+)|(\d+)){1}$/.test(element.value)){
			this.invalidField(element,message);
		}
	},positivenumber:
	function(element,message){
		if(!/^((\d+\.?\d+)|(\d+)){1}$/.test(element.value)){
			this.invalidField(element,message);
		}
	},integer:
	function(element,message){
		if(!/^-?\d+$/.test(element.value)){
			this.invalidField(element,message);
		}
	},positiveinteger:
	function(element,message){
		if(!/^\d+$/.test(element.value)){
			this.invalidField(element,message);
		}
	},lettersonly:
	function(element,message){
		if(!/^[a-zA-Z]+$/.test(element.value)){
			this.invalidField(element,message);
		}
	},zipcode:
	function(element,message){
		if(!/^\d{5}$/.test(element.value)){
			this.invalidField(element,message);
		}
	},email:
	function(element,message){
		if(!/^\S+@\S+\.\S+$/.test(element.value)||/[\(\)\<\>\,\;\:\\\"\[\]]/.test(element.value)){
			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){
		if(element.value!=elementPivot.value){
			this.markField(elementPivot,"#F5EDB4","#FF9933");
			this.invalidField(element,message);
		}
	}, comparesq:
	function(element,message,ValueElement){
		if(element.value!=ValueElement){
			this.invalidField(element,message);
		}
	},expression:
	function(element,message,regularExpression){
		if(!regularExpression.test(element.value)){
			this.invalidField(element,message);
		}
	},creditcard:
	function(element,message,regularExpression){
		var i;
		var transformString="";
		var sum=0;
		element.value=element.value.replace(/\D/g,"");
		var strLength=element.value.length;
		if (strLength>0){
			for(i=strLength;i>0;i--){
				if((strLength-i)%2!=0){
					transformString=transformString+parseInt(element.value.charAt(i-1),10)*2;
				}else{
					transformString=transformString+element.value.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);
		} else 
			this.invalidField(element,message);
	},validate:
	function(){
		if (this.errorMessage!=""){
			alert(this.errorMessage);
			return false;
		}
		return true;
	}
};
				
				
				