function checkForm(form) {
	form = $(form);
	var error = false;
	var required = form.getElementsBySelector(".required, .optional");
	for (var i = 0; i < required.length; i++)
	{
		if (!checkField(required[i]))
			error = true;
	}
    //if (!document.getElementsByName('secret_field').item.length > 0) {
	//	error = true;	
	//}	
    //document.body.innerHTML = error;
	return !error;
}

function checkField(field)
{
	var error = false;
	if (field.hasClass("required"))
	{
		if (!checkFieldRequired(field))
			error = true;
	}
	if (field.hasClass("email"))
	{
		if (!checkFieldEmail(field))
			error = true;
	}
	if (field.hasClass("postcode"))
	{
		if (!checkFieldPostcode(field))
			error = true;
	}
	if (field.hasClass("phonenumber"))
	{
		if (!checkFieldPhoneNumber(field))
			error = true;
	}
	if (field.hasClass("integer"))
	{
		if (!checkFieldInteger(field))
			error = true;
	}
	if (field.hasClass("float"))
	{
		if (!checkFieldFloat(field))
			error = true;
	}
/*	if (field.hasClass("currency"))
	{
		if (!checkFieldCurrency(field))
			error = true;
	}
*/
	if (error)
	{
		field.addClass("error")
	}
	else
	{
		field.removeClass("error")
	}

	return !error;
}

function checkFieldEmail(field)
{
	var emailregex = /^[\w-\.\+]+@([\w-]+\.)+[\w]{2,}$/;
	return checkFieldRegex(field, emailregex);
}

function checkFieldPostcode(field)
{
	var postcoderegex = /^[A-Z]{1,2}[0-9][0-9A-Z]? {0,1}[0-9][ABD-HJLNP-UW-Z]{2}$/i;
	return checkFieldRegex(field, postcoderegex);
}

function checkFieldPhoneNumber(field)
{
	var postcoderegex = /^\+?[0-9 -]{5,30}$/;
	return checkFieldRegex(field, postcoderegex);
}

function checkFieldInteger(field)
{
	var postcoderegex = /^[-\+]?[0-9]{1,}$/;
	return checkFieldRegex(field, postcoderegex);
}

function checkFieldFloat(field)
{
	var postcoderegex = /^[-\+]?[0-9]*\.?[0-9]*$/;
	return checkFieldRegex(field, postcoderegex);
}

function checkFieldCurrency(field)
{
	var postcoderegex = /^[0-9]*(\.[0-9]{2})?$/;
	return checkFieldRegex(field, postcoderegex);
}
function checkFieldRegex(field, regex)
{
	var error = false;
	var inputs = field.getElementsBySelector('input[type="text"]');
	for (var j = 0; j < inputs.length; j++)
	{
		if (inputs[j].getValue().length > 0)
		{
			if(!regex.exec(inputs[j].getValue()))
			{
				error = true;
			}
		}
	}
	return !error;
}
function checkFieldRequired(field)
{
	var inputs = field.getElementsBySelector('input[type!="radio"], textarea, select');
	var radios = field.getElementsBySelector('input[type="radio"]');
	var error = false;
	var radiogroups = {};
	for (var j = 0; j < inputs.length; j++) 
	{
		if (inputs[j].tagName == "SELECT")
		{
			if (inputs[j].getValue() == inputs[j].getProperty('default'))
			{
				error = true;
			}
		}
		else if (inputs[j].getValue() == "")
			error = true;
	}
	for (var j = 0; j < radios.length; j++)
	{
		if (radios[j].checked)
		{
			radiogroups[radios[j].name] = true;
		}
		else
		{
			if (!radiogroups[radios[j].name])
			{
				radiogroups[radios[j].name] = false;
			}
		}
	}
	for (var group in radiogroups)
	{
		if (radiogroups[group] == false)
		{
			error = true;
		}
	}
	return !error;
}


