/**************************************************
This script will apply to the first form on the page,
and presently supports inputs of type text, textarea,
radio groups and checkboxes.

To Use:
-- Put onload="listener();" in the <body> tag
-- name required field ids with convention "req_some_field"
-- for alerts, use empty element (i.e. <span>) with
   id="req_some_field_alert" (can go anywhere)
-- To validate an email, use id="req_email"
-- To confirm email with second entry, use
   id="req_email_confirm"

That should do it.
***************************************************/

var vForm;
var inputs;
var inputVal;
var inputAlert;

function validateEmail(email)
{
	apos=email.indexOf("@")
	dotpos=email.lastIndexOf(".")
	if (apos<1||dotpos-apos<2)
		return false;
	else
		return true;
}

function checkInput(e)
{
	if (!e) var e = window.event;
	if (e.target) var tg = e.target;
	else if (e.srcElement) var tg = e.srcElement;
	validateInput(tg);
}

function validateInput(curElement)
{
	if(curElement) var tg = curElement;
		
	var valid;
	inputVal = tg.value;
	inputAlert = document.getElementById(tg.getAttribute('id')+"_alert");
	
	var radioCheck = (tg.type == "radio" || tg.type == "checkbox")?true:false;
	
	if (tg.getAttribute('id').indexOf('req_email')==0)
	{	// do email validation
		valid = validateEmail(inputVal)?true:false;
		alertText = "This email is not valid.";
	}
	else if (tg.getAttribute('id').indexOf('req_confirm_email')==0)
	{	// confirm emails match
		var firstEmail = document.getElementById('req_email').value;
		valid = (inputVal==firstEmail || !validateEmail(firstEmail))?true:false;
		alertText = "Emails do not match.";
	}
	else
	{	// any other required field
		valid = (inputVal.length>0)?true:false;
		alertText = "Required";
	}
	
	if(radioCheck)
	{
		var radios = tg.name;
		var userInput = false;
		for (i=0;i<vForm[radios].length;i++) {
			if (vForm[radios][i].checked) {
				userInput = vForm[radios][i].value;
			}
		}
		if (!userInput || userInput == "")
			valid = false;
		else
			valid = true;
	}
		
	if(inputAlert)
		inputAlert.innerHTML = valid?"":alertText;
	//tg.style.border = (valid)?"":"1px solid grey";
	tg.style.background = (valid)?"#ffffff":"#ffff99";
	return valid;
}

var formValid = true;
function validateForm() {
	for(var i=0;i<inputs.length;i++)
	{
		var inputId = inputs[i].getAttribute('id');
		if (inputId && inputId.indexOf('req_')==0)
		{	// this input is required, validate
			var valid = validateInput(inputs[i]);
			if(!valid) return false;
		}
	}
	return true;
}
	
function listener()
{
	vForm = document.forms[0];
	inputs = vForm.elements;
	
	// event listeners for inputs, only apply to inputs with id = "req_%"
	for(var i=0;i<inputs.length;i++)
	{
		var inputId = inputs[i].getAttribute('id');
		if (inputId && inputId.indexOf('req_')==0)
		{	// this input is required, set blur listener
			inputs[i].onblur = checkInput;
			if (inputs[i].captureEvents) inputs[i].captureEvents(Event.BLUR);
		}
	}
	
	vForm.onsubmit = function() {
		if(!validateForm())
		{
			alert('One or more fields are not valid');
			return false;
		}
	}
	if (vForm.captureEvents) vForm.captureEvents(Event.SUBMIT);
}
