/* Usage:
 * ------
 * To validate form, add atribute onsubmit="return validate(this);" to form. 
 * Required fields must be defined by special class name.
 * 		Non empty field - "requiredNonEmpty"
 * 		Alfanumeric field - "requiredAlfanumeric"
 * 		E-mail field - "requiredEmail"
 * 
 * If field is not valid class name "requiredError" is added and 
 * if element with id = field.id + "_error" exists, it will be displayed. 
 * (Example: if field id = "name", then error message id = "name_error")
 * 
 * 
 * Example of usage:
 * -----------------
 * <form id="myForm" onsubmit="return validate(this);">
 * 		Required non empty: <input id="rne" type="text" class="inputCommon requiredNonEmpty" value="" />
 *		<span id="rne_error" class="errorMsg">Error message</span><br />
 *		<input type="submit" value="Submit" />
 * </form> 
 */

// main form validation function
function validate(form) {
	var returnValue = true;

	for ( var i = 0; i < form.length; i++) {
		var formElement = form.elements[i];

		if (formElement.className.indexOf("requiredNonEmpty") != -1) {
			if (!validateNonEmpty(formElement)) {
				formElement.className = formElement.className + " requiredError";
				var errorElement = document.getElementById(formElement.id + '_error');
				if (errorElement != null) {
					errorElement.style.display = "inline";
				}
				returnValue = false;
			} else {
				formElement.className = formElement.className.replace(" requiredError", "");
				var errorElement = document.getElementById(formElement.id + '_error');
				if (errorElement != null) {
					errorElement.style.display = "none";
				}
			}
		} else if (formElement.className.indexOf("requiredAlfanumeric") != -1) {
			if (!validateAlfaNumeric(formElement)) {
				formElement.className = formElement.className + " requiredError";
				var errorElement = document.getElementById(formElement.id + '_error');
				if (errorElement != null) {
					errorElement.style.display = "inline";
				}
				returnValue = false;
			} else {
				formElement.className = formElement.className.replace(" requiredError", "");
				var errorElement = document.getElementById(formElement.id + '_error');
				if (errorElement != null) {
					errorElement.style.display = "none";
				}
			}
		} else if (formElement.className.indexOf("requiredNumeric") != -1) {
			if (!validateNumeric(formElement)) {
				formElement.className = formElement.className + " requiredError";
				var errorElement = document.getElementById(formElement.id + '_error');
				if (errorElement != null) {
					errorElement.style.display = "inline";
				}
				returnValue = false;
			} else {
				formElement.className = formElement.className.replace(" requiredError", "");
				var errorElement = document.getElementById(formElement.id + '_error');
				if (errorElement != null) {
					errorElement.style.display = "none";
				}
			}
		} else if (formElement.className.indexOf("requiredEmail") != -1) {
			if (!validateEmail(formElement)) {
				formElement.className = formElement.className + " requiredError";
				var errorElement = document.getElementById(formElement.id + '_error');
				if (errorElement != null) {
					errorElement.style.display = "inline";
				}
				returnValue = false;
			} else {
				formElement.className = formElement.className.replace(" requiredError", "");
				var errorElement = document.getElementById(formElement.id + '_error');
				if (errorElement != null) {
					errorElement.style.display = "none";
				}
			}
		}
	}
	return returnValue;
}

// shows error message for element
function showErrorMessage(element) {
	element.className = element.className + " requiredError";
	var errorElement = document.getElementById(element.id + '_error');
	if (errorElement != null) {
		errorElement.style.display = "inline";
	}
}

// hide error message for element
function hideErrorMessage(element) {
	element.className = element.className.replace(" requiredError", "");
	var errorElement = document.getElementById(element.id + '_error');
	if (errorElement != null) {
		errorElement.style.display = "none";
	}
}

// checks if field is valid e-mail
function validateEmail(element) {
	var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
	if (reg.test(element.value)) {
		return true;
	}
	return false;
}

// check if field contains only alfanumeric characters
function validateAlfaNumeric(element) {
	var reg = /^[\w]+$/;
	if (reg.test(element.value)) {
		return true;
	}
	return false;
}

// check if field contains only integers
function validateNumeric(element) {
	var reg = /^[\d ]+$/;
	if (reg.test(element.value)) {
		return true;
	}
	return false;
}

// check if field is not empty
function validateNonEmpty(element) {
	if (element.value == null || element.value == "") {
		return false;
	}
	return true;
}
