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);
	
	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] = "84001";
		allowedZipCodeValues[1] = "84002";
		allowedZipCodeValues[2] = "84003";
		allowedZipCodeValues[3] = "84004";
		allowedZipCodeValues[4] = "84005";
		allowedZipCodeValues[5] = "84006";
		allowedZipCodeValues[6] = "84007";
		allowedZipCodeValues[7] = "84008";
		allowedZipCodeValues[8] = "84010";
		allowedZipCodeValues[9] = "84011";
		allowedZipCodeValues[10] = "84013";
		allowedZipCodeValues[11] = "84014";
		allowedZipCodeValues[12] = "84015";
		allowedZipCodeValues[13] = "84016";
		allowedZipCodeValues[14] = "84017";
		allowedZipCodeValues[15] = "84018";
		allowedZipCodeValues[16] = "84020";
		allowedZipCodeValues[17] = "84021";
		allowedZipCodeValues[18] = "84022";
		allowedZipCodeValues[19] = "84023";
		allowedZipCodeValues[20] = "84024";
		allowedZipCodeValues[21] = "84025";
		allowedZipCodeValues[22] = "84026";
		allowedZipCodeValues[23] = "84027";
		allowedZipCodeValues[24] = "84028";
		allowedZipCodeValues[25] = "84029";
		allowedZipCodeValues[26] = "84031";
		allowedZipCodeValues[27] = "84032";
		allowedZipCodeValues[28] = "84033";
		allowedZipCodeValues[29] = "84034";
		allowedZipCodeValues[30] = "84035";
		allowedZipCodeValues[31] = "84036";
		allowedZipCodeValues[32] = "84037";
		allowedZipCodeValues[33] = "84038";
		allowedZipCodeValues[34] = "84039";
		allowedZipCodeValues[35] = "84040";
		allowedZipCodeValues[36] = "84041";
		allowedZipCodeValues[37] = "84042";
		allowedZipCodeValues[38] = "84043";
		allowedZipCodeValues[39] = "84044";
		allowedZipCodeValues[40] = "84045";
		allowedZipCodeValues[41] = "84046";
		allowedZipCodeValues[42] = "84047";
		allowedZipCodeValues[43] = "84049";
		allowedZipCodeValues[44] = "84050";
		allowedZipCodeValues[45] = "84051";
		allowedZipCodeValues[46] = "84052";
		allowedZipCodeValues[47] = "84053";
		allowedZipCodeValues[48] = "84054";
		allowedZipCodeValues[49] = "84055";
		allowedZipCodeValues[50] = "84056";
		allowedZipCodeValues[51] = "84057";
		allowedZipCodeValues[52] = "84058";
		allowedZipCodeValues[53] = "84059";
		allowedZipCodeValues[54] = "84060";
		allowedZipCodeValues[55] = "84061";
		allowedZipCodeValues[56] = "84062";
		allowedZipCodeValues[57] = "84063";
		allowedZipCodeValues[58] = "84064";
		allowedZipCodeValues[59] = "84065";
		allowedZipCodeValues[60] = "84066";
		allowedZipCodeValues[61] = "84067";
		allowedZipCodeValues[62] = "84068";
		allowedZipCodeValues[63] = "84069";
		allowedZipCodeValues[64] = "84070";
		allowedZipCodeValues[65] = "84071";
		allowedZipCodeValues[66] = "84072";
		allowedZipCodeValues[67] = "84073";
		allowedZipCodeValues[68] = "84074";
		allowedZipCodeValues[69] = "84075";
		allowedZipCodeValues[70] = "84076";
		allowedZipCodeValues[71] = "84078";
		allowedZipCodeValues[72] = "84079";
		allowedZipCodeValues[73] = "84080";
		allowedZipCodeValues[74] = "84081";
		allowedZipCodeValues[75] = "84082";
		allowedZipCodeValues[76] = "84083";
		allowedZipCodeValues[77] = "84084";
		allowedZipCodeValues[78] = "84085";
		allowedZipCodeValues[79] = "84086";
		allowedZipCodeValues[80] = "84087";
		allowedZipCodeValues[81] = "84088";
		allowedZipCodeValues[82] = "84089";
		allowedZipCodeValues[83] = "84090";
		allowedZipCodeValues[84] = "84091";
		allowedZipCodeValues[85] = "84092";
		allowedZipCodeValues[86] = "84093";
		allowedZipCodeValues[87] = "84094";
		allowedZipCodeValues[88] = "84095";
		allowedZipCodeValues[89] = "84096";
		allowedZipCodeValues[90] = "84097";
		allowedZipCodeValues[91] = "84098";
		allowedZipCodeValues[92] = "84101";
		allowedZipCodeValues[93] = "84102";
		allowedZipCodeValues[94] = "84103";
		allowedZipCodeValues[95] = "84104";
		allowedZipCodeValues[96] = "84105";
		allowedZipCodeValues[97] = "84106";
		allowedZipCodeValues[98] = "84107";
		allowedZipCodeValues[99] = "84108";
		allowedZipCodeValues[100] = "84109";
		allowedZipCodeValues[101] = "84110";
		allowedZipCodeValues[102] = "84111";
		allowedZipCodeValues[103] = "84112";
		allowedZipCodeValues[104] = "84113";
		allowedZipCodeValues[105] = "84114";
		allowedZipCodeValues[106] = "84115";
		allowedZipCodeValues[107] = "84116";
		allowedZipCodeValues[108] = "84117";
		allowedZipCodeValues[109] = "84118";
		allowedZipCodeValues[110] = "84119";
		allowedZipCodeValues[111] = "84120";
		allowedZipCodeValues[112] = "84121";
		allowedZipCodeValues[113] = "84122";
		allowedZipCodeValues[114] = "84123";
		allowedZipCodeValues[115] = "84124";
		allowedZipCodeValues[116] = "84125";
		allowedZipCodeValues[117] = "84126";
		allowedZipCodeValues[118] = "84127";
		allowedZipCodeValues[119] = "84128";
		allowedZipCodeValues[120] = "84130";
		allowedZipCodeValues[121] = "84131";
		allowedZipCodeValues[122] = "84132";
		allowedZipCodeValues[123] = "84133";
		allowedZipCodeValues[124] = "84134";
		allowedZipCodeValues[125] = "84136";
		allowedZipCodeValues[126] = "84138";
		allowedZipCodeValues[127] = "84139";
		allowedZipCodeValues[128] = "84141";
		allowedZipCodeValues[129] = "84143";
		allowedZipCodeValues[130] = "84144";
		allowedZipCodeValues[131] = "84145";
		allowedZipCodeValues[132] = "84147";
		allowedZipCodeValues[133] = "84148";
		allowedZipCodeValues[134] = "84150";
		allowedZipCodeValues[135] = "84151";
		allowedZipCodeValues[136] = "84152";
		allowedZipCodeValues[137] = "84157";
		allowedZipCodeValues[138] = "84158";
		allowedZipCodeValues[139] = "84165";
		allowedZipCodeValues[140] = "84170";
		allowedZipCodeValues[141] = "84171";
		allowedZipCodeValues[142] = "84180";
		allowedZipCodeValues[143] = "84184";
		allowedZipCodeValues[144] = "84189";
		allowedZipCodeValues[145] = "84190";
		allowedZipCodeValues[146] = "84199";
		allowedZipCodeValues[147] = "84201";
		allowedZipCodeValues[148] = "84244";
		allowedZipCodeValues[149] = "84301";
		allowedZipCodeValues[150] = "84302";
		allowedZipCodeValues[151] = "84304";
		allowedZipCodeValues[152] = "84305";
		allowedZipCodeValues[153] = "84306";
		allowedZipCodeValues[154] = "84307";
		allowedZipCodeValues[155] = "84308";
		allowedZipCodeValues[156] = "84309";
		allowedZipCodeValues[157] = "84310";
		allowedZipCodeValues[158] = "84311";
		allowedZipCodeValues[159] = "84312";
		allowedZipCodeValues[160] = "84313";
		allowedZipCodeValues[161] = "84314";
		allowedZipCodeValues[162] = "84315";
		allowedZipCodeValues[163] = "84316";
		allowedZipCodeValues[164] = "84317";
		allowedZipCodeValues[165] = "84318";
		allowedZipCodeValues[166] = "84319";
		allowedZipCodeValues[167] = "84320";
		allowedZipCodeValues[168] = "84321";
		allowedZipCodeValues[169] = "84322";
		allowedZipCodeValues[170] = "84323";
		allowedZipCodeValues[171] = "84324";
		allowedZipCodeValues[172] = "84325";
		allowedZipCodeValues[173] = "84326";
		allowedZipCodeValues[174] = "84327";
		allowedZipCodeValues[175] = "84328";
		allowedZipCodeValues[176] = "84329";
		allowedZipCodeValues[177] = "84330";
		allowedZipCodeValues[178] = "84331";
		allowedZipCodeValues[179] = "84332";
		allowedZipCodeValues[180] = "84333";
		allowedZipCodeValues[181] = "84334";
		allowedZipCodeValues[182] = "84335";
		allowedZipCodeValues[183] = "84336";
		allowedZipCodeValues[184] = "84337";
		allowedZipCodeValues[185] = "84338";
		allowedZipCodeValues[186] = "84339";
		allowedZipCodeValues[187] = "84340";
		allowedZipCodeValues[188] = "84341";
		allowedZipCodeValues[189] = "84401";
		allowedZipCodeValues[190] = "84402";
		allowedZipCodeValues[191] = "84403";
		allowedZipCodeValues[192] = "84404";
		allowedZipCodeValues[193] = "84405";
		allowedZipCodeValues[194] = "84407";
		allowedZipCodeValues[195] = "84408";
		allowedZipCodeValues[196] = "84409";
		allowedZipCodeValues[197] = "84412";
		allowedZipCodeValues[198] = "84414";
		allowedZipCodeValues[199] = "84415";
		allowedZipCodeValues[200] = "84501";
		allowedZipCodeValues[201] = "84510";
		allowedZipCodeValues[202] = "84511";
		allowedZipCodeValues[203] = "84512";
		allowedZipCodeValues[204] = "84513";
		allowedZipCodeValues[205] = "84515";
		allowedZipCodeValues[206] = "84516";
		allowedZipCodeValues[207] = "84518";
		allowedZipCodeValues[208] = "84520";
		allowedZipCodeValues[209] = "84521";
		allowedZipCodeValues[210] = "84522";
		allowedZipCodeValues[211] = "84523";
		allowedZipCodeValues[212] = "84525";
		allowedZipCodeValues[213] = "84526";
		allowedZipCodeValues[214] = "84528";
		allowedZipCodeValues[215] = "84529";
		allowedZipCodeValues[216] = "84530";
		allowedZipCodeValues[217] = "84531";
		allowedZipCodeValues[218] = "84532";
		allowedZipCodeValues[219] = "84533";
		allowedZipCodeValues[220] = "84534";
		allowedZipCodeValues[221] = "84535";
		allowedZipCodeValues[222] = "84536";
		allowedZipCodeValues[223] = "84537";
		allowedZipCodeValues[224] = "84539";
		allowedZipCodeValues[225] = "84540";
		allowedZipCodeValues[226] = "84542";
		allowedZipCodeValues[227] = "84601";
		allowedZipCodeValues[228] = "84602";
		allowedZipCodeValues[229] = "84603";
		allowedZipCodeValues[230] = "84604";
		allowedZipCodeValues[231] = "84605";
		allowedZipCodeValues[232] = "84606";
		allowedZipCodeValues[233] = "84620";
		allowedZipCodeValues[234] = "84621";
		allowedZipCodeValues[235] = "84622";
		allowedZipCodeValues[236] = "84623";
		allowedZipCodeValues[237] = "84624";
		allowedZipCodeValues[238] = "84626";
		allowedZipCodeValues[239] = "84627";
		allowedZipCodeValues[240] = "84628";
		allowedZipCodeValues[241] = "84629";
		allowedZipCodeValues[242] = "84630";
		allowedZipCodeValues[243] = "84631";
		allowedZipCodeValues[244] = "84632";
		allowedZipCodeValues[245] = "84633";
		allowedZipCodeValues[246] = "84634";
		allowedZipCodeValues[247] = "84635";
		allowedZipCodeValues[248] = "84636";
		allowedZipCodeValues[249] = "84637";
		allowedZipCodeValues[250] = "84638";
		allowedZipCodeValues[251] = "84639";
		allowedZipCodeValues[252] = "84640";
		allowedZipCodeValues[253] = "84642";
		allowedZipCodeValues[254] = "84643";
		allowedZipCodeValues[255] = "84644";
		allowedZipCodeValues[256] = "84645";
		allowedZipCodeValues[257] = "84646";
		allowedZipCodeValues[258] = "84647";
		allowedZipCodeValues[259] = "84648";
		allowedZipCodeValues[260] = "84649";
		allowedZipCodeValues[261] = "84651";
		allowedZipCodeValues[262] = "84652";
		allowedZipCodeValues[263] = "84653";
		allowedZipCodeValues[264] = "84654";
		allowedZipCodeValues[265] = "84655";
		allowedZipCodeValues[266] = "84656";
		allowedZipCodeValues[267] = "84657";
		allowedZipCodeValues[268] = "84660";
		allowedZipCodeValues[269] = "84662";
		allowedZipCodeValues[270] = "84663";
		allowedZipCodeValues[271] = "84664";
		allowedZipCodeValues[272] = "84665";
		allowedZipCodeValues[273] = "84667";
		allowedZipCodeValues[274] = "84701";
		allowedZipCodeValues[275] = "84710";
		allowedZipCodeValues[276] = "84711";
		allowedZipCodeValues[277] = "84712";
		allowedZipCodeValues[278] = "84713";
		allowedZipCodeValues[279] = "84714";
		allowedZipCodeValues[280] = "84715";
		allowedZipCodeValues[281] = "84716";
		allowedZipCodeValues[282] = "84718";
		allowedZipCodeValues[283] = "84719";
		allowedZipCodeValues[284] = "84720";
		allowedZipCodeValues[285] = "84721";
		allowedZipCodeValues[286] = "84722";
		allowedZipCodeValues[287] = "84723";
		allowedZipCodeValues[288] = "84724";
		allowedZipCodeValues[289] = "84725";
		allowedZipCodeValues[290] = "84726";
		allowedZipCodeValues[291] = "84728";
		allowedZipCodeValues[292] = "84729";
		allowedZipCodeValues[293] = "84730";
		allowedZipCodeValues[294] = "84731";
		allowedZipCodeValues[295] = "84732";
		allowedZipCodeValues[296] = "84733";
		allowedZipCodeValues[297] = "84734";
		allowedZipCodeValues[298] = "84735";
		allowedZipCodeValues[299] = "84736";
		allowedZipCodeValues[300] = "84737";
		allowedZipCodeValues[301] = "84738";
		allowedZipCodeValues[302] = "84739";
		allowedZipCodeValues[303] = "84740";
		allowedZipCodeValues[304] = "84741";
		allowedZipCodeValues[305] = "84742";
		allowedZipCodeValues[306] = "84743";
		allowedZipCodeValues[307] = "84744";
		allowedZipCodeValues[308] = "84745";
		allowedZipCodeValues[309] = "84746";
		allowedZipCodeValues[310] = "84747";
		allowedZipCodeValues[311] = "84749";
		allowedZipCodeValues[312] = "84750";
		allowedZipCodeValues[313] = "84751";
		allowedZipCodeValues[314] = "84752";
		allowedZipCodeValues[315] = "84753";
		allowedZipCodeValues[316] = "84754";
		allowedZipCodeValues[317] = "84755";
		allowedZipCodeValues[318] = "84756";
		allowedZipCodeValues[319] = "84757";
		allowedZipCodeValues[320] = "84758";
		allowedZipCodeValues[321] = "84759";
		allowedZipCodeValues[322] = "84760";
		allowedZipCodeValues[323] = "84761";
		allowedZipCodeValues[324] = "84762";
		allowedZipCodeValues[325] = "84763";
		allowedZipCodeValues[326] = "84764";
		allowedZipCodeValues[327] = "84765";
		allowedZipCodeValues[328] = "84766";
		allowedZipCodeValues[329] = "84767";
		allowedZipCodeValues[330] = "84770";
		allowedZipCodeValues[331] = "84771";
		allowedZipCodeValues[332] = "84772";
		allowedZipCodeValues[333] = "84773";
		allowedZipCodeValues[334] = "84774";
		allowedZipCodeValues[335] = "84775";
		allowedZipCodeValues[336] = "84776";
		allowedZipCodeValues[337] = "84779";
		allowedZipCodeValues[338] = "84780";
		allowedZipCodeValues[339] = "84781";
		allowedZipCodeValues[340] = "84782";
		allowedZipCodeValues[341] = "84783";
		allowedZipCodeValues[342] = "84784";
		allowedZipCodeValues[343] = "84790";
		allowedZipCodeValues[344] = "84791";

		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;
}