function trim(str) {
 // skip leading and trailing whitespace
 // and return everything in between
  str=str.replace(/^\s*(.*)/, "$1");
  str=str.replace(/(.*)\s*$/, "$1");
  return str;
}

//function to validate an email address
function validEmail(value) {
   	var format = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9])+$/;
	return format.test( value );
}

// test voor _nederlandse_ postcode/postbus
function validZipcode(zip)
{
	var format = /^(postbus\s\d{4,6}|\d{4}\s?[a-z]{2})$/i;
	return format.test(trim(zip));
}

// test for number, simply reverse isNaN
/*function isNumber(numberField) {
  var theVal = numberField
  return !isNaN(theVal)
}*/

function isNumber(numberField){
   numberField=numberField.replace(/ /g, '').replace(/-/g,'');
  var theVal = numberField
  return !isNaN(theVal)
}

// ------------------------------------------------

function validForm(formElm)
{
	for(var i=0;i<formElm.elements.length;i++)
	{
		elm = formElm.elements[i];
		elmValue = elm.value;
		
		if(elm.className.indexOf("required")>-1)
		{
			// check for type form element
			if(elm.type)
			{ 
				switch(elm.type)
				{
					// input type="text"
					case "text":
					// input type="password"
					case "password":
					// input type="file"
					case "file":
					// textarea
					case "textarea":
						if(trim(elmValue).length<=0){
							elm.focus();
							alert("U bent vergeten "+elm.title+" in te vullen");
							return false;
						}
						break;
					case "checkbox":
						if(!elm.checked)
						{
							elm.focus();
							alert("U bent vergeten "+elm.title+" aan te vinken");
							return false;
						}
						break;
					// select
					case "select-one":
						if(elmValue.length<=0)
						{
							elm.focus();
							alert("U bent vergeten "+elm.title+" te selecteren");
							return false;
						}
						break;
					// select multiple="multiple"
					case "select-multiple":
						if(elm.selectedIndex<0)
						{
							elm.focus();
							alert("U bent vergeten "+elm.title+" te selecteren");
							return false;
						}
						break;
					// input type="radio"
					case "radio":
						var isChecked=false;
						radioList = formElm[elm.name];
						for(var j=0;j<radioList.length;j++)
						{
							radioElm = radioList[j]
							if(radioElm.checked)
							{
								isChecked=true;
								elmValue=radioElm.value;
								break;
							}
						}
						if(!isChecked)
						{
							elm.focus();
							alert("U bent vergeten "+elm.title+" te selecteren");
							return false;
						}
						break;
				}
			}
		}
		
		classList = elm.className.split(" ");
		for(var j=0;j<classList.length;j++)
		{
			switch(classList[j])
			{
				case "validEmail":
					if(!validEmail(elmValue))
					{
						elm.focus();
						alert(elm.title+" is niet geldig");
						return false;
					}
					break;
				case "validZip":
					if(!validZipcode(elmValue))
					{
						elm.focus();
						alert(elm.title+" is niet geldig");
						return false;
					}
					break;
				case "validPhone":
					if(!isNumber(elmValue))
					{
						elm.focus();
						alert(elm.title+" is niet geldig");
						return false;
					}
					break;
			}
		}
	}
}