// <![CDATA[

//-----------------------------------------------------------------------------
// Define some constants.
//-----------------------------------------------------------------------------

// Define a list of Microsoft XML HTTP ProgIDs.
var XMLHTTPREQUEST_MS_PROGIDS = new Array(
	"Msxml2.XMLHTTP.7.0",
	"Msxml2.XMLHTTP.6.0",
	"Msxml2.XMLHTTP.5.0",
	"Msxml2.XMLHTTP.4.0",
	"MSXML2.XMLHTTP.3.0",
	"MSXML2.XMLHTTP",
	"Microsoft.XMLHTTP"
);

// Define ready state constants.
var XMLHTTPREQUEST_READY_STATE_UNINITIALIZED = 0;
var XMLHTTPREQUEST_READY_STATE_LOADING       = 1;
var XMLHTTPREQUEST_READY_STATE_LOADED        = 2;
var XMLHTTPREQUEST_READY_STATE_INTERACTIVE   = 3;
var XMLHTTPREQUEST_READY_STATE_COMPLETED     = 4;

//-----------------------------------------------------------------------------
// Returns an XMLHttpRequest object.
//-----------------------------------------------------------------------------
function getXMLHttpRequest()
{
	var httpRequest = null;

	// Create the appropriate HttpRequest object for the browser.
	if (window.XMLHttpRequest != null)
		httpRequest = new window.XMLHttpRequest();
	else if (window.ActiveXObject != null)
	{
		// Must be IE, find the right ActiveXObject.
		var success = false;
		for (var i = 0; i < XMLHTTPREQUEST_MS_PROGIDS.length && !success; i++)
		{
			try
			{
				httpRequest = new ActiveXObject(XMLHTTPREQUEST_MS_PROGIDS[i]);
				success = true;
			}
			catch (ex)
			{}
		}
	}

	// Display an error if we couldn't create one.
	if (httpRequest == null)
		alert("Error in HttpRequest():\n\nCannot create an XMLHttpRequest object.");

	// Return it.
	return httpRequest;
}

//-----------------------------------------------------------------------------
// This code uses an XMLHttpRequest object to look up the city and state of the
// ZIP code entered by the user. That data is then used to populate the
// corresponding form fields.
//-----------------------------------------------------------------------------

var cityStateLookup = getXMLHttpRequest();

// Used to validate a zip code entered by the user.
var zipCodeFormat = new RegExp("\\d{4}");

function initiateCityStateLookup(event)
{
	// Clear the status text.
	setStatusText("");

	// Check for a zip code.
	var zip = document.forms["checkout"].elements["zip"].value;
	if (!zip.match(zipCodeFormat))
	{
		setStatusText("Postnummer format findes ikke");
		return;
	}

	// Abort any currently active request.
	cityStateLookup.abort();

	// Perform an asynchronous request to get the matching city and state.
	var url = "getCity.html?zip=" + zip;
	cityStateLookup.onreadystatechange = cityStateReadyStateChange;
	cityStateLookup.open("GET", url, true);
	cityStateLookup.send(null);
}

function cityStateReadyStateChange()
{
	var statusText;

	// Check the ready state.
	switch (cityStateLookup.readyState)
	{
		case XMLHTTPREQUEST_READY_STATE_UNINITIALIZED:
			statusText = "";
			break;

		case XMLHTTPREQUEST_READY_STATE_LOADING:
			statusText = "Kontrolere postnummer format...";
			break;

		case XMLHTTPREQUEST_READY_STATE_LOADED:
			statusText = "Generere forespørgsel...";
			break;

		case XMLHTTPREQUEST_READY_STATE_INTERACTIVE:
			statusText = "Henter bynavn...";
			break;

		case XMLHTTPREQUEST_READY_STATE_COMPLETED:

			// Assume no match was found.
			statusText = "Postnummer blev ikke fundet."

			// Fill in the city and state fields, if available.
			try
			{
				var data = cityStateLookup.responseText;
				if (data)
				{
					document.forms["checkout"].elements["city"].value  = data;
					statusText = "Gyldigt postnummer."
				}
			}
			catch (ex)
			{}
			break;

		default:
			statusText = "Ukendt fejl.";
			break;
	}

	// Update the status message.
	setStatusText(statusText);
}

function setStatusText(text)
{
	// Display the status message.
	var el = document.getElementById("statusText");
	if (el.firstChild == null)
		el.appendChild(document.createTextNode(""));
	el.firstChild.nodeValue = text;
}

// ]]>


