/**********************************************************
Author:
Adam Barry
Klestrup | partners
www.klestrup-partners.dk

Date: July 9 2008

© 2008 Adam Barry, all rights reserved
-----------------------------------------------------------

Name:
formValidation script

-----------------------------------------------------------
Description:
Function that enable runs validation on userinputs on
various forms.

-----------------------------------------------------------
Usage:
Simply place a link to the this script in the head-section
of the XHTML page. The script will then automatically
execute on page load.

<script type="text/javascript" src="formValidation.js"></script>

<form method="post" action="default.html" onsubmit="return validateForm(this)">
	<fieldset>
		<legend>Form framework</legend>
		<ul>
			<li><label for="name">Name</label><input name="name" id="name" class="text required" type="text" /></li>
			<li><label for="address">Address</label><input name="address" id="address" class="text" type="text" /></li>
			<li><label for="email">E-mail</label><input name="email" id="email" class="text email" type="text" /></li>
		</ul>
		<button type="submit"><span><span><span>Submit</span></span></span></button>
		<button type="reset"><span><span><span>Reset</span></span></span></button>
	</fieldset>
</form>

Please note that the class attribute "required" and "email"
determins whether the specific form element is required.

-----------------------------------------------------------
Dependencies:
This script depends on the windowOnLoad-script to execute

**********************************************************/

function validateForm(thisform) {
	if (!thisform) {return false;}

	/* 	Loop through all form elements of 'thisform' and determine
		which of them have 'required' or 'email' classes */

	for (var i = 0; i < thisform.length; i++) {
		var me = thisform[i];

		if (me.className.indexOf('required') > -1) {

			if (validate_required(me) == false) {
				return false;
			}
		}

		if (me.className.indexOf('email') > -1) {
			if (validate_email(me) == false) {
				return false;
			}
		}
	}
}


function validate_required(field) {

	with (field) {
		if (value==null || value=="" || value==" ") {
			field.className+=" error";
			field.focus();
			return false;
		}
		else {
			field.className = field.className.replace(new RegExp("error\\b"), "");
			return true;
		}
	}
}


function validate_email(field) {

	with (field) {

		if (field.value.indexOf(".") > 2 && field.value.indexOf("@") > 0) {
			field.className = field.className.replace(new RegExp("error\\b"), "");
			return true;
		}
		else {
			field.className+=" error";
			field.focus();
			return false;
		}
	}
}


function checkFormsOnEnter() {
	if (!document.getElementsByTagName) return false;

	var forms = document.getElementsByTagName('form');

	for (var i = 0; i < forms.length; i++) {
		forms[i].onkeydown = function(event) {

			var evt = event || window.event;

			if (evt) {
				var target = evt.target || evt.srcElement;

				switch (evt.keyCode) {
					case 13:
						if (target.tagName == "TEXTAREA" || target.tagName == 'textarea' ) {
							return true;
						}

						else {
							validateForm(this);
							break;
						}
				}
			}
		}
	}
}addLoadEvent(function(){checkFormsOnEnter();});