function checkForm(the_form) {
	
	
	var illegalchar = /[\t\v\n\r\f!@$%^*+=|{}\[\]"<>\?\/\\~`]/;
	var numeric = /[0-9]/;
	//email
	if ( (the_form.email) && (the_form.email.value.length == 0))
			{
			alert("Please enter your email address.");
			the_form.email.focus();
			return false;
			}

	if (the_form.email)
		{
		var filter = /^[A-Za-z0-9][A-Za-z0-9\_\-\.]*\@[A-Za-z0-9][A-Za-z0-9\_\-\.]*\.[A-Za-z]{2,3}$/;
		var filter2 = /^.*[\.\@\_\-][\.\@\_\-]+.*$/;
		if( (!filter.test( the_form.email.value ))  || ( filter2.test( the_form.email.value )) )
			{
			alert( "Please enter a valid email address." )
			the_form.email.focus();
			return false;
			}
		}

	// prefix
	if ( (the_form.title) && (the_form.title.selectedIndex < 1) )
		{
			alert("Please enter your prefix (Mr,Ms,etc).");
			the_form.title.focus();
			return false;
		}
        
	// first name
	if ( (the_form.first_name) && (the_form.first_name.value.length == 0) )
		{
		alert("Please enter your first name.");
		the_form.first_name.focus();
		return false;
		}
	
	if ( (the_form.first_name) && ((the_form.first_name.value.length < 2)  || illegalchar.test(the_form.first_name.value)))
		{
		alert("Please enter a valid first name.");
		the_form.first_name.focus();
		return false;
		}
	
	// last name
	if ( (the_form.last_name) && (the_form.last_name.value.length == 0) )
		{
		alert("Please enter your last name.");
		the_form.last_name.focus();
		return false;
		}

	
	if ( (the_form.last_name) && ((the_form.last_name.value.length <  2) || illegalchar.test(the_form.last_name.value)))
		{
		alert("Please enter a valid last name.");
		the_form.last_name.focus();
		return false;
		}
	
	// address 1
	if ( (the_form.address1) && (the_form.address1.value.length == 0) )
		{
		alert("Please enter your address.");
		the_form.address1.focus();
		return false;
		}
	
	if ( illegalchar.test(the_form.address1.value) )
		{
		alert("Please enter a valid address.");
		the_form.address1.focus();
		return false;
		}
	
	
	// city
	if ( (the_form.city) && (the_form.city.value.length == 0) )
		{
		alert("Please enter your home city.");
		the_form.city.focus();
		return false;
		}
	
	
	if ( numeric.test(the_form.city.value) || illegalchar.test(the_form.city.value))
		{
		alert("Please enter a valid city.");
		the_form.city.focus();
		return false;
		}

	
	// state
	if ( (the_form.state) && (the_form.state.selectedIndex < 1) )
		{
		alert("Please enter your home state.");
		the_form.state.focus();
		return false;
		}
	
	// zip
	if ( (the_form.zipcode) && (the_form.zipcode.value.length == 0) )
		{
		alert("Please enter your zip code.");
		the_form.zipcode.focus();
		return false;
		}
	
	// zip
	if ( the_form.zipcode )
	// usa zip code format: ##### or #####-####
	var filter = /^[0-9]{5}(\-[0-9]{4})?$/;
	
	if(  ( !filter.test( the_form.zipcode.value ) )  )
		{
		alert("Please enter a valid zip code.");
		the_form.zipcode.focus();
		return false;
		}
	
	// save the dob values to variables
	month = the_form.dobMonth.options[the_form.dobMonth.selectedIndex].value; 
	day = the_form.dobDay.options[the_form.dobDay.selectedIndex].value; 
	year = the_form.dobYear.options[the_form.dobYear.selectedIndex].value; 
	
	if (month < 1 || month > 12) 
		{ 
		alert("Please select your month of birth.");
		the_form.dobMonth.focus();
		return false;
		}
	if (day < 1 || day > 31) 
		{
		alert("Please select your day of birth.");
		the_form.dobDay.focus();
		return false;
		}
	if ((month==4 || month==6 || month==9 || month==11) && day==31) 
		{
		alert("Month "+month+" doesn't have 31 days!")
		the_form.dobDay.focus();
		return false;
		}
	if (year < 1900)
		{
		alert("Please select your year of birth.")
		the_form.dobDay.focus();
		return false;		
		}
	if (month == 2) // check for february 29th
		{ 
		var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
		if (day>29 || (day==29 && !isleap)) 
			{
			alert("February " + year + " doesn't have " + day + " days!");
			the_form.dobDay.focus();
			return false;
			}
		}
	
	// phone1
	if ( (the_form.phone1) && (the_form.phone1.value.length == 0) )
		{
		alert("Please enter your area code.");
		the_form.phone1.focus();
		return false;
		}
	
	if (the_form.phone1)
		{
		var filter = /^[0-9]{3}$/
		if( !filter.test( the_form.phone1.value ) )
			{
			alert("Please enter a valid area code.");
			the_form.phone1.focus();
			return false;
			}
		}
	
	if ( (the_form.phone2) && (the_form.phone2.value.length == 0) )
		{
		alert("Please enter your telephone prefix.");
		the_form.phone2.focus();
		return false;
		}

	// phone2
	if (the_form.phone2)
		{
		var filter = /^[0-9]{3}$/
		if( !filter.test( the_form.phone2.value ) )
			{
			alert("Please enter a valid telephone prefix.");
			the_form.phone2.focus();
			return false;
			}
		}
	
	//phone3
	if ( (the_form.phone3) && (the_form.phone3.value.length == 0) )
		{
		alert("Please enter the last 4 digits of your telephone.");
		the_form.phone3.focus();
		return false;
		}
	
	if (the_form.phone3)
		{
		var filter = /^[0-9]{4}$/
		if( !filter.test( the_form.phone3.value ) )
			{
			alert("Please enter a valid telephone number.");
			the_form.phone3.focus();
			return false;
			}
		}

	// button text change + disable
	if ( document.main_form.Submit ) 
	{
		 document.main_form.Submit.value='Please wait...'; 
		 document.main_form.Submit.disabled=true; 
	}
	
	
	return true;
}
