// BEGIN - DEFINE VALID CHARS
var vc_PROPER_NAME = "ABCDEFGHIJKLMNÑOPQRSTUVWXYZabcdefghijklmnñopqrstuvwxyzàáâäçèéêëìíîïòóôöùúûü ',.-"
var vc_TEXT = "ABCDEFGHIJKLMNÑOPQRSTUVWXYZabcdefghijklmnñopqrstuvwxyzàáâäçèéêëìíîïòóôöùúûü0123456789 `~!@#$%^&*()_+-={}|[]:\";'<>¿?!¡,./\\";
var vc_EMAIL = "abcdefghijklmnopqrstuvwxyz0123456789.@_-"
var vc_PHONE_NUMBER = "1234567890 -()"
var vc_ADDRESS = "ABCDEFGHIJKLMNÑOPQRSTUVWXYZabcdefghijklmnñopqrstuvwxyz0123456789àáâäçèéêëìíîïòóôöùúûü ',.-"
var vc_ZIP_CODE = "1234567890 -"
// END - DEFINE VALID CHARS
 
// BEGIN - DEFINE REGULAR EXPRESSIONS
var re_PROPER_NAME = /^.*$/;
var re_TEXT = /^.*$/;
var re_EMAIL = /^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/;
var re_PHONE_NUMBER = /^\d{3,4}-\d{4,6}$|^\d{2,3}\s\d{3,4}-\d{4,6}$|^\(\d{2,3}\)\s\d{2,4}-\d{4,6}$|^\(\d{2,3}\)\s\d{2,3}\s\d{3,4}-\d{4,6}$/;
var re_ADDRESS = /^.*$/;
var re_ZIP_CODE = /^\d{1,5}|\d{1,5}-\d{1,5}$/;
// END - DEFINE REGULAR EXPRESSIONS
 
// BEGIN - DEFINE FORMAT EXAMPLES
var ex_PROPER_NAME = "Any character used in proper names.";
var ex_TEXT = "Pretty much any text...";
var ex_EMAIL = "yourusername@yourserver.com";
var ex_PHONE_NUMBER = "For a local number ###-######, area code and local number ### ###-######, country code and area code and local number (###) ### ###-######. Area code and Country can be of two or three digits. Local number can be 4, 5 or up to 6 digits after the dash.";
var ex_ADDRESS = "Any character used in addresses.";
var ex_ZIP_CODE = "Only numbers or numbers and one space or one dash.";
// END - DEFINE FORMAT EXAMPLES
 
