		
function validate() {
	var fname = document.getElementById('fname');
	var lname = document.getElementById('lname');
	var address = document.getElementById('address');
	var city = document.getElementById('city');
	var state = document.getElementById('state');
	var zip = document.getElementById('zip');
	var phone = document.getElementById('phone');
	var email = document.getElementById('email');
	var signup = document.getElementById('signup');
	
	//border definitions
	normal = "1px solid #7F9DB9";
	red = "1px solid #f00";
	
	//regex patterns
	var namePattern = /^[a-zA-Z|\s]{3,50}$/;
	var addressPattern = /^[a-zA-z|#|.|\s|\d]{3,100}$/;
	var zipPattern = /^([0-9]{5})?[-|0-9]{5}$/;
	var phonePattern = /^((\(\d{3}\) ?)|(\d{3}|[- \.]))?\d{3}|[- \.]\d{4}(\s(x\d+)?){0,1}$/;
	var emailPattern = /^[a-zA-Z][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$/;
	
	if (signup.checked) {
		document.getElementById('signupContainer').style.backgroundColor="#fff";
		signup.value=true;
		
		if (namePattern.test(fname.value)) {
			good(fname);
			
			if (namePattern.test(lname.value)) {
				good(lname);
				
				if (addressPattern.test(address.value)) {
					good(address);
					
					if (namePattern.test(city.value)) {
						good(city);
						 if (namePattern.test(state.value)) {
							 good(state);
							 
							 if (zipPattern.test(zip.value)) {
								 good(zip);
								 
								 if (phonePattern.test(phone.value)) {
									 good(phone);
									 
									 if ((email.value.length == 0) || (emailPattern.test(email.value))) {
										 good(email);
										 sendForm();
									 } //end email
									 else {
										 bad(email);
										 return false;
									 }
								 } //end phone
								 else {
									 bad(phone);
									 return false;
								 }
							 } //end zip
							 else {
								 bad(zip);
								 return false;
							 }						 
						 } //end state
						 else {
							 bad(state);
							 return false;
						 }
					} //end city
					else {
						bad(city);
						return false;
					}
				} //end address
				else {
					bad(address);
					return false;
				}
			}  //end lname
			else {
				bad(lname);
				return false;
			}
		} //end fname
		else {
			bad(fname);
			return false;
		}
	} //end signup checkbox
	else {
		document.getElementById('signupContainer').style.backgroundColor="#f00";
		signup.focus();
		return false;
	}
	
	return false;
}

function good(what) {
	what.style.backgroundColor="#fff";
	what.style.color="#000";
}

function bad(what) {
	what.style.backgroundColor="#f00";
	what.style.color="#fff";
	what.focus();
}

function sendForm() {
	var xmlHttp;
	try {
		// Firefox, Opera 8.0+, Safari
		xmlHttp=new XMLHttpRequest();
	}
	catch (e) {
		// Internet Explorer
		try {
			xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (e) {
			try {
				xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (e) {
				alert("Your browser does not support AJAX!");
				return false;
			}
		}
	}
	xmlHttp.onreadystatechange=function() {
		if(xmlHttp.readyState==4 && xmlHttp.status == 200) {
			try {
				document.getElementById('container').innerHTML=xmlHttp.responseText;
			}
			catch (e) {
			
			}
		}
	}
	//i had a "loader" spinning type of graphic that displayed while the ajax was loading.
	//document.getElementById('formHolder').innerHTML="<h1 id=\""+what+"\">Loading&nbsp;<img src=\"images/"+what+"-loader.gif\" alt=\"...\" /></h1>";
	
	var fname = document.getElementById('fname');
	var lname = document.getElementById('lname');
	var address = document.getElementById('address');
	var city = document.getElementById('city');
	var state = document.getElementById('state');
	var zip = document.getElementById('zip');
	var phone = document.getElementById('phone');
	var email = document.getElementById('email');
	var signup = document.getElementById('signup');
	
	var params = "fname=" + fname.value;
	params += "&lname=" + lname.value;
	params += "&address=" + address.value;
	params += "&city=" + city.value;
	params += "&state=" + state.value;
	params += "&zip=" + zip.value;
	params += "&phone="+phone.value;
	params += "&email="+ email.value;
	params += "&signup=" + signup.value;
	params += "&agree=0";
	
	//this is the server-side file that will send you back data.
	xmlHttp.open("POST", "ontvSubmit.php", true);
	xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	xmlHttp.send(params);
} //end sendform