var oAjax = null;
var gstrAddressType = "";
var gobjForm = null;
var gAddressListXml = null;

function postcodeLookup(objForm, strAddressType) {
	// put given params in globals so later fn can find them
	gobjForm = objForm;
	gstrAddressType = strAddressType;
	// lookup a list
	postcodeLookupList();
}
function postcodeLookupList() {
	var strPostcode = gobjForm.elements[gstrAddressType + "_postcode"].value;
	var strHouse = gobjForm.elements[gstrAddressType + "_housenum"].value;
	var objTextarea = gobjForm.elements[gstrAddressType + "_address"];
	var strUrl = "";

	strUrl = "http://postcode2.managers.org.uk:81/addresslist.pce?postcode=" + strPostcode + String.fromCharCode(38) + "property=" + strHouse + String.fromCharCode(38) + "serial=804570" + String.fromCharCode(38) + "password=freedom";
	strUrl = "load_xml.aspx?url=" + escape(strUrl);
	oAjax = new Ajax();
	oAjax.makeRequest("GET", strUrl, onListResponse);
}
function onListResponse() {
	if(oAjax.checkReadyState(gstrAddressType + "_address", "looking up postcode...", "looking up postcode...", "looking up postcode...") == "OK") {
		var response = oAjax.request.responseXML.documentElement;
		var oAddress = null;
		var arrNodes = null;
		var strAddress = "", strLine = "";
		
		if(response.selectNodes("AddressListItem").length > 1) {
			// multiple address => get user to choose one
			gAddressListXml = response;
			window.open("choose_address.htm", "address_list", "width=500,height=400,scrollbar=yes,resizable=yes");
		} else if(response.selectNodes("AddressListItem").length == 1) {
			// one result but could be error
			strAddress = getText(response.selectSingleNode("AddressListItem").selectSingleNode("Address"));
			if(strAddress.toLowerCase().indexOf("error:") != -1) {
				alert(strAddress);
			} else {
				// one address => get full details
				postcodeLookupSingle();
			}
		} else {
			alert("no response");
		}
	}
}
function getAddressList() {
	var arrNodes = null;
	var oOption = null;
	
	if(window.opener) {
		gAddressListXml = window.opener.gAddressListXml;
		arrNodes = gAddressListXml.selectNodes("AddressListItem");
		document.getElementById("address_list").length = 0;
		for(var i = 0; i < arrNodes.length; i++) {
			oOption = new Option(getText(arrNodes[i].selectSingleNode("Address")), getText(arrNodes[i].selectSingleNode("PostKey")));
			document.getElementById("address_list").options[i] = oOption;
		}
		
	}
}
function useAddress() {
	var oSelect = null;
	
	if(window.opener) {
		oSelect = document.getElementById("address_list");
		window.opener.postcodeLookupSingle(oSelect.options[oSelect.selectedIndex].value);
	}
	window.close();
}
function postcodeLookupSingle(strPostkey) {
	var strPostcode = gobjForm.elements[gstrAddressType + "_postcode"].value;
	var strHouse = gobjForm.elements[gstrAddressType + "_housenum"].value;
	var objTextarea = gobjForm.elements[gstrAddressType + "_address"];
	var strUrl = "";

	if(strPostkey) {
		strUrl = "http://postcode2.managers.org.uk:81/addresslookup.pce?postkey=" + strPostkey + String.fromCharCode(38) + "serial=804570" + String.fromCharCode(38) + "password=freedom";
	} else {
		strUrl = "http://postcode2.managers.org.uk:81/addresslookup.pce?postcode=" + strPostcode + String.fromCharCode(38) + "property=" + strHouse + String.fromCharCode(38) + "serial=804570" + String.fromCharCode(38) + "password=freedom";
	}
	strUrl = "load_xml.aspx?url=" + escape(strUrl);
	oAjax = new Ajax();
	oAjax.makeRequest("GET", strUrl, onSingleResponse);
}
function onSingleResponse() {
	if(oAjax.checkReadyState(gstrAddressType + "_address", "looking up postcode...", "looking up postcode...", "looking up postcode...") == "OK") {
		var response = oAjax.request.responseXML.documentElement;
		var oAddress = null;
		var arrNodes = null;
		var strAddress = "", strLine = "";
		
		oAddress = response.selectSingleNode("Address");
		arrNodes = oAddress.childNodes;
		for(var i = 0; i < arrNodes.length; i++) {
			switch(arrNodes[i].nodeName.toLowerCase()) {
				case "organisation":
					document.getElementById(gstrAddressType + "_address_line1").value = getText(arrNodes[i]);
					break;
				case "street":
					document.getElementById(gstrAddressType + "_address_line2").value = getText(arrNodes[i]);
					break;
				case "locality":
					document.getElementById(gstrAddressType + "_address_line3").value = getText(arrNodes[i]);
					break;
				case "town":
					document.getElementById(gstrAddressType + "_address_town").value = getText(arrNodes[i]);
					break;
				case "county":
				//case "pctname":
					document.getElementById(gstrAddressType + "_address_county").value = getText(arrNodes[i]);
					break;
				default:
					strLine = "";
					break;
			}
			if(strLine != "") {
				strAddress += (strAddress == "" ? "" : "\r") + strLine;
			}
		}
		document.getElementById(gstrAddressType + "_address").innerText = " ";
	}
}
function getText(oNode) {
	var sText = "";
	
	if(oNode.text) {
		sText = oNode.text;
	} else {
		for(var i = 0; i < oNode.childNodes.length; i++) {
			if(oNode.childNodes[i].hasChildNodes()) {
				sText += getText(oNode.childNodes[i]);
			} else {
				sText += oNode.childNodes[i].nodeValue;
			}
		}
	}
	return sText;
}