function formValidation(_Form) {
// BEGIN - CHECK REQUIRED DATA
if (_Form.firstname.value == "") {
	alert("First name cannot be empty.");
	_Form.firstname.focus();
	return (false);
	}
if (_Form.lastname.value == "") {
	alert("Last name cannot be empty.");
	_Form.lastname.focus();
	return (false);
	}
if (_Form.email.value == "") {
	alert("E-Mail cannot be empty.");
	_Form.email.focus();
	return (false);
	}
if (_Form.telephone.value == "") {
	alert("Telephone cannot be empty.");
	_Form.telephone.focus();
	return (false);
	}
//if (_Form.fax.value == "") {
//	alert("Fax cannot be empty.");
//	_Form.fax.focus();
//	return (false);
//	}
if (_Form.address1.value == "") {
	alert("Address cannot be empty.");
	_Form.address1.focus();
	return (false);
	}
//if (_Form.address2.value == "") {
//	alert("Address cannot be empty.");
//	_Form.address2.focus();
//	return (false);
//	}
if (_Form.city.value == "") {
	alert("City cannot be empty.");
	_Form.city.focus();
	return (false);
	}
if (_Form.state.value == "") {
	alert("State cannot be empty.");
	_Form.state.focus();
	return (false);
	}
if (_Form.zipcode.value == "") {
	alert("Zip code cannot be empty.");
	_Form.zipcode.focus();
	return (false);
	}
for (i = 0;  i < 6;  i++) {
	eobj = document.getElementById('question'+(i+1));
	if (eobj.value == "") {
		alert("Question #"+(i+1)+" cannot be empty.");
		eobj.focus();
		return (false);
		}
	}
// END - CHECK REQUIRED DATA
 
// BEGIN - CHECK VALID CHARACTERS
for (i = 0;  i < _Form.lastname.value.length;  i++) {
	ch = _Form.lastname.value.charAt(i);
	chFound = vc_PROPER_NAME.indexOf(ch);
		if (chFound == -1)
		{
		alert("In last name the character \"" + ch + "\" is not valid.");
		_Form.lastname.focus();
		return (false);
		}
	}
for (i = 0;  i < _Form.lastname.value.length;  i++) {
	ch = _Form.lastname.value.charAt(i);
	chFound = vc_PROPER_NAME.indexOf(ch);
		if (chFound == -1)
		{
		alert("In last name the character \"" + ch + "\" is not valid.");
		_Form.lastname.focus();
		return (false);
		}
	}
for (i = 0;  i < _Form.email.value.length;  i++) {
	ch = _Form.email.value.charAt(i);
	chFound = vc_EMAIL.indexOf(ch);
		if (chFound == -1)
		{
		alert("In E-Mail the character \"" + ch + "\" is not valid.");
		_Form.email.focus();
		return (false);
		}
	}
for (i = 0;  i < _Form.telephone.value.length;  i++) {
	ch = _Form.telephone.value.charAt(i);
	chFound = vc_PHONE_NUMBER.indexOf(ch);
		if (chFound == -1)
		{
		alert("In telephone the character \"" + ch + "\" is not valid.");
		_Form.telephone.focus();
		return (false);
		}
	}
for (i = 0;  i < _Form.fax.value.length;  i++) {
	ch = _Form.fax.value.charAt(i);
	chFound = vc_PHONE_NUMBER.indexOf(ch);
		if (chFound == -1)
		{
		alert("In fax the character \"" + ch + "\" is not valid.");
		_Form.fax.focus();
		return (false);
		}
	}
for (i = 0;  i < _Form.address1.value.length;  i++) {
	ch = _Form.address1.value.charAt(i);
	chFound = vc_ADDRESS.indexOf(ch);
		if (chFound == -1)
		{
		alert("In address the character \"" + ch + "\" is not valid.");
		_Form.address1.focus();
		return (false);
		}
	}
for (i = 0;  i < _Form.address2.value.length;  i++) {
	ch = _Form.address2.value.charAt(i);
	chFound = vc_ADDRESS.indexOf(ch);
		if (chFound == -1)
		{
		alert("In address the character \"" + ch + "\" is not valid.");
		_Form.address2.focus();
		return (false);
		}
	}
for (i = 0;  i < _Form.city.value.length;  i++) {
	ch = _Form.city.value.charAt(i);
	chFound = vc_PROPER_NAME.indexOf(ch);
		if (chFound == -1)
		{
		alert("In city the character \"" + ch + "\" is not valid.");
		_Form.city.focus();
		return (false);
		}
	}
for (i = 0;  i < _Form.state.value.length;  i++) {
	ch = _Form.state.value.charAt(i);
	chFound = vc_PROPER_NAME.indexOf(ch);
		if (chFound == -1)
		{
		alert("In state the character \"" + ch + "\" is not valid.");
		_Form.state.focus();
		return (false);
		}
	}
for (i = 0;  i < _Form.zipcode.value.length;  i++) {
	ch = _Form.zipcode.value.charAt(i);
	chFound = vc_ZIP_CODE.indexOf(ch);
		if (chFound == -1)
		{
		alert("In zip code the character \"" + ch + "\" is not valid.");
		_Form.zipcode.focus();
		return (false);
		}
	}
for (i = 0;  i < 6;  i++) {
	eobj = document.getElementById('question'+(i+1));
	for (i = 0;  i < eobj.value.length;  i++) {
		ch = eobj.value.charAt(i);
		chFound = vc_TEXT.indexOf(ch);
			if (chFound == -1)
			{
			alert("In question #"+(i+1)+" the character \"" + ch + "\" is not valid.");
			eobj.focus();
			return (false);
			}
		}
	}
// END - CHECK VALID CHARACTERS
 
// BEGIN - CHECK VALID FORMAT
if (!re_PROPER_NAME.test(_Form.firstname.value))
	{
	alert("First name invalid format.\nExample: " + ex_PROPER_NAME);
	_Form.firstname.focus();
	return (false);
	}
if (!re_PROPER_NAME.test(_Form.firstname.value))
	{
	alert("First name invalid format.\nExample: " + ex_PROPER_NAME);
	_Form.firstname.focus();
	return (false);
	}
if (!re_EMAIL.test(_Form.email.value))
	{
	alert("E-Mail invalid format.\nExample: " + ex_EMAIL);
	_Form.email.focus();
	return (false);
	}
if (!re_PHONE_NUMBER.test(_Form.telephone.value))
	{
	alert("Telephone invalid format.\nExample: " + ex_PHONE_NUMBER);
	_Form.telephone.focus();
	return (false);
	}
if (_Form.fax.value != "") {
if (!re_PHONE_NUMBER.test(_Form.fax.value))
	{
	alert("Fax invalid format.\nExample: " + ex_PHONE_NUMBER);
	_Form.fax.focus();
	return (false);
	}
	}
if (!re_ADDRESS.test(_Form.address1.value))
	{
	alert("Address invalid format.\nExample: " + ex_ADDRESS);
	_Form.address1.focus();
	return (false);
	}
if (_Form.address2.value != "") {
if (!re_ADDRESS.test(_Form.address2.value))
	{
	alert("Address invalid format.\nExample: " + ex_ADDRESS);
	_Form.address2.focus();
	return (false);
	}
	}
if (!re_PROPER_NAME.test(_Form.city.value))
	{
	alert("City invalid format.\nExample: " + ex_PROPER_NAME);
	_Form.city.focus();
	return (false);
	}
if (!re_PROPER_NAME.test(_Form.state.value))
	{
	alert("State invalid format.\nExample: " + ex_PROPER_NAME);
	_Form.state.focus();
	return (false);
	}
if (!re_ZIP_CODE.test(_Form.zipcode.value))
	{
	alert("Zip code invalid format.\nExample: " + ex_ZIP_CODE);
	_Form.zipcode.focus();
	return (false);
	}
for (i = 0;  i < 6;  i++) {
	eobj = document.getElementById('question'+(i+1));
	if (!re_TEXT.test(eobj.value))
		{
		alert("Question #"+(i+1)+" invalid format.\nExample: " + ex_TEXT);
		eobj.focus();
		return (false);
		}
	}
// END - CHECK VALID FORMAT
_Form.mode.value = 1;
}