var StoreLookup = new Object();
StoreLookup.OnStore = null;

StoreLookup.ValidatePostalInput = function(e)
{
	if (!e && window.event) e = window.event;
	var c = (e.which) ? e.which : e.keyCode;
	if ((c >= 37 && c <= 40) || (c >= 96 && c <= 105) || c == 8 || c == 9 || c == 13 || c == 46) return true;
	var s = String.fromCharCode(c);
	if (!/\d/.test(s))
	{
		if (e.returnValue) e.returnValue = false;
		if (e.preventDefault) e.preventDefault();
		return false;
	}
	return true;
}

StoreLookup.CheckForPostalLookup = function(e)
{
	if (!e && window.event) e = window.event;
	var fld = (e.target) ? e.target : e.srcElement;
	if (/^\d{3,4}$/.test(fld.value))
	{
		StoreLookup.Lookup(parseInt(fld.value));
	}
}

StoreLookup.EnsureDeliveryPostalIsUsed = function(fld)
{
	if (!fld) return;
	if (/^\d{3,4}$/.test(fld.value))
	{
		StoreLookup.OnStore = StoreLookup.OnDeliveryStore;
		StoreLookup.Lookup(parseInt(fld.value));
	}
}

StoreLookup.OnDeliveryStore = function(storename, storeaddress, storepostal, storecity, storephone)
{
	if (storename != '') 
	{
		fillStoreFields(storename, storeaddress, storepostal, storecity, storephone);
	}
}

StoreLookup.Lookup = function(postal)
{
	if (!this.XmlDocLoaded) return;
	else
	{
		postal = parseInt(postal);
		var elm = this.XmlDocElement;
		var coll = elm.getElementsByTagName('sekvens');
		for (var i=0; i<coll.length; i++)
		{
			var from = coll[i].getAttribute('fra');
			var to = coll[i].getAttribute('til');
			if (from && to)
			{
				if (parseInt(from) <= postal && parseInt(to) >= postal)
				{
					var store = coll[i].parentNode.parentNode;
					if (store && this.OnStore)
					{
						var storename = store.getAttribute('navn');
						var storeaddress = store.getAttribute('adresse');
						var storepostal = store.getAttribute('postnummer');
						var storecity = store.getAttribute('by');
						var storephone = store.getAttribute('telefon');
						this.OnStore(storename, storeaddress, storepostal, storecity, storephone);
					}				
					return;
				}
			}
		}
		if (postal > 999 && this.OnStore) this.OnStore('','','','','');
	}
}

StoreLookup.Callback = function()
{
	if (StoreLookup.XmlDoc.readyState != 4) return;
	else 
	{
		StoreLookup.XmlDocLoaded = true;
		if (typeof(StoreLookup.XmlDoc.responseXML) != 'undefined')
		{
			StoreLookup.XmlDocElement = StoreLookup.XmlDoc.responseXML.documentElement;
		}
		else
		{
			StoreLookup.XmlDocElement = StoreLookup.XmlDoc.documentElement;
		}
	}
}

StoreLookup.GetXmlDoc = function(file)
{
	if (!file) file = 'media/forhandlerpostnumre.xml';
	if (window.ActiveXObject)
	{
		this.XmlDoc = new ActiveXObject('MSXML2.DOMDocument.3.0');
		this.XmlDoc.setProperty('SelectionLanguage', 'XPath');
	}
	else if (window.XMLHttpRequest) 
	{
		this.XmlDoc = new XMLHttpRequest();
	}
	else 
	{
		alert('Din browser understøtter ikke XML.\nSiden kan derfor ikke finde den nærmeste butik baseret på postnummer.\nDu kan dog stadig godt handle i webshoppen eller bestille kataloger.');
		return;
	}
	this.XmlDoc.onreadystatechange = StoreLookup.Callback;
	if (typeof(this.XmlDoc.load) != 'undefined') this.XmlDoc.load(file);
	else
	{
		this.XmlDoc.open('GET', file, true);
		this.XmlDoc.send(null);
	}
}

StoreLookup.SetPostal = function(fld)
{
	if (fld.addEventListener)
	{
		fld.addEventListener('keydown', StoreLookup.ValidatePostalInput, false);
		fld.addEventListener('keyup', StoreLookup.CheckForPostalLookup, false);
		
	}
	else if (fld.attachEvent)
	{
		fld.attachEvent('onkeydown', StoreLookup.ValidatePostalInput);
		fld.attachEvent('onkeyup', StoreLookup.CheckForPostalLookup);
	}
}

StoreLookup.XmlDoc = null;
StoreLookup.XmlDocLoaded = false;
StoreLookup.GetXmlDoc();
