	var W3CDOM = (document.getElementsByTagName && document.createElement);

//window.onload = function () {
	//document.forms[0].onsubmit = function () {
	//	return validate()
	//}
//}
//validates the form
function validate(formName) {
	validForm = true;
	firstError = null;
	errorstring = '';
	if (document.forms[formName])		
		var x = document.forms[formName].elements;
	else 	//if multiple forms with the same name, use ID instead 
		var x = document.getElementById('formName').elements;
	for (var i=0;i<x.length;i++) {
	    //checks to see if it is a required field
	  x[i].value = x[i].value.replace(/^\s+|\s+$/g, ''); //trim spaces before & after 
		if (x[i].id == 'required'){
		     //special handling for checkboxes
			 if (x[i].type == 'checkbox' && x[i].checked == false){
			 writeError(x[i],messReq);
			 }
		     //special handling for radio buttons
		     if (x[i].type == 'radio'){
			 var radiogroup = x[x[i].name];
			 var itemchecked = false;
             for(var j = 0 ; j < radiogroup.length ; ++j) {
             if(radiogroup[j].checked) {
             itemchecked = true;
             break;
			 }
			 }
			 if(!itemchecked) { 
			 var lastRadio = radiogroup.length-1;
			 //alert(lastRadio);
			 writeError(radiogroup[lastRadio],messRadio);
			 }
			  }
			else if (!x[i].value){
			writeError(x[i],messReq);
			}
	  }
	
	  //Is this a required number
	  else if (x[i].id == 'number'){
	  var isDigit=/^[0-9]+$/g //regular expression defining a number
      if (x[i].value.search(isDigit)==-1) //if match failed
	  writeError(x[i],messNum);
	  }
	  //Is this a optional number
	  else if (x[i].id == 'optNumber' && x[i].value){
	  var isDigit=/^[0-9]+$/g //regular expression defining a number
      if (x[i].value.search(isDigit)==-1) //if match failed
	  writeError(x[i],messNum);
	  }
	  //is it a letter
	  else if (x[i].id == 'alpha'){
	  var isAlpha=/^[a-zA-z]+$/g //regular expression defining a letter
      if (x[i].value.search(isAlpha)==-1) //if match failed
	  writeError(x[i],messAlpha);
	  }
	  //Is this a number or letter or _ (password) use this for username also
	  else if (x[i].id == 'password'){
	  var isPass=/^[a-zA-Z0-9_]+$/g //regular expression defining a number
      if ((x[i].value.search(isPass)==-1) && (x[i].value)){ //if match failed
	  writeError(x[i],messPass);
	  }
	  else if ((x[i].value.search(isPass)!=-1) && (x[i].value.length < 8)){
	  writeError(x[i],messMin8);
	  }
	  else if ((x[i].value.search(isPass)==-1) && (!x[i].value)){ //if match failed
	  writeError(x[i],messReq);
	  }
	  }
	   //Is this a netteller account
	  else if (x[i].id == 'nettellerAcc'){
	  var isNetA=/^[0-9]+$/g //regular expression defining a number
      if (x[i].value.search(isNetA)==-1){ //if match failed
	  writeError(x[i],messNetA);
	  }
	  else if ((x[i].value.search(isNetA)!=-1) && (x[i].value.length < 12)){
	  writeError(x[i],messNetA);
	  }
	  }
	  //Is this a phone, fax or cell number
	  else if (x[i].id == 'nettellerId'){
	  var isDigit=/^[0-9]+$/g //regular expression defining a number
      if (x[i].value.search(isDigit)==-1){ //if match failed
	  writeError(x[i],messNum);
	  }
	  else if ((x[i].value.search(isDigit)!=-1) && (x[i].value.length < 6)){
	  writeError(x[i],messMin6);
	  }
	  }
	  //Is this a phone number
	  else if (x[i].id == 'phone'){
	  //var isPhone=/^(\+\d{1,3} ?)?(\(\d{1,5}\)|\d{1,5}) ?\d{3} ?\d{0,7}?$/i //regular expression defining a number
      //if (x[i].value.search(isPhone)==-1){ //if match failed
			var isPhone= /^\+?\d{8,20}$/   //regular expression defining a number with lengh of 8-20
			var str = x[i].value.replace(/[\s\.\-\_\(\)]/g, "")	//trim string by chop off all space, dot, dash, braket...
      if (str.length < 1 || str.search(isPhone)==-1){ //if match failed
	  writeError(x[i],messPhone);
	  }
	  else if ((x[i].value.search(isPhone)!=-1) && (x[i].value.length < 8)){
	  writeError(x[i],messMin8);
	  }
	  }
	  //Is this a phone number (optional)
	  else if (x[i].id == 'optPhone'&& x[i].value){
	  //var isPhone=/^(\+\d{1,3} ?)?(\(\d{1,5}\)|\d{1,5}) ?\d{3} ?\d{0,7}?$/i //regular expression defining a number
      //if (x[i].value.search(isPhone)==-1){ //if match failed
			var isPhone= /^\+?\d{8,20}$/   //regular expression defining a number with lengh of 8-20
			var str = x[i].value.replace(/[\s\.\-\_\(\)]/g, "")	//trim string by chop off all space, dot, dash, braket...
      if (str.search(isPhone)==-1){ //if match failed
	  writeError(x[i],messPhone);
	  }
	  }	  
	   //is it a number with 2 decimle places (float)
	  else if (x[i].id == 'float'){
	  var isFloat=/^\d+(\.\d{0,2})?$/ ;//regular expression defining a number
	  if (x[i].value.search(isFloat)==-1) {//if match failed
	  writeError(x[i],messFloat);
	  }}
	  //is it a number with 2 decimle places (float) (optional)
	  else if (x[i].id == 'optFloat' && x[i].value){
	  var isFloat=/^\d+(\.\d{0,2})?$/ ;//regular expression defining a number
	  if (x[i].value.search(isFloat)==-1){//if match failed
	  writeError(x[i],messFloat);
	  }}
	  //is it a number within an allowed range
	  else if (x[i].id == 'range'){
	  if (x[i].value < parseFloat(document.forms[formName].minAmt.value))//if match failed
	  writeError(x[i],'The ' + x[i].name + ' must be within your limits');
	  else if (x[i].value > parseFloat(document.forms[formName].maxAmt.value))//if match failed
	  writeError(x[i],messRange);
	  }
	  //is it Loyalty Points
	  else if (x[i].id == 'loyaltyPts'){
	  //var isDigit=/^[0-9\,]+$/g ;//regular expression defining a number
	  var isFloat=/^\d+(\.[0]{2})?$/ ;//regular expression defining a number
	  if (x[i].value.search(isFloat)==-1) {//if match failed
	  writeError(x[i],messNum);
	  }
	  else if ((x[i].value.search(isFloat)!=-1) && (x[i].value > parseFloat(document.forms[formName].pointsAquired.value)))	
	  {//if match failed
	  writeError(x[i],messPt);
	  }}
	  //is it a transfer amount - validate against min/max range
	  else if (x[i].id == 'amount'){
	  var isFloat=/^\d+(\.\d{1,2})?$/ ;//regular expression defining a number
	  if (x[i].value.search(isFloat)==-1){//if match failed
	  writeError(x[i],messFloat);
	  }
	  else if ((x[i].value.search(isFloat)!=-1) && ((x[i].value < parseFloat(document.forms[formName].minAmt.value))||(x[i].value > parseFloat(document.forms[formName].maxAmt.value)))) {//if match failed
	  writeError(x[i],messRange);
	  }}
	  // is it an email
	  else if (x[i].id == 'email'){
	  var isEmail=/^[\w-]+(\.[\w-]+)*@([\w-]+\.)+[a-zA-Z]{2,7}$/ ;//regular expression defining a number
	  if (x[i].value.search(isEmail)==-1) {//if match failed
	  writeError(x[i],messEmail);
	  }
	 }
	  // is it the self exclusion
	  else if (x[i].id == 'selfExclDays'){
  	var isDigit=/^[0-9]+$/g //regular expression defining a number
		if ( (x[i].value.search(isDigit)==-1) || (x[i].value < 1) || (x[i].value > 90)) {//if not between 1 and 90
	  writeError(x[i],messSelfEx);
		}
	 }	 
	 //Moneybooker
	 else if (x[i].id == 'mbAcc'){
	  var isEmail=/^[\w-]+(\.[\w-]+)*@([\w-]+\.)+[a-zA-Z]{2,7}$/ ;//regular expression defining a number
	  if (x[i].value.search(isEmail)==-1) {//if match failed
	  writeError(x[i],messMB);
	  }
	 }
	 //Poker Choose Nick
	 else if (x[i].id == 'pkNic'){
	  var isString=/^[A-Za-z0-9\\$@_\\+\\*-]{3,11}$/ ;//regular expression defining a number
	  if (x[i].value.search(isString)==-1) {//if match failed
	  writeError(x[i],messPKNIC);
	  }
	 }
	 //check matching entries
	 else if (x[i].id == 'match'){
        if (!x[i].value){
			writeError(x[i],messReq);
		}
		if (x[i].value != x[i-1].value){	  	
	  		writeError(x[i],messMatch);
	  	}	 	 
	 }	 
	}
	if (!W3CDOM)
		alert(errorstring);
	if (document.getElementById("errorTop").className=="errorSys"){
	    window.scrollTo(0,0)
		}
	else if (firstError){
		firstError.focus();
		}
	if (validForm){
	    //disable the submit button
	    //screen thru every element in the form, and hunt down "submit"
          if (document.all||document.getElementById){
            //screen thru every element in the form, and hunt down "submit"
            for (i=0;i<document.forms[formName].length;i++){
            var tempobj=document.forms[formName].elements[i]
               if(tempobj.type!=null && tempobj.type.toLowerCase()=="submit"){
               //disable em
               tempobj.disabled=true;
               tempobj.value="Processing";
		       }
			   
			   if(tempobj.value.toLowerCase()=="submit"){
               //disable em
               tempobj.remove();
		       }
           }
         }
		 
		//hide the error message
		if (document.getElementById("errorTop").className="errorSys")
		document.getElementById("errorTop").className="errorHide";
		
		//submit the form 
	   document.forms[formName].submit();
	   }
}

function writeError(obj,message) {
	validForm = false;
	if (obj.hasError) return;
	if (W3CDOM) {
		obj.className += ' error';
		obj.onchange = removeError;
		var sp = document.createElement('div');
		sp.className = 'error';
		sp.appendChild(document.createTextNode(message));
		obj.parentNode.appendChild(sp);
		obj.hasError = sp;
		//show the top error message
		//but not is a system error is there
		if (!document.getElementById("errorSys"))
		document.getElementById("errorTop").className="errorSys";
		if (document.getElementById("message")){
		document.getElementById("message").style.display="none";
		document.getElementById("errorTop").className="errorSys";
		}
	}
	else {
		errorstring += obj.name + ': ' + message + '\n';
		obj.hasError = true;
	}
	if (!firstError)
		firstError = obj;
}

function removeError()
{
	this.className = this.className.substring(0,this.className.lastIndexOf(' '));
	this.parentNode.removeChild(this.hasError);
	this.hasError = null;
	this.onchange = null;
}
