function validateForm(form)
{	
	//re represents an array of required elements
	//each element consists of a 2 element array. element 0 is the required field ID
	//element 1 is the field name to display in an alert box.
	var re = 
	[
	["email","Email address"], 
	["firstname","First Name"],
	["lastname","Last Name"],
	["companyname","Company Name"],
	["address1","Address"],
	["city","City"],  
	["state","State"], 
	["zipcode","Zip Code"],
	["country","Country"],
	["phone","Phone Number"],
	["taxid","Resale Tax ID#"]
	];	
	for(i=0;i<re.length;i++)
	{
		if (form[re[i][0]].value == "")
		{
			alert(re[i][1] + " is a required field.");
			form[re[i][0]].focus();
			return false;
		}	
	}
	//check for valid email address
	if (IsEmailAddressValid(form["email"].value)!=true)
	{
		alert("Email address is not valid.");
		form["email"].focus();
		return false;
	}
	//check for valid taxid length
	if (IsFieldMinLen(form["taxid"].value,5)!=true)
	{
		alert("Resale Tax ID# is not valid.")
		form["taxid"].focus();
		return false;
	}
	
	//check if taxID is text only
	if (IsTextOnly(form["taxid"].value))
	{	
		alert("Resale Tax ID# is not valid.")
		form["taxid"].focus();
		return false;
	}
	
	//check for bad numbers like 00000 11111 22222 etc
	if (IsBadNumbers(form["taxid"].value))
	{	
		alert("Resale Tax ID# is not valid.")
		form["taxid"].focus();
		return false;
	}
	
	//check if numbers are sequential	
	if (AreNumbersSequential(form["taxid"].value))
	{
		alert("Resale Tax ID # is not valid.")
		form["taxid"].focus();
		return false;
	}
	
	//check for special characters like anything other than a-z 1-9
	if (IsBadChars(form["taxid"].value))
	{	
		alert("Resale Tax ID# is not valid.")
		form["taxid"].focus();
		return false;
	}
	
	//check if checkbox for legalID is checked	
	if (document.frm["legalID"].checked != true)
	{
		alert("You must indicate this Resale Tax ID# is legally yours.")
		form["legalID"].focus();
		return false;
	}
	
	document.frm.isPostBack.value=1;
	return true;
}

//generic email validator function using regex
function IsEmailAddressValid(EmailToCheck)
{
    var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
    return re.test(EmailToCheck);
}

//checks for minimum length of field
function IsFieldMinLen(formelement,minlength)
{
	if(formelement.length<minlength)
	{
		return false;
	}
	return true;		
}

//check for all text entries or words and spaces
function IsTextOnly(texttocheck)
{	
	var re1 = /^([a-zA-Z ]{1,})$/g
	return re1.test(texttocheck);
}

//check for repeated or sequential numbers
function IsBadNumbers(texttocheck)
{	
	var re2 = /^([0]{5,}|[1]{5,}|[2]{5,}|[3]{5,}|[4]{5,}|[5]{5,}|[6]{5,}|[7]{5,}|[8]{5,}|[9]{5,})$/g
	return re2.test(texttocheck);
}

//check for special characters
function IsBadChars(texttocheck)
{
	var re3 = /[^a-zA-Z0-9\s\-]/g
	return re3.test(texttocheck);
}

//check for sequential numbers
function AreNumbersSequential(texttocheck)
{
	var re4 = /^(.*01234.*|.*12345.*|.*23456.*|.*34567.*|.*45678.*|.*56789.*|.*67890.*|.*43210.*|.*54321.*|.*65432.*|.*76543.*|.*87654.*|.*98765.*|.*09876.*)$/g
	return re4.test(texttocheck);

}