function formatTelephoneNumber(element, value)
{
	var numberLength = element.value.length;

	if (numberLength != 0)
	{
		if (numberLength < 12)
		{
			if ((value != 8) && (value != 14))
			{
				if (numberLength == 3)
				{
					element.value = element.value + "-";
				}

				if (numberLength == 7)
				{
					element.value = element.value + "-";
				}

				element.focus();
			}
		}
	}
}

function isEmptyField(value)
{
	if (value.length == 0)
	{
		return true;
	}

	for (var i = 0; i < value.length; ++i)
	{
		var character = value.charAt(i);

		if ((character !=" ") && (character != "\t") && (character != "\n") && (character != "\r"))
		{
			return false;
		}
	}

	return true;
}

function validateComments(field)
{
	if (isEmptyField(field.value))
	{
		alert("Comments are required.");
		return false;
	}
	else
	{
		return true;
	}
}

function validateEmailAddress(field)
{
	if (isEmptyField(field.value))
	{
		alert("A valid e-mail address is required.");
		return false;
	}
	else if (field.value.length < 7)
	{
		alert("The supplied e-mail address contains too few characters.");
		return false;
	}
	else if (!valueContainsCharacter(field.value, "@"))
	{
		alert("The supplied e-mail address must contain one \"@\" character.");
		return false;
	}
	else if (!valueContainsCharacter(field.value, "."))
	{
		alert("The supplied e-mail address must contain at least one \".\" character.");
		return false;
	}
	else
	{
		return true;
	}
}

function validateForm()
{
	var fullNameField = document.getElementById("name");
	var emailAddressField = document.getElementById("trueEmail");
	var telephoneNumberField = document.getElementById("phone");
	var zipCodeField = document.getElementById("zip");
	//var commentsField = document.getElementById("comments");

	var isNameValid = validateName(fullNameField);
	var isEmailAddressValid = validateEmailAddress(emailAddressField);
	var isTelephoneNumberValid = validateTelephoneNumber(telephoneNumberField);
	var isZipCodeValid = validateZipCode(zipCodeField);
	//var areCommentsValid = validateComments(commentsField);
	var areCommentsValid = true;
	
	if ((isNameValid) && (isEmailAddressValid) && (isTelephoneNumberValid) && (isZipCodeValid) && (areCommentsValid))
	{
		return true;
	}
	else
	{
		return false;
	}
}

function validateKeyPress(element, value)
{
	if (element.name == "name")
	{
		if ((value != 32) && ((value < 65) || (value > 90)) && ((value < 97) || (value > 122)))
		{
			event.returnValue = false;
		}
	}

	if (element.name == "email")
	{
		if ((value != 45) && (value != 46) && ((value < 48) || (value > 57)) && (value != 64) && ((value < 65) || (value > 90)) && (value != 95) && ((value < 97) || (value > 122)))
		{
			event.returnValue = false;
		}
	}

	if ((element.name == "phone") || (element.name == "zip"))
	{
		if ((value < 48) || (value > 57))
		{
			event.returnValue = false;
		}
	}

	if (element.name == "comments")
	{
		if ((value != 32) && ((value < 44) || (value > 46)) && ((value < 48) || (value > 57)) && (value != 63) && ((value < 65) || (value > 90)) && ((value < 97) || (value > 122)))
		{
			event.returnValue = false;
		}
	}
}

function validateName(field)
{
	if (isEmptyField(field.value))
	{
		alert("A valid name is required.");
		return false;
	}
	else
	{
		return true;
	}
}

function validateTelephoneNumber(field)
{
	if (isEmptyField(field.value))
	{
		alert("A valid telephone number is required.");
		return false;
	}
	else if (field.value.length != 12)
	{
		alert("The supplied telephone number contains too few characters.");
		return false;
	}
	else
	{
		return true;
	}
}

