// address inputs
document.observe(
	"dom:loaded",
	function()
	{
		$$("div.address-input").each(
			function(elem)
			{
				elem.up("form").observe("submit", addressInputFormSubmitted);

				elem.select("select.address-locality").each(
					function(select)
					{
						select.observe(
							"change",
							function()
							{
								changeAddressInputLocality(elem);
							}
						);

						changeAddressInputLocality(elem);
					}
				);
			}
		);
	}
);

function addressInputFormSubmitted(result)
{
	var form = result.element();

	form.select("div.address-input").each(
		function(div)
		{
			var localitySelect = div.down("select.address-locality");
			var locality = localitySelect.value;

			localitySelect.disabled = true;
			
			// steal some input names
			var phoneInput = div.down("div.address-input-outside-us div.phone input");
			var phoneInputName = (phoneInput ? phoneInput.name : null);

			// get rid of all the inputs that aren't applicable so they don't post
			["inside-us", "outside-us", "apo"].each(
				function(className)
				{
					var innerDiv = div.down("div.address-input-" + className);

					if (!innerDiv.hasClassName("address-input-" + locality))
					{
						innerDiv.select("input, select").each(
							function(elem)
							{
								elem.disabled = true;
							}
						);
					}
				}
			);

			// refactor some of the fields into a database-friendly format
			switch (locality)
			{
				case "inside-us":
					// concatenate the phone number
					if (phoneInputName)
					{
						var phoneA = div.down("input.phone-a").value;
						var phoneB = div.down("input.phone-b").value;
						var phoneC = div.down("input.phone-c").value;
						var phoneExt = div.down("input.phone-ext").value;
						
						var phone = null;

						if (phoneA.length == 3 && phoneB.length == 3 && phoneC.length == 4)
						{
							phone = phoneA + "-" + phoneB + "-" + phoneC;

							if (phoneExt.length > 0)
							{
								phone += " x" + phoneExt;
							}
						}

						div.down("div.phone").select("input, select").each(
							function(elem)
							{
								elem.disabled = true;
							}
						);

						form.insert(
							new Element(
								"input",
								{
									type: "hidden",
									name: phoneInputName,
									value: phone
								}
							)
						);
					}

					break;
			}
		}
	);
}

function changeAddressInputLocality(elem)
{
	var selected = elem.getElementsByClassName("address-locality")[0].getValue();

	elem.select("div").each(
		function(div)
		{
			var classes = $w(div.className);
			for (var i = 0; i < classes.length; i++)
			{
				var className = classes[i];
				var match = className.match(/^address-input-(.*)/);
				if (match)
				{
					var type = match[1];
					var display = (type == selected) ? "" : "none";
					div.setStyle(
						{
							display: display
						}
					);
					break;
				}
			}
		}
	);
}

