
function Validation(formId) {
	this.formId = formId;
	this.form = document.getElementById(formId);
}
Validation.prototype.validateForm = function () {
	this.clearErrorMessages();
	var fields = Validation.fieldRules[this.formId];
	var result = true;
	for (var fieldId in fields) {
		if(!this.validateField(fieldId)){
			result = false;
		}
	}
	return result;
};
Validation.prototype.clearErrorMessages = function () {
	$("#" + this.formId + " div[id*='_errorMessage']").remove();
};
Validation.prototype.clearFieldErrorMessage = function (fieldId) {
	$("#" + this.formId + " div[id='" + fieldId + "_errorMessage']").remove();
};
Validation.prototype.addFieldErrorMessage = function (fieldId, errorMessage) {
	this.clearFieldErrorMessage(fieldId);
	$("#" + this.formId + "_" + fieldId).parent().after("<div id=\"" + fieldId + "_errorMessage\" class=\"errorMessage\">" + errorMessage + "</div>");
};
Validation.prototype.validateField = function (fieldId) {
	var fieldRules = Validation.fieldRules[this.formId];
	var fieldRule = fieldRules[fieldId];
	var fieldValue = $("#" + this.formId + "_" + fieldId).val();
	var result = true;
	for (var validator in fieldRule) {
		if (this.validate(validator, fieldRule[validator].params, fieldValue)) {
			this.addFieldErrorMessage(fieldId, fieldRule[validator].error);
			result = false;
			break;
		}
	}
	return result;
};
Validation.prototype.validate = function (rule, params, value) {
	switch (rule) {
	  case "requiredstring":
		return value != null && (value == "" || value.replace(/^\s+|\s+$/g, "").length == 0);
	  case "stringlength":
		if (value != null) {
			while (value.substring(0, 1) == " ") {
				value = value.substring(1, value.length);
			}
			while (value.substring(value.length - 1, value.length) == " ") {
				value = value.substring(0, value.length - 1);
			}
			if ((params.minLength > -1 && value.length < params.minLength) || (params.maxLength > -1 && value.length > params.maxLength)) {
				return true;
			}
		}
		return false;
	  case "email":
		return value != null && value.length > 0 && value.match(/\b(^[_A-Za-z0-9-]+(\.[_A-Za-z0-9-]+)*@([A-Za-z0-9-])+(\.[A-Za-z0-9-]+)*((\.[A-Za-z0-9]{2,})|(\.[A-Za-z0-9]{2,}\.[A-Za-z0-9]{2,}))$)\b/gi) == null;
	  case "int":
		if (value != null) {
			if (parseInt(value) < params.min || parseInt(value) > params.max) {
				return true;
			}
		}
		return false;
	  case "equals":
		return value != $("#" + this.formId + "_" + params.fieldId).val();
	  default:
		return false;
	}
};

