var validate_messages;

if (document.getElementById) { window.onload = prepare; }

function prepare()
{
	if (window.init) { init(); }
	if (findElement('validate_form')) { findElement('validate_form').onsubmit = validate; }
}

function validate()
{
	validate_messages = new Array();
	_valid = true;
	_msg = new Array();
	_fieldname = '';
	if (document.getElementsByTagName('LABEL'))
	{
		_label = document.getElementsByTagName('LABEL');
		for (loop=0; loop<_label.length; loop++)
		{
			_validation = new Array();
			_field = '';
			if (_label[loop].className) { _validation = _label[loop].className.split(' '); }
			if (_label[loop].htmlFor) { _field = _label[loop].htmlFor; }
			if (_label[loop].getElementsByTagName('SPAN') && _label[loop].getElementsByTagName('SPAN').length) { _fieldname = _label[loop].getElementsByTagName('SPAN')[0].firstChild.nodeValue; }
			if (_validation.length > 0)
			{
				for (scr = 0; scr < _validation.length; scr++)
				{
					var regex1 = new RegExp(":.*$","g");
					var regex2 = new RegExp("^.*:","g");
					_type = _validation[scr].replace(regex1,'').toLowerCase();
					_attr = _validation[scr].replace(regex2,'');
					if (!validate_field(_field,_fieldname,_type,_attr)) { break; }
				}
			}
		}
	}
	_valid = (validate_messages.length > 0) ? false : true;
	if (!_valid) { alert(validate_messages.join("\n")); }
	return _valid;
}

function validate_field(_field,_fieldname,_type,_attr)
{
	_valid = true;
	_value = '';
	if (!findFormElement(_field)) { return _valid; }
	switch(findFormElement(_field).type)
	{
		case "checkbox":
			_value = (findFormElement(_field).checked) ? 1 : 0;
		break;

		case "select":
		case "select-one":
			_value = findFormElement(_field).options[findFormElement(_field).selectedIndex].value;
		break;

		default:
			_value = findFormElement(_field).value
		break;
	}
	switch(_type)
	{
		case "regexp":
			var regex = new RegExp(_attr,"g");
			if (_value != '' && !regex.test(_value))
			{
				validate_messages.push(validate_errmsg(_field,'Please ensure you have entered the correct value for "'+_fieldname+'"'));
			}
		break;

		case "email":
			var regex = /^((\"[^\"\f\n\r\t\v\b]+\")|([\w\!\#\$\%\&'\*\+\-\~\/\^\`\|\{\}]+(\.[\w\!\#\$\%\&'\*\+\-\~\/\^\`\|\{\}]+)*))@((\[(((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9])))\])|(((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9])))|((([A-Za-z0-9\-])+\.)+[A-Za-z\-]+))$/;
			if (_value != '' && !regex.test(_value))
			{
				validate_messages.push(validate_errmsg(_field,'\'' + _value + '\' is not a valid email address. Please enter another'));
			}
		break;
		
		case "numeric":
			var regex = /^[0-9\.]+$/;
			if (_value != '' && !regex.test(_value))
			{
				validate_messages.push(validate_errmsg(_field,'Please enter a valid number for "'+_fieldname+'"'));
			}
		break;
		
		case "required":
			if (_value == '')
			{
				validate_messages.push(validate_errmsg(_field,'Please enter a value for "'+_fieldname+'"'));
			}
		break;
	}
	return _valid;
}

function validate_errmsg(_field,_msg)
{
	return (findFormElement(_field).alt != '' && findFormElement(_field).alt != undefined) ? findFormElement(_field).alt : _msg;
}
