// ***************
// CONFIGURATION
// ***************
validcolor = "#AAAAAA";
invalidcolor = "#FF0000";

// ***************
// EVENTS
// ***************

addLoadEvent(addvalidatehandler);

// ***************
// FORM VALIDATION
// ***************

// add the validation handler to each form
function addvalidatehandler() {
	elementsForms = document.getElementsByTagName("form");
	for (var i=0; i < elementsForms.length; i++) { 
		elementsForms[i].onsubmit = function() { 
			return validateform(this); 
		}
	}
}

// validate a_form
function validateform(a_form) {
	var valid = true;
	
	// check input fields
	var fields = a_form.getElementsByTagName("input");
	for (var i = 0; i < fields.length; i++) {
		if (fields[i].className == "notempty") {
			if (validateText(fields[i])) {
				colorize_field_invalid(fields[i])
				valid = false;
			} else {
				colorize_field_valid (fields[i])
			}
		} else if (fields[i].className == "integer") {
			if (validateNumber(fields[i])) {
				colorize_field_invalid(fields[i])
				valid = false;
			} else {
				colorize_field_valid(fields[i])
			} 
		} else if (fields[i].className == "email") {
			if (validateEmail(fields[i])) {
				colorize_field_invalid(fields[i])
				valid = false;
			} else {
				colorize_field_valid(fields[i])	
			}
		}
	}
	
	// check textarea fields
	var fields = a_form.getElementsByTagName("textarea");
	for (var i = 0; i < fields.length; i++) {
		if (fields[i].className == "notempty") {
			if (validateText(fields[i])) {
				colorize_field_invalid(fields[i])
				valid = false;
			} else {
				colorize_field_valid(fields[i])
			}
		}
	}	
	
	return valid;
}

// validate text-field
function validateText(field) {
	if (field.value == "") {
		return true;
	}
}

// validate number-field
function validateNumber(field) {
	var numberFilter=/\d+/;
	if (!numberFilter.test(field.value)) {
		return true;
	}
}

// validate a email-field
function validateEmail(field) {
	var emailFilter=/^.+@.+\..{2,3}$/;
	if (!emailFilter.test(field.value)) {
		return true;
	}
}

// **************
// ERROR FEEDBACK
// **************

// mark invalid fields with invalidcolor 
function colorize_field_invalid(field) {
	field.style.borderColor = invalidcolor;
}

// mark valid fields with validcolor
function colorize_field_valid(field) {
	field.style.borderColor = validcolor;	
}