/*
	ClientSide Validations for Forms2 Module
	Version: 1.0
*/

var validations = [];

function AddRequiredValidation(fieldId, message) {
	var val = GetValidation(fieldId);
	val.required = true;
	val.message = message;
}

function AddRegexValidation(fieldId, regex, message) {
	var val = GetValidation(fieldId);
	val.regex = regex;
	val.message = message;
}

function GetValidation(fieldId) {
	// validation already defined?
	var i;
	for (i=0; i<validations.length; i++) {
		if (validations[i].fieldId == fieldId) {
			return validations[i];
		}
	}
	
	// add new validation 
	var newValidation = {
		fieldId:  fieldId,
		required: false,
		regex: "",
		message: ""
	};
		
	validations.push(newValidation);
	return newValidation;
}

function ValidateForm(localGeneralMessage) {
	var localMessage = localGeneralMessage || "Please correct the following errors:\n";
	
	var errors = [];
	var firstErrorField;
	
	var i;
	for (i=0; i<validations.length; i++) {
		var validation = validations[i];
		var field = document.getElementById(validation.fieldId);
		
		var valid = false;
		switch(field.tagName.toUpperCase()) {
			case "INPUT":
				switch(field.type.toUpperCase()) {
					case "TEXT":
					case "PASSWORD":
						valid = ValidateValue(field.value, validation.required, validation.regex);
						break;
					// TODO: other INPUT types to validate?
				}
				break;
			case "TEXTAREA":
				valid = ValidateValue(field.value, validation.required, validation.regex);
				break;
			case "SELECT":
				valid = ValidateValue(field.value, validation.required, validation.regex);
				break;
		}
		if (valid == false) {
			errors.push(validation.message);
			firstErrorField = firstErrorField || validation.fieldId;
		}		
	}
	if (errors.length > 0) {
		var allErrors = "";
		for (i=0; i<errors.length; i++) {
			allErrors += "\n- " + errors[i];
		}
		alert(localMessage + allErrors);
		setTimeout("FocusFormField('" + firstErrorField + "');", 100);
		return false;
	}
	
	return true;
}

function ValidateValue(value, required, regex) {
	if (required && trim(value) == "") {
		return false;
	}
	if (regex != "") {
		var regExValidation = new RegExp(regex);
		var error = regExValidation.test(value);
		return error;
	}
	return true;
}

function FocusFormField(field) {
	var element = document.getElementById(field);
	if (element) {
		element.focus();
		element.select();
	}
}

function trim(str) {
	return str.replace(/^\s+|\s+$/g, '');
}
