Event.observe(window, 'load', init, false);

Validation = Class.create();

Validation.prototype = {
	initialize : function() {
		var forms = document.getElementsByTagName('form');
		if (forms.length > 0) {
			this.form = forms[0]; //We are assuming only one form perpage.
			var inputs = this.form.getElementsByTagName('input');
			var focused = false;
			var i=0;
			do {
				if (inputs[i].type != "hidden") {
					focused = true;
					inputs[i].focus();
				}
				i++;
			} while (!focused);
			Event.observe(this.form,'submit',this.onSubmit.bind(this),false);
		}
	},
	onSubmit : function(ev) {
		if (!this.validate()) {
			this.pageMarkupErrors();
			Event.stop(ev);
		} 
	},
	validate : function() {
		var result = true;
		var inputs = this.form.getElementsByTagName('input');
		var textareas = this.form.getElementsByTagName('textarea');
		for (var i=0; i < inputs.length; i++) {
			if (inputs[i].type == "text" || inputs[i].type == "password") {
				Element.removeClassName(inputs[i], "validate");
				var label = $(inputs[i].name + "-label");
				var thisValid = true;
				if (Element.hasClassName(inputs[i], "anything")) {
					if (inputs[i].value == null || inputs[i].value.length == 0) {
						result = false;
						thisValid = false;
					}
				}
				else if (Element.hasClassName(inputs[i], "email")) {
					var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
					if (!filter.test(inputs[i].value)) {
						result = false;
						thisValid = false;
					}
				}
				if (thisValid) {
					this.inputMarkupErrors(inputs[i], true);
					this.labelMarkupErrors(label, true);
				}
				else {
					this.inputMarkupErrors(inputs[i], false);
					this.labelMarkupErrors(label, false);
				}
			}
		}
		for (var i=0; i < textareas.length; i++) {
			Element.removeClassName(textareas[i], "validate");
			if (Element.hasClassName(textareas[i], "anything")) {
				var label = $(textareas[i].name + "-label");
				if (textareas[i].value == null || textareas[i].value.length == 0) {
					this.inputMarkupErrors(textareas[i], false);
					this.labelMarkupErrors(label, false);
					result = false;
				}
				else {
					this.inputMarkupErrors(textareas[i], true);
					this.labelMarkupErrors(label, true);
				}
			}
		}
		return result;
	},
	inputMarkupErrors : function(obj, status) {
		if (status) obj.style.border = "1px solid #008000";
		else obj.style.border = "1px solid #ff0000";
	},
	labelMarkupErrors : function(obj, status) {
		if (status) obj.style.color = "#008000";
		else obj.style.color = "#ff0000";
	},
	pageMarkupErrors : function() {
		$("warningMessage").style.display = "block";
	}
}

function init() {
	new Validation(); 
}

/*Object.extend(Validation, {
	inputMarkupErrors : function() {
		
	}
});*/ //This format allows you to change the markup per-page