function validateForm(form)
{
	var returnValue = true;
	var errorMessage = 'The following field(s) are required and do not contain valid information:  \n\n';
	var focusField = null;
	var emailFilter=/^.+@.+\..{2,3}$/;
	var illegalChars= /[\(\)\<\>\,\;\:\\\/\"\[\]]/
	var zipUS = /(^\d{5}$)|(^\d{5}-\d{4}$)/;
	var zipCAN = /^\D{1}\d{1}\D{1}\-?\d{1}\D{1}\d{1}$/

	if(!form.firstname.value)
		{
		  errorMessage += ' * First Name\n';
		  if(!focusField)
			focusField = form.firstname;
		  returnValue = false;
		}

	if(!form.lastname.value)
		{
		  errorMessage += ' * Last Name\n';
		  if(!focusField)
			focusField = form.lastname;
		  returnValue = false;
		}

	/***********************************************************************
	*
	*	Email address validation includes:
	*		1. Cannot be blank (required field)
	*		2. Must be properly formed (emailFilter regular expression)
	*		3. Cannot contain illegal characters: ( ) < > [ ] , ; : \ / "
	*
	***********************************************************************/

	if(!form.email.value)
		{
		  errorMessage += ' * E-Mail\n';
		  if(!focusField)
			focusField = form.email;
		  returnValue = false;
		}
	else if (!(emailFilter.test(form.email.value)))
		{
		  errorMessage += ' * E-Mail      (Formatted incorrectly)\n';
		  if(!focusField)
			focusField = form.email;
		  returnValue = false;
		}
	else if (form.email.value.match(illegalChars))
		{
		  errorMessage += ' * E-Mail      (Contains illegal characters)\n';
		  if(!focusField)
			focusField = form.email;
		  returnValue = false;
		}

	if(!form.comment.value)
		{
		  errorMessage += ' * Comments\n';
		  if(!focusField)
			focusField = form.comment;
		  returnValue = false;
		}

	/***********************************************************************
	*
	*	Zip Code validation includes:
	*		1. Cannot be blank (required field)
	*		2. Must be valid US format (5 digits or 5+4 digits)
	*	OR	3. Must be valid Canadian format
	*
	***********************************************************************/

	if(!form.zip.value)
		{
		/*** CAN be blank ***/
		/*
		  errorMessage += ' * Zip Code\n';
		  if(!focusField)
			focusField = form.zip;
		  returnValue = false;
		*/
		}
	else
		{
		  //check for valid US Zipcode
		  if (!(zipUS.test(form.zip.value)))
		  	{
			  //check for valid Canadian Postal code
			  if (!(zipCAN.test(form.zip.value)))
				{
				  errorMessage += ' * Zip Code      (Not a valid US/Canada Postal Code)\n';
				  if(!focusField)
					focusField = form.zip;
				  returnValue = false;
				}
			}
		}

	/***********************************************************************
	*
	*	Phone Number validation includes:
	*		1. Cannot be blank (required field)
	*		2. Must be numeric once stripped of legal characters
	*		3. Must be ten digits once stripped of legal characters
	*
	***********************************************************************/

	if(!form.phone.value)
		{
		/*** CAN be blank ***/
		/*
		  errorMessage += ' * Telephone\n';
		  if(!focusField)
			focusField = form.phone;
		  returnValue = false;
		*/
		}
	else
		{
		  var stripped = form.phone.value.replace(/[\(\)\.\-\ ]/g, '');
		  //strip out acceptable non-numeric characters
		  if (isNaN(parseInt(stripped)))
		  	{
			  errorMessage += ' * Telephone      (Contains illegal characters)\n';
			  if(!focusField)
				focusField = form.phone;
			  returnValue = false;
			}
		  else if (!(stripped.length == 10))
		    {
			  errorMessage += ' * Telephone      (Incorrect length; include area code)\n';
			  if(!focusField)
				focusField = form.phone;
			  returnValue = false;
			}
		}

	/***********************************************************************
	*
	*	If an error has occurred, display to user
	*
	***********************************************************************/

	if(!returnValue)
		{
		  alert(errorMessage);
		  if(focusField)
			focusField.focus();
		}

	return returnValue;
};
