function trim(inputString)
{
	if (arguments[1])
	{
		removeChar = arguments[1];
	}
	else
	{
		removeChar = ' ';
	}
	var returnString = inputString;
	if (removeChar.length)
	{
		while(''+returnString.charAt(0)==removeChar)
		{
			returnString=returnString.substring(1,returnString.length);
		}
		while(''+returnString.charAt(returnString.length-1)==removeChar)
		{
			returnString=returnString.substring(0,returnString.length-1);
		}
	}
	return returnString;
}

function addLoadEvent(func)
{
	var oldonload = window.onload;
	if (typeof window.onload != 'function')
	{
		window.onload = func;
	}
	else
	{
		window.onload = function() 
		{
			oldonload();
			func();
		}
	}
}

function addSelectNavigation()
{
	var selectObj = document.getElementById('select_navigation');
	if (selectObj)
	{
		selectObj.onchange = function()
		{
			if (this.options[this.selectedIndex].value != '')
			{
				document.location.href=this.options[this.selectedIndex].value;
			}
		}
		var okObj = document.getElementById('submit_select_navigation');
		if (okObj) 
		{
			okObj.style.display='none';
		}
	}
}

function addConfirmRemove()
{
	var links = document.getElementsByTagName('a');
	for (var i=0; i<links.length; i++)
	{
		if (links[i].className.indexOf('remove') > -1)
		{
			links[i].onclick = function()
			{
				return confirm('Weet u zeker dat u dit item wilt verwijderen?');
			}
		}
	}
}

function addHelp()
{
	var links = document.getElementsByTagName('a');
	for (var i=0; i<links.length; i++)
	{
		if (links[i].className.indexOf('help') > -1)
		{
			links[i].onmouseover = function()
			{
				this.firstChild.style.display='block';
			}
			links[i].onmouseout = function()
			{
				this.firstChild.style.display='none';
			}
		}
	}
}

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='warning';
	var errorClass='error';
	var errorMsg='Sommige velden zijn 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)
	{
		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;
}

function addOnChangeLanguage()
{
	var languageObject = document.getElementById('set_language');
	if (languageObject)
	{
		languageObject.onchange = function()
		{
			var form_select_language = document.getElementById('form_select_language');
			if (form_select_language)
			{
				form_select_language.submit();
			}
		}
		var submit_button = document.getElementById('submit_language');
		if (submit_button)
		{
			submit_button.style.display='none';
		}
	}
}

function addOnChangeSubmit(selectObj, submitObj)
{
	if (selectObj && submitObj)
	{
		selectObj.onchange = function()
		{
			var enumParent = this.parentNode;
			while (enumParent && enumParent.nodeName != 'FORM')
			{
				enumParent = enumParent.parentNode;
			}
			enumParent.submit();
		}
		submitObj.style.display='none';
	}
}

function countNumbers(string)
{
	var count = 0;
	for (var i = 0; i < string.length; i++)
	{
		if (!isNaN(string.charAt(i))) { count++; }
	}
	return count;
}

function checkPostalCode(string)
{
	if (string.length != 6) { return false; }
	return string.match(/^[0-9]{4}[a-z]{2}$/i);
}

function getAjax()
{
	if (window.XMLHttpRequest)
	{
		var xmlReq = new XMLHttpRequest();
	} 
	else if (window.ActiveXObject) 
	{
		var xmlReq = new ActiveXObject('Microsoft.XMLHTTP');
	}
	return xmlReq;
}

addLoadEvent(addOnChangeLanguage);
addLoadEvent(addOnSubmitForm);
addLoadEvent(addConfirmRemove);
addLoadEvent(addSelectNavigation);
addLoadEvent(addHelp);
