//Class for validating forms
function FormValidator(){
	//If true, no errors was found
	FormValidator.prototype.noErrors = true;

	//Error happened
	FormValidator.prototype.doError = function(field){
		this.noErrors = false;
		$("[statusFor='"+field.attr('name')+"']").css({'color':'red','fontWeight':'bold'});
	};

	//Confirm no error happened
	FormValidator.prototype.doConfirm = function(field){
		$("[statusFor='"+field.attr('name')+"']").css({'color':'black','fontWeight':'normal'});
	}

	//Check field for errors
	FormValidator.prototype.checkField = function(field,validationFunction){
		if(validationFunction(field)){
			this.doConfirm(field);
		}else{
			this.doError(field);
		}
	}

	//Validation functions, to check fields
	FormValidator.prototype.validationFunctions = {
		text : function(field){
			return true;
		},
		number : function(field){
			var validator = /^[0-9]+$/;
			return field.val().match(validator);
		},
		alphaNumeric : function(field){
			var validator = /^[A-Za-z0-9.,? !]+$/;
			return field.val().match(validator);
		},
		notZero : function(field){
			return (field.val() > 0);
		},
		notEmpty : function(field){
			return (field.val().length > 0);
		},
		email : function(field){
			var validator = /^[a-zA-Z0-9_.-]+@[a-zA-Z0-9\-_]+\.[a-zA-Z0-9]{2,4}$/;
			return field.val().match(validator);
		},
		password : function(field){
			var validator = /^[A-Za-z0-9]+$/;
			return field.val().match(validator);
		},
		secondPassword : function(field){
			var firstPassword = $("#"+field.attr("linkedTo")).val();
			return ((firstPassword != "") && (firstPassword == field.val()));
		},
		phone : function(field){
			var validator = /^[0-9]+$/;
			return field.val().match(validator);
		}
	}

	//Main function, which check all fields
	FormValidator.prototype.checkFields = function(fields){
		this.noErrors = true;
		for(var i = 0; i < fields.length; i++){
			field = $(fields[i]);
			if(field.attr("validation") == "text"){
				this.checkField(field,this.validationFunctions.text);
			}else if(field.attr("validation") == "number"){
				this.checkField(field,this.validationFunctions.number);
			}else if(field.attr("validation") == "alphaNumeric"){
				this.checkField(field,this.validationFunctions.alphaNumeric);
			}else if(field.attr("validation") == "notZero"){
				this.checkField(field,this.validationFunctions.notZero);
			}else if(field.attr("validation") == "notEmpty"){
				this.checkField(field,this.validationFunctions.notEmpty);
			}else if(field.attr("validation") == "email"){
				this.checkField(field,this.validationFunctions.email);
			}else if(field.attr("validation") == "password"){
				this.checkField(field,this.validationFunctions.password);
			}else if(field.attr("validation") == "secondPassword"){
				this.checkField(field,this.validationFunctions.secondPassword);
			}else if(field.attr("validation") == "phone"){
				this.checkField(field,this.validationFunctions.phone);
			}else{
				this.checkField(field,this.validationFunctions.notEmpty);
			}
		}
		return this.noErrors;
	}
}
