var colorOptionalFormElement  = "#fff";
var colorValidatedFormElement = "#fff";
var colorDisabledFormElement  = "#eee";
var colorRequiredFormElement  = "#fff";
var colorInvalidFormElement   = "#fcc";

var error             = 0;
var	errorFormElements = "";
var	errorMessage      = "";

function highlight (formElement)
{
	error = 1;
	formElement.style.backgroundColor = colorInvalidFormElement;
}

function unhighlight (formElement)
{
	if (formElement.type != "checkbox"	&&
		formElement.type != "radio"		)
	{
		if (formElement.getAttribute("rel") == "required")
		{
			formElement.style.backgroundColor = colorRequiredFormElement;
		}
		else
		{
			formElement.style.backgroundColor = colorOptionalFormElement;
		}
	}
	else
	{
		formElement.style.backgroundColor = colorValidatedFormElement;
	}
	formElement.title = "";
}

function checkEmailAddress (formElement)
{
	if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(formElement.value) == false)
	{
		highlight(formElement);
		formElement.title = "Ongeldig formaat";
		errorFormElements += "'" + formElement.name + "'|";
	}
	else
	{
		unhighlight(formElement);
	}
}

function check (formElement)
{
	if (formElement.getAttribute("rel") == "required")
	{
		if (formElement.type == "text" || formElement.type == "textarea")
		{
			if (formElement.value == "")
			{
				highlight(formElement);
				formElement.title = "Required field";
				errorFormElements += "'" + formElement.name + "'|";
			}
			else
			{
				unhighlight(formElement);
				if (formElement.name == "email")
				{
					checkEmailAddress(formElement);
				}
			}
		}
		if (formElement.type == "checkbox")
		{
			if (!formElement.checked)
			{
				highlight(formElement);
				formElement.title = "Required field";
				errorFormElements += "'" + formElement.name + "'|";
			}
			else
			{
				unhighlight(formElement);
			}
		}
		if (formElement.type == "radio")
		{
			var radiochecked = false;
			for (var i = formElement.length-1; i > -1; i--)
			{
				if (formElement[i].checked)
				{
					radiochecked = true;
				}
			}
			if (!radiochecked)
			{
				highlight(formElement);
				formElement.title = "Required field";
				errorFormElements += "'" + formElement.name + "'|";
			}
			else
			{
				unhighlight(formElement);
			}
		}
		if (formElement.type == "select-one" || formElement.type == "select-multiple")
		{
			if (formElement.selectedIndex == -1 || formElement.options[formElement.selectedIndex].value == "")
			{
				highlight(formElement);
				formElement.title = "Required field";
				errorFormElements += "'" + formElement.name + "'|";
			}
			else
			{
				unhighlight(formElement);
			}
		}
	}
}

function checkForm (formObject)
{
	error             = 0;
	errorFormElements = "";
	errorMessage      = "";
	
	for (var i = 0 ; i < formObject.elements.length ; i++)
	{
		if (formObject.elements[i].getAttribute("rel") == "required")
		{
			check(formObject.elements[i]);
		}
	}
	if (error == 0)
	{
		return true;
	}
	else
	{
		errorFormElements = errorFormElements.substr(0,errorFormElements.length-1);
		var errorFormElementsArray = errorFormElements.split("|");
		if (errorFormElementsArray.length == 1)
		{
			var errorText = "We kindly request you to enter the field ";
			errorText += errorFormElementsArray[0].replace(/_/g,' ');
		}
		else
		{
			var errorText = "We kindly request you to enter the fields ";
			for (var i=0; i<errorFormElementsArray.length-1; i++)
			{
				errorText += errorFormElementsArray[i].replace(/_/g,' ');
				if (i < (errorFormElementsArray.length-2))
				{
					errorText += ", ";
				}
				else
				{
					errorText += ", and " + errorFormElementsArray[i+1].replace(/_/g,' ');
				}
			}
		}
		errorText += ".";
		alert(errorText.replace(/'the checkbox'/g,'the checkbox')+"\n\n"+errorMessage);
		return false;
	}
}

function initForm ()
{
	if (document.forms[0])
	{
		focusSet = 0;
		formObject = document.forms[0];
	
		for (var i = 0 ; i < formObject.elements.length ; i++)
		{
			if (formObject.elements[i].type == "text" 			||
				formObject.elements[i].type == "select-one" 	||
				formObject.elements[i].type == "select-multiple")
			{
				formObject.elements[i].style.backgroundColor = colorOptionalFormElement;
			}
			if (formObject.elements[i].type != "radio"		&&
				formObject.elements[i].type != "checkbox"	)
			{
				if (formObject.elements[i].getAttribute("rel") == "required")
				{
					formObject.elements[i].style.backgroundColor = colorRequiredFormElement;
				}
			}
			if (formObject.elements[i].disabled == true)
			{
				if (formObject.elements[i].type != "button" &&
					formObject.elements[i].type != "submit"	)
				{
					formObject.elements[i].style.backgroundColor = colorDisabledFormElement;
				}
			}

			if (!focusSet							&&
				!formObject.elements[i].disabled	&&
				 formObject.elements[i].type != "hidden")
			{
				formObject.elements[i].focus();
				focusSet = 1;
			}
		}
	}
}