function forms_init()
{
	fields = document.getElementsByClassName('field');
	for(var i = 0; i < fields.length; i++)
	{
		Event.observe(fields[i], 'focus', function(e){Event.element(e).parentNode.parentNode.addClassName('focused');});
		Event.observe(fields[i], 'blur', function(e){Event.element(e).parentNode.parentNode.removeClassName('focused');});
	}
	forms = document.getElementsByTagName('FORM');
	for(var i = 0; i < forms.length; i++)
	{
		if(forms[i].className == 'validate')
			Event.observe(forms[i], 'submit', function(ev){if(!validateForm(Event.element(ev))){Event.stop(ev);}});
	}
}
Event.observe(window, 'load', function(){forms_init();});

function validateForm(frm)
{
	var valid = true;
	clearValidationErrors(frm);
	var els = frm.getElementsByClassName('validate');
	for(var i = 0; i < els.length; i++)
	{
		var el = els[i];
		var li = el.parentNode.parentNode;
		if(el.hasClassName('required') && (el.value == '' || /^\s*$/.test(el.value)))
		{
			valid = false;
			displayValidationError(li, 'This field is required. Please enter a value.');
		}
		if(!el.hasClassName('required') && (el.value == '' || /^\s*$/.test(el.value)))
			continue;

		if(el.hasClassName('email') && !/^([a-z0-9][-a-z0-9_\\.\\+]*)@([a-z0-9][-a-z0-9\\.]*.(museum|[a-z]{2,4}))$/.test(el.value))
		{
			valid = false;
			displayValidationError(li, 'Please enter a valid email address.');
		}
		if(el.hasClassName('number') && !/^[0-9]+([\.|,][0-9]+)?$/.test(el.value))
		{
			valid = false;
			displayValidationError(li, 'Please enter a valid number.');
		}
	}
	if(!valid)
	{
		//Display main error heading
		var heading = getErrorHeading(frm);
		heading.show();
		heading.scrollTo();
	}
	return valid;
}

function displayValidationError(el, msg)
{
	el.addClassName('error');
	var err = getErrorMsg(el);
	err.innerHTML = msg;
	err.show();
}

function clearValidationErrors(frm)
{
	var errorHead = getErrorHeading(frm);
	errorHead.hide();
	var els = frm.getElementsByTagName('LI');
	for(var i = 0; i < els.length; i++)
	{
		els[i].removeClassName('error');
		var msg = getErrorMsg(els[i]);
		if(msg)
		{
			msg.innerHTML = '';
			msg.hide();
		}
	}
}

function getErrorMsg(el)
{
	var els = el.getElementsByTagName('P');
	for(var i = 0; i < els.length; i++)
	{
		if(els[i].hasClassName('error'))
		{
			return els[i];
		}
	}
}

function getErrorHeading(frm)
{
	var els = frm.getElementsByTagName('LI');
	for(var i = 0; i < els.length; i++)
	{
		if(els[i].hasClassName('errorHd'))
			return els[i];
	}
}
