var formname='contact-us-form';
var addressselection='address-selection';
var addressListURL = '/ajax-address-list.aspx?postcode=';
var fullAddressURL = '/ajax-full-address-lookup.aspx?UniqueDeliveryPoint=';

var httpRequest = false;


function populateAddressDropdown()
{
	var postcode = document.forms[formname].elements['postcode'].value;
	if (postcode!=''){
		makePostcodeRequest(addressListURL + postcode, updateAddressList);
	}
	else{
		alert('Please enter a postcode.');
		document.forms[formname].elements['postcode'].focus();
	}
}

function makePostcodeRequest(url, callbackFunction) {
       
       document.getElementById(addressselection).innerHTML = '<h3>Please wait</h3>';

       httpRequest = false;

        if (window.XMLHttpRequest) { // Mozilla, Safari, ...
            httpRequest = new XMLHttpRequest();
            if (httpRequest.overrideMimeType) {
                httpRequest.overrideMimeType('text/xml');
                // See note below about this line
            }
        } 
	else if (window.ActiveXObject) { // IE
		try {
			httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
		} 
		catch (e) {
			try {
				httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
			} 
  			catch (e) {}
		}
	}

        if (!httpRequest) {
		alert('Sorry, an error occurred. Please try again.');
		return false;
        }
        httpRequest.onreadystatechange = function() { updateAddressFromResponse(httpRequest, callbackFunction); };
        httpRequest.open('GET', url, true);
        httpRequest.send(null);

}

function loadXML(xml) {
	var xmlDocument;


	if (window.ActiveXObject) { // IE
		try {
			xmlDocument = new ActiveXObject("Msxml2.DOMDocument.3.0");
		} 
		catch (e) {
			try {
				xmlDocument = new ActiveXObject("Microsoft.DOMDocument.3.0");
			} 
  			catch (e) {}
		}

	        if (xmlDocument) {
			xmlDocument.loadXML(xml);
        	}
		
	}
	else 
	try { // Mozilla, Safari, ...
		var domParser = new DOMParser();
		xmlDocument = domParser.parseFromString(xml,'application/xml');
        } 
  	catch (e) {}

	if (!xmlDocument) {
		alert('Sorry, an error occurred. Please try again.');
		return false;
        }

	return xmlDocument;
}

function updateAddressFromResponse(httpRequest, callbackFunction) {

	if (httpRequest.readyState == 4) {
		if (httpRequest.status == 200) {

		var responseText = httpRequest.responseText;
		//responseText = RegexReplace("<html\b[^>]*>(.*?)</html>",responseText,"");


		responseText = RegexReplace("\r|\n|\t",responseText,"");


		//responseText = "<div>" + RegexReplace("<html>(.*?)</html>",responseText,"") + "</div>";

		callbackFunction(responseText);


		} else {
			alert('There was a problem with the request.');
		}
        }

}

function updateAddressList(addressList){
	addressList = "<div>" + getInnerTagContent(addressList,"html",3) + "</div>";
	document.getElementById(addressselection).innerHTML = addressList;
}

function updateFullAddress(addressDetails){
	addressDetails = getInnerTagContent(addressDetails,"html",3);

	var xmldoc;
	xmldoc = loadXML(addressDetails);

	var AddressLinesArray = new Array(getNodeValue(xmldoc.getElementsByTagName('Organisation_Department').item(0)),
		getNodeValue(xmldoc.getElementsByTagName('Organisation').item(0)),
		getNodeValue(xmldoc.getElementsByTagName('Sub_Building_Name').item(0)),
		getNodeValue(xmldoc.getElementsByTagName('Building_Name').item(0)),
		getNodeValue(xmldoc.getElementsByTagName('Number').item(0)),
		getNodeValue(xmldoc.getElementsByTagName('Street').item(0)));

	var AddressLines = getFirstAddressLine(AddressLinesArray);

	if (AddressLines.length>0)
		document.forms[formname].elements["address1"].value = AddressLines[0];
	if (AddressLines.length>1)
		document.forms[formname].elements["address2"].value = AddressLines[1];


	document.forms[formname].elements["towncity"].value = getNodeValue(xmldoc.getElementsByTagName('Post_Town').item(0));
	document.forms[formname].elements["county"].value = getNodeValue(xmldoc.getElementsByTagName('County_Traditional').item(0));
	document.forms[formname].elements["postcode"].value = getNodeValue(xmldoc.getElementsByTagName('Postcode').item(0));
	var countryformfield = document.forms[formname].elements["country"];
	if (countryformfield) countryformfield.value = getNodeValue(xmldoc.getElementsByTagName('Country').item(0));

	showAddress();
}

function getNodeValue(node) {
	var text='';

	if (node.firstChild)
		text=node.firstChild.data;

	return text;
}

function getFirstAddressLine(parts) {
	var s='';
	var AddressLines = new Array();
	
	for (i = 0; i < parts.length; i++) {
		if (parts[i] != '')
			s += parts[i];

		if (i % 2 == 1 && s != ''){
			if (AddressLines.length==0){
				AddressLines[0]=s;
				s='';
			}
			else{
                                if (AddressLines[1] == null) { AddressLines[1] = '';}
				AddressLines[1]+=s;

				s='';
			}
		}
		if (s!='') s += " ";
	}
	return AddressLines;
}

function updateAddress(dropdown){
	makePostcodeRequest(fullAddressURL + dropdown.value, updateFullAddress);
}

function showAddress(){
	if (document.getElementById(addressselection).innerHTML == '<h3>Please wait</h3>')
		document.getElementById(addressselection).innerHTML = '';
	element = document.getElementById('address-instructions-table');
	if(element)element.style.display='none';
	element = document.getElementById('address-container');
	if(element)element.style.display='block';
}

function getInnerTagContent(strReturnXML, strTag) {
	var strIndex;
	if (arguments[2]) strIndex=arguments[2];
	else strIndex = 1

	var re = new RegExp("(<"+strTag+"(.|\n)*?>)(.*?)(</"+strTag+">)");
	//(<body(.|\n)*?>)(.*?)(</body>)
	var m = re.exec(strReturnXML);
	if (m == null) {
		//alert("No match");
	} else {
	/*
	var s = "Match at position " + m.index + ":\n";
	for (i = 0; i < m.length; i++) {
		s = s + m[i] + "\n";
	}
	alert(s);
	*/

	return m[strIndex];

  }
}

function RegexReplace(regex,text,replacement) {
	var re = new RegExp(regex, "gi");
	return text.replace(re, replacement);
}