function validateZipCode(field)
{
	if (isEmptyField(field.value))
	{
		alert("A valid zip code is required.");
		return false;
	}
	else if (field.value.length != 5)
	{
		alert("The supplied zip code contains too few characters.");
		return false;
	}
	else
	{
		var allowedZipCodeValues = new Array();
		allowedZipCodeValues[0] = "90004";
		allowedZipCodeValues[1] = "90005";
		allowedZipCodeValues[2] = "90006";
		allowedZipCodeValues[3] = "90009";
		allowedZipCodeValues[4] = "90010";
		allowedZipCodeValues[5] = "90012";
		allowedZipCodeValues[6] = "90013";
		allowedZipCodeValues[7] = "90014";
		allowedZipCodeValues[8] = "90017";
		allowedZipCodeValues[9] = "90019";
		allowedZipCodeValues[10] = "90020";
		allowedZipCodeValues[11] = "90024";
		allowedZipCodeValues[12] = "90025";
		allowedZipCodeValues[13] = "90026";
		allowedZipCodeValues[14] = "90027";
		allowedZipCodeValues[15] = "90028";
		allowedZipCodeValues[16] = "90029";
		allowedZipCodeValues[17] = "90030";
		allowedZipCodeValues[18] = "90031";
		allowedZipCodeValues[19] = "90032";
		allowedZipCodeValues[20] = "90035";
		allowedZipCodeValues[21] = "90036";
		allowedZipCodeValues[22] = "90038";
		allowedZipCodeValues[23] = "90039";
		allowedZipCodeValues[24] = "90041";
		allowedZipCodeValues[25] = "90042";
		allowedZipCodeValues[26] = "90046";
		allowedZipCodeValues[27] = "90048";
		allowedZipCodeValues[28] = "90049";
		allowedZipCodeValues[29] = "90050";
		allowedZipCodeValues[30] = "90051";
		allowedZipCodeValues[31] = "90052";
		allowedZipCodeValues[32] = "90053";
		allowedZipCodeValues[33] = "90054";
		allowedZipCodeValues[34] = "90057";
		allowedZipCodeValues[35] = "90060";
		allowedZipCodeValues[36] = "90065";
		allowedZipCodeValues[37] = "90067";
		allowedZipCodeValues[38] = "90068";
		allowedZipCodeValues[39] = "90069";
		allowedZipCodeValues[40] = "90070";
		allowedZipCodeValues[41] = "90071";
		allowedZipCodeValues[42] = "90072";
		allowedZipCodeValues[43] = "90073";
		allowedZipCodeValues[44] = "90074";
		allowedZipCodeValues[45] = "90075";
		allowedZipCodeValues[46] = "90076";
		allowedZipCodeValues[47] = "90077";
		allowedZipCodeValues[48] = "90078";
		allowedZipCodeValues[49] = "90079";
		allowedZipCodeValues[50] = "90080";
		allowedZipCodeValues[51] = "90081";
		allowedZipCodeValues[52] = "90082";
		allowedZipCodeValues[53] = "90083";
		allowedZipCodeValues[54] = "90084";
		allowedZipCodeValues[55] = "90086";
		allowedZipCodeValues[56] = "90087";
		allowedZipCodeValues[57] = "90088";
		allowedZipCodeValues[58] = "90093";
		allowedZipCodeValues[59] = "90095";
		allowedZipCodeValues[60] = "90096";
		allowedZipCodeValues[61] = "90099";
		allowedZipCodeValues[62] = "90101";
		allowedZipCodeValues[63] = "90102";
		allowedZipCodeValues[64] = "90103";
		allowedZipCodeValues[65] = "90189";
		allowedZipCodeValues[66] = "90209";
		allowedZipCodeValues[67] = "90210";
		allowedZipCodeValues[68] = "90211";
		allowedZipCodeValues[69] = "90212";
		allowedZipCodeValues[70] = "90213";
		allowedZipCodeValues[71] = "90263";
		allowedZipCodeValues[72] = "90264";
		allowedZipCodeValues[73] = "90265";
		allowedZipCodeValues[74] = "90272";
		allowedZipCodeValues[75] = "90290";
		allowedZipCodeValues[76] = "90401";
		allowedZipCodeValues[77] = "90402";
		allowedZipCodeValues[78] = "90403";
		allowedZipCodeValues[79] = "90404";
		allowedZipCodeValues[80] = "90405";
		allowedZipCodeValues[81] = "90406";
		allowedZipCodeValues[82] = "90407";
		allowedZipCodeValues[83] = "90408";
		allowedZipCodeValues[84] = "90409";
		allowedZipCodeValues[85] = "90410";
		allowedZipCodeValues[86] = "90411";
		allowedZipCodeValues[87] = "91040";
		allowedZipCodeValues[88] = "91041";
		allowedZipCodeValues[89] = "91042";
		allowedZipCodeValues[90] = "91043";
		allowedZipCodeValues[91] = "91046";
		allowedZipCodeValues[92] = "91201";
		allowedZipCodeValues[93] = "91202";
		allowedZipCodeValues[94] = "91203";
		allowedZipCodeValues[95] = "91204";
		allowedZipCodeValues[96] = "91205";
		allowedZipCodeValues[97] = "91206";
		allowedZipCodeValues[98] = "91207";
		allowedZipCodeValues[99] = "91208";
		allowedZipCodeValues[100] = "91209";
		allowedZipCodeValues[101] = "91210";
		allowedZipCodeValues[102] = "91214";
		allowedZipCodeValues[103] = "91221";
		allowedZipCodeValues[104] = "91222";
		allowedZipCodeValues[105] = "91224";
		allowedZipCodeValues[106] = "91225";
		allowedZipCodeValues[107] = "91226";
		allowedZipCodeValues[108] = "91301";
		allowedZipCodeValues[109] = "91302";
		allowedZipCodeValues[110] = "91303";
		allowedZipCodeValues[111] = "91304";
		allowedZipCodeValues[112] = "91305";
		allowedZipCodeValues[113] = "91306";
		allowedZipCodeValues[114] = "91307";
		allowedZipCodeValues[115] = "91308";
		allowedZipCodeValues[116] = "91309";
		allowedZipCodeValues[117] = "91311";
		allowedZipCodeValues[118] = "91313";
		allowedZipCodeValues[119] = "91316";
		allowedZipCodeValues[120] = "91324";
		allowedZipCodeValues[121] = "91325";
		allowedZipCodeValues[122] = "91326";
		allowedZipCodeValues[123] = "91327";
		allowedZipCodeValues[124] = "91328";
		allowedZipCodeValues[125] = "91329";
		allowedZipCodeValues[126] = "91330";
		allowedZipCodeValues[127] = "91331";
		allowedZipCodeValues[128] = "91333";
		allowedZipCodeValues[129] = "91334";
		allowedZipCodeValues[130] = "91335";
		allowedZipCodeValues[131] = "91337";
		allowedZipCodeValues[132] = "91340";
		allowedZipCodeValues[133] = "91341";
		allowedZipCodeValues[134] = "91342";
		allowedZipCodeValues[135] = "91343";
		allowedZipCodeValues[136] = "91344";
		allowedZipCodeValues[137] = "91345";
		allowedZipCodeValues[138] = "91346";
		allowedZipCodeValues[139] = "91352";
		allowedZipCodeValues[140] = "91353";
		allowedZipCodeValues[141] = "91356";
		allowedZipCodeValues[142] = "91357";
		allowedZipCodeValues[143] = "91359";
		allowedZipCodeValues[144] = "91361";
		allowedZipCodeValues[145] = "91362";
		allowedZipCodeValues[146] = "91363";
		allowedZipCodeValues[147] = "91364";
		allowedZipCodeValues[148] = "91365";
		allowedZipCodeValues[149] = "91367";
		allowedZipCodeValues[150] = "91369";
		allowedZipCodeValues[151] = "91371";
		allowedZipCodeValues[152] = "91372";
		allowedZipCodeValues[153] = "91376";
		allowedZipCodeValues[154] = "91388";
		allowedZipCodeValues[155] = "91392";
		allowedZipCodeValues[156] = "91393";
		allowedZipCodeValues[157] = "91394";
		allowedZipCodeValues[158] = "91395";
		allowedZipCodeValues[159] = "91396";
		allowedZipCodeValues[160] = "91399";
		allowedZipCodeValues[161] = "91401";
		allowedZipCodeValues[162] = "91402";
		allowedZipCodeValues[163] = "91403";
		allowedZipCodeValues[164] = "91404";
		allowedZipCodeValues[165] = "91405";
		allowedZipCodeValues[166] = "91406";
		allowedZipCodeValues[167] = "91407";
		allowedZipCodeValues[168] = "91408";
		allowedZipCodeValues[169] = "91409";
		allowedZipCodeValues[170] = "91410";
		allowedZipCodeValues[171] = "91411";
		allowedZipCodeValues[172] = "91412";
		allowedZipCodeValues[173] = "91413";
		allowedZipCodeValues[174] = "91416";
		allowedZipCodeValues[175] = "91423";
		allowedZipCodeValues[176] = "91426";
		allowedZipCodeValues[177] = "91436";
		allowedZipCodeValues[178] = "91470";
		allowedZipCodeValues[179] = "91482";
		allowedZipCodeValues[180] = "91495";
		allowedZipCodeValues[181] = "91496";
		allowedZipCodeValues[182] = "91497";
		allowedZipCodeValues[183] = "91499";
		allowedZipCodeValues[184] = "91501";
		allowedZipCodeValues[185] = "91502";
		allowedZipCodeValues[186] = "91503";
		allowedZipCodeValues[187] = "91504";
		allowedZipCodeValues[188] = "91505";
		allowedZipCodeValues[189] = "91506";
		allowedZipCodeValues[190] = "91507";
		allowedZipCodeValues[191] = "91508";
		allowedZipCodeValues[192] = "91510";
		allowedZipCodeValues[193] = "91521";
		allowedZipCodeValues[194] = "91522";
		allowedZipCodeValues[195] = "91523";
		allowedZipCodeValues[196] = "91526";
		allowedZipCodeValues[197] = "91601";
		allowedZipCodeValues[198] = "91602";
		allowedZipCodeValues[199] = "91603";
		allowedZipCodeValues[200] = "91604";
		allowedZipCodeValues[201] = "91605";
		allowedZipCodeValues[202] = "91606";
		allowedZipCodeValues[203] = "91607";
		allowedZipCodeValues[204] = "91608";
		allowedZipCodeValues[205] = "91609";
		allowedZipCodeValues[206] = "91610";
		allowedZipCodeValues[207] = "91611";
		allowedZipCodeValues[208] = "91612";
		allowedZipCodeValues[209] = "91614";
		allowedZipCodeValues[210] = "91615";
		allowedZipCodeValues[211] = "91616";
		allowedZipCodeValues[212] = "91617";
		allowedZipCodeValues[213] = "91618";
		allowedZipCodeValues[214] = "90015";

		var isZipCodeValid;

		for (var i = 0; i < allowedZipCodeValues.length; i++)
		{
			if (field.value == allowedZipCodeValues[i])
			{
				isZipCodeValid = true;
				break;
			}
			else
			{
				isZipCodeValid = false;
			}
		}

		if (isZipCodeValid)
		{
			return true;
		}
		else
		{
			alert("We apologize but this franchise does not serve\nthe zip code that you supplied.");
			return false;
		}
	}
}

function valueContainsCharacter(value1, value2)
{
	for (var i = 0; i < value1.length; i++)
	{
		if (value1.charAt(i) == value2)
		{
			return true;
		}
	}

	return false;
}
