	function checkForm() {
		var formElements = document.forms[0].elements;
		var formOK = true;
		var formElementOK = true;
		var name;
		var value;
		var type;
		var required;
		var i = 0;
		var msg = "";
		
		while (formOK && (i < formElements.length)) {
			name  = formElements[i].name;
     		value = formElements[i].value;
     		type  = "";
     		required = false;
			msg   = "";
			if (name.search("form_") != -1) {
				name = name.replace("/form_/g", "");
				
	     		if (name.search("opt_")  != -1) { type = "opt"; name = name.replace("/opt_/g",  "");  }
	     		if (name.search("sel_")  != -1) { 
     				type = "sel"; 
     				name = name.replace("/sel_/g",  "");  
     				value = "filled";
	     		}
	     		if (name.search("email") != -1) { type = "email"; }
	     		if (name.search("ANR")   != -1) { type = "phone"; }
	     		if (name.search("BNR")   != -1) { type = "phoneb"; }
	     		if (name.search("cust")	 != -1) { type = "cust";  }
	
				if (name.search("required_") != -1) {
					name = name.replace("/required_/g", "");
					formElementOK = (value != '');
					msg = "";
					required = true;
				}
				if (formElementOK) {
					switch (type) {
						case "email": 
							formElementOK = isEmail(value); 
							msg = "";
							break;
						case "phone": 
							document.forms[0].elements[i].value = formatPhone(value);
							value = document.forms[0].elements[i].value;
							formElementOK = isPhone(value);
							msg = "";   
							break;
						case "phoneb": 
							//document.forms[0].elements[i].value = formatPhone(value);
							value = document.forms[0].elements[i].value;
							formElementOK = ((isNumber(value)) && (value.length >= 9));							
							msg = "";   
							break;
						case "opt":   
							formElementOK = optionChecked(formElements[i]); 
						   msg = ""; 
						   break;
						case "sel":
							if (required) {
								formElementOK = optionSelected(formElements[i]);
							} else {
								formElementOK = true;
							}
							msg = "";
							break;
						case "cust":
							formElementOK = (value.length == 9) || ((value.length == 0) && !required);
							msg = "";
							break;
					}		
				}
				formOK = formOK && formElementOK;
			}
			i++;
	   }	   
	   if (!formOK) {
	   	alert(msg);
	   	formOK = false;
	   }
	   return formOK;
	}

	function isEmail(address) {
		var isValid = false;
		// basic checks (relying on lazy evaluation for correct behaviour!)
		// not empty
		// at least 7 characters (x@yy.zz)
		// has @
		// has only 1 @
		// has at least one . (domain.ext)
		isValid = (address!=null) 
		       && (address.length >= 7) 
		       && (address.indexOf('@')!=-1) 
		       && (address.indexOf('@') == address.lastIndexOf('@'))
		       && (address.indexOf('.')!=-1)
		;
		
		if (isValid) {
			var parts = address.split('@');
			var name  = parts[0].split('.');
			var host  = parts[1].split('.');
			var regName  = new RegExp("^([!#$%&'*+-/0-9=?A-Z^_a-z{}~]+)$"); // at least length 1
			var regLabel = new RegExp("^(^[-0-9A-Za-z][-0-9A-Za-z]+)$"); // at least length 2
			var regExt   = new RegExp("^([A-Za-z]{2,63})$"); // at least length 2
			var i;
			for (i=0; i < name.length; i++) {
				isValid = isValid && (name[i].search(regName) != -1);
			}
			for (i=0; i < host.length-1; i++) {
				isValid = isValid && (host[i].search(regLabel) != -1) && (host[i].length <= 63);
			}
			isValid = isValid && (host[host.length-1].search(regExt) != -1);
		}
		return isValid;
	}
	
	function isPhone(number) {
		
		//scan off the country code
		return true;
		/*
		var number_without = number.substring(0);
		return ( (number_without.length >= ) && (number_without.length <= ) && isNumber(number_without) 
		&& (
	      	
 || 
	      	
	      	)
	       );
	*/
	}
	
	function isNumber(testNumber){
	   var validChars = "0123456789";
	   var valid      = testNumber.length > 0;
		var i          = 0;
	   while (valid && (i < testNumber.length)) {
	      valid = (validChars.indexOf(testNumber.charAt(i)) != -1);
	      i++;
	   }
	   return valid;
	}	

	function optionChecked(field) {
		var checked;
		var i = 0;
		while (!checked && (i < document.forms[0].elements[field.name].length)) {
			checked = document.forms[0].elements[field.name][i].checked;
			i++;
		}
		return checked;	
	}
	
	function optionSelected(element) {
		return (element.selectedIndex != 0);
	}

	function formatPhone(number) {
	   var digits = "0123456789";
	   var digit;
	   var parsedNumber = "";
		var firstZeros = true;
		
		// parse out everything that's not a digit
	   for (i=0; i < number.length; i++) {
	      digit = number.charAt(i);
	      if (digits.indexOf(digit) != -1) {
        		parsedNumber += digit;
	      }
	   }
		if (parsedNumber.substr(0,0) == "") { parsedNumber = parsedNumber.substr(0); }
		if (parsedNumber.substr(0,0) == '') { parsedNumber = parsedNumber.substr(0); }
		while (parsedNumber.substr(0,1) == "0") { 
			parsedNumber = parsedNumber.substr(1); 
		}	   
		return "00"+parsedNumber;
	}
		


		
