function checkForm(of)
{
	// Test if DOM is available and there is an element called required
	if(!document.getElementById || !document.createTextNode){return;}
	if(!document.getElementById('required')){return;}

	// Define error messages and split the required fields
	var errorID='foutmelding';
	var errorClass='fout';
	var errorMsg='Sommige velden zijn niet of onvolledig ingevuld.';
	var errorTitle='Dit veld is niet of onvolledig ingevuld';
	var reqfields=document.getElementById('required').value.split(',');

	// Cleanup old mess
	// if there is an old errormessage field, delete it
	if(document.getElementById(errorID))
	{
		var em=document.getElementById(errorID);
		em.parentNode.removeChild(em);
	}
	// remove old images and classes from required fields
	for(var i=0;i<reqfields.length;i++)
	{
		var f=document.getElementById(reqfields[i]);
		if(!f){continue;}
		if(f.nextSibling && /img/i.test(f.nextSibling.nodeName))
		{
			f.parentNode.removeChild(f.nextSibling);
		}
		f.parentNode.className = trim(f.parentNode.className.replace(errorClass, ''));
		//of: f.className.replace(' '+errorClass, '');
	}
	// loop over required fields
	for(var i=0;i<reqfields.length;i++)
	{
		// check if required field is there
		var f=document.getElementById(reqfields[i]);
		if(!f){continue;}
		// test if the required field has an error, 
		// according to its type
		switch(f.type.toLowerCase())
		{
			default:
				if(f.value==''){cf_adderr(f)}				
				else if(f.id.indexOf('email') > -1 && !cf_isEmailAddr(f.value)){cf_adderr(f)}
				else if((f.id.indexOf('telefoon') > -1 || f.id.indexOf('fax') > -1 || f.id.indexOf('mobiel') > -1) && countNumbers(f.value) < 5){cf_adderr(f)}
				else if(f.id.indexOf('postcode') > -1 && !checkPostalCode(f.value)){cf_adderr(f)}
				break;
			case 'textarea':
				if(f.value==''){cf_adderr(f)}							
				break;
			case 'checkbox':
				if(!f.checked){cf_adderr(f)}
				break;
			case 'select-one':
				if(f.selectedIndex <= 0){cf_adderr(f)}
				break;
			case 'select-multiple':
				if(f.selectedIndex < 0){cf_adderr(f)}							
				break;
			case 'radio':
				var radioboxes = document.getElementsByName(f.id);
				var one_checked = false;
				for (var b = 0; b < radioboxes.length; b++)
				{
					if (radioboxes[b].checked)
					{ 
						one_checked = true; 
						break; 
					}
				}
				if (!one_checked){cf_adderr(f)};
				break;
			case 'hidden':
				if (f.value.indexOf(';') == -1) { break; }
				var values = f.value.split(';');
				var one_checked = false;
				for (var a = 0; a < values.length; a++)
				{
					if (document.getElementById(f.name.replace('values', '')+values[a]).checked)
					{
						one_checked = true;
						break;
					}
				}
				if (!one_checked)
				{
					cf_adderr(f);
				}
				break;
		}
	}
	return !document.getElementById(errorID);

	/* Tool methods */
	function cf_adderr(o)
	{
		// colourise the error fields
		if (o.parentNode.className.indexOf(errorClass) == -1)
		{
			o.parentNode.className+=(o.parentNode.className != '' ? ' ':'')+errorClass;
		}

		// Check if there is no error message
		if(!document.getElementById(errorID))
		{
		// create errormessage and insert before submit button
			var em=document.createElement('div');
			em.id=errorID;
			var newp=document.createElement('p');
			newp.appendChild(document.createTextNode(errorMsg))
			em.appendChild(newp);
			// find the submit button 
			for(var i=0;i<of.getElementsByTagName('input').length;i++)
			{
				if(/submit/i.test(of.getElementsByTagName('input')[i].type))
				{
					var submitbutton=of.getElementsByTagName('input')[i];
					break;
				}
			}
			if(submitbutton)
			{
				submitbutton.parentNode.parentNode.insertBefore(em,submitbutton.parentNode);
			}	
		} 
	}
	function cf_isEmailAddr(str) 
	{
		return str.match(/^[\w-]+(\.[\w-]+)*@([\w-]+\.)+[a-zA-Z]{2,7}$/);
	}
}

function addOnSubmitForm()
{
	if (!document.getElementsByTagName) { window.alert('noTags'); return; }
	var forms = document.getElementsByTagName('form');
	for (var i=0; i < forms.length; i++)
	{
		forms[i].onsubmit=function()
		{
			return checkForm(this);
		}
	}
}

function getRadioSelection(radio)
{
	var selection = -1;
	for (var i = 0; i < radio.length; i++)
	{
		if (radio[i].checked)
		{
			selection = i;
		}
	}
	return selection;
}

function toggleCheckAll(name, check)
{
	var values = document.getElementById(name+'values').value;
	if (!values) { return; }
	
	values = values.split(';');
	for (i = 0; i < values.length; i++)
	{
		checkbox = document.getElementById(name+values[i]);
		if (checkbox)
		{
			checkbox.checked=check;
		}
	}
}

function updateToggleCheckAll(name)
{
	var values = document.getElementById(name+'values').value;
	if (!values) { return; }
	
	values = values.split(';');
	var check = true;
	for (i = 0; i < values.length; i++)
	{
		checkbox = document.getElementById(name+values[i]);
		if (!checkbox.checked)
		{
			check=false;
			break;
		}
	}
	var toggle = document.getElementById(name+'_toggle_all');
	toggle.checked = check;
}

addLoadEvent(addOnSubmitForm);
