function validate(f){
	// Validate FirstName
f.first.value=cleanVar(f.first.value);
	if(f.first.value=='') {
		alert("Please enter a First Name.");
		f.first.focus();
		return false;
	}
	
	// Validate Lastname
f.last.value=cleanVar(f.last.value);
	if(f.last.value=='') {
		alert("Please enter a Last Name.");
		f.last.focus();
		return false;
	}
	
	// Validate Organization
f.organization.value=cleanVar(f.organization.value);
	if(f.organization.value=='') {
		alert("Please enter a Organization.");
		f.organization.focus();
		return false;	
	}
	
	// Validate Email
	validate_form(f);	
	
	// required phone
	f.phone.value=cleanVar(f.phone.value);
	fp=formatPhone(f.phone.value);
	if(fp=='') {
		alert("Please enter a valid Work Phone.")
		f.phone.select();
		return false;
	} else {
		f.phone.value=fp;
	}
	
	// Validate Address
	f.address.value=cleanVar(f.address.value);
	if(f.address.value=='') {
		alert("Please enter an Address.");
		f.address.focus();
		return false;
	}
	
	// Validate City
	if(f.city.value=='') {
		alert("Please enter a City.");
		f.city.focus();
		return false;
	}
	
	f.zip.value=cleanVar(f.zip.value.toUpperCase());
	if (!validateZip(f.zip.value)) {
		alert("Please enter a valid Zip.");
		f.zip.select();
		return false;
	}

}

function cleanVar(cleaned) {
	//remove beginning and ending spaces and white space characters
	return cleaned.replace(/^[ ]*([^ ]*)[ ]*$/, "$1").replace(/\s*/, "");
}

function validateZip(z) {
	
	filter=/^[0-9]{5}-?[0-9]{4}$|^[0-9]{5}$|^[A-Z][0-9][A-Z][ ]?[0-9][A-Z][0-9]$|^[A-Z]{1,2}[0-9][0-9A-Z]? ?[0-9][A-Z]{2}$/
	
	return filter.test(z);

}

function validate_email(field,alerttxt)
{
with (field)
  {
  apos=value.indexOf("@");
  dotpos=value.lastIndexOf(".");
  if (apos<1||dotpos-apos<2)
    {alert(alerttxt);return false;}
  else {return true;}
  }
}

function validate_form(thisform)
{
with (thisform)
  {
  if (validate_email(email,"Not a valid e-mail address!")==false)
    {email.focus();return false;}
  }
}

function formatPhone(p) {
	p=cleanVar(p);
	re0=/^([^0-9\+\(]+)([0-9\+\(]+)(.+)$/
	if(p.match(re0)){
		oldp=p;
		p=cleanVar(p.replace(re0,"$2$3 $1"));
		alert("FYI: Moving non-phone text to after phone number:\nOld:  "+oldp+"\nNew: "+p);
	}
	//phone with area code
	re1=/^(?:(?:(?:\+1)|(?:1))[ .\-]?)?\(?([2-9]\d{2})(?:(?:\) ?)||[ .\-])([2-9]\d{2})[ .\-]?(\d{4})(( \D.*)?)$/;
	//phone w/o area code
	re2=/^([2-9]\d{2})[ .\-]?(\d{4})(( \D.*)?)$/;
	//international phone
	re3=/^\+?(011).+$/;
	if (p.match(re1)) {
		return p.replace(re1,"($1) $2-$3$4"); // format all US and Canada phone numbers the same
	} else if (p.match(re2)) {
		return p.replace(re2,"(801) $1-$2$3"); // if no area code, default to 801
	} else if (p.match(re3)) {
		return p; //international phone number, leave alone
	} else {
		return '';
	}
}
