String.prototype.ltrim = function () { return this.replace(/^ */,""); }
String.prototype.rtrim = function () { return this.replace(/ *$/,""); }
String.prototype.trim = function () { return this.ltrim().rtrim(); }
if (!Array.prototype.contains){
	Array.prototype.contains = function(obj){
		var len = this.length;
		for (var i = 0; i < len; i++){
			if(this[i]===obj){ return true;}
		}
		return false;
	};
}

function validateFormFields(rules) {
	var allValid = true;
	var firstInvalidField = null;
	var retvalue = {};
	var validationMessage = '';
	var validatedFields = [];
	
	for(var i = 0; i < rules.length; i++) { 
		var rule = rules[i];
		if(!validatedFields.contains(rule.field)) {
			var value = validateFormExtractValue(rule.field);

			var valid = true;
			if(rule.check == 'required') {
				valid = validateFormRuleNotEmpty(value);
			} else if(rule.check == 'email') {
				valid = validateFormRuleEmail(value);
			}
			
			if(rule.not) {
				valid = value != rule.not;
			}
			
			if(!valid) {
				if(allValid) {
					firstInvalidField = rule.field;
				} else {
					validationMessage += '\n';
				}
				
				allValid = false;
				validatedFields.push(rule.field);
				validationMessage += rule.message;
			}
		}
	}
	
	if(!allValid) {
		alert(validationMessage.trim());
		firstInvalidField.focus();
	}
	
	return allValid;
}


function validateFormExtractValue(field) {
	return field.value;
}

function validateFormRuleNotEmpty(value) {
	return value != null && value.trim().length > 0;
}

function validateFormRuleEmail(value) {
	return value.search(/\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b/i) != -1;
}
