var request;

function _call(url) {

    // branch for native XMLHttpRequest object

    if (window.XMLHttpRequest) {
        request = new XMLHttpRequest();
        request.onreadystatechange = _process;
        request.open("GET", url, true);
        request.send(null);
    }

    // branch for IE/Windows ActiveX version

    else if (window.ActiveXObject) {
        request = new ActiveXObject("Microsoft.XMLHTTP");
        if (request) {
            request.onreadystatechange = _process;
            request.open("GET", url, true);
            request.send();
        }
    }
}

function _process() {

    if (request.readyState == 4) {
    
        if (request.status == 200) {
            try {
                process();
	    }
	    catch (e) {
	        unlock();
	    }
        }
        else {
	    unlock();
	}
	
    }
}

var searching = "Searching, please wait...";

function lock() {

    // stuff you might want to do once the client has demonstrated
    // that javascript is available

    document.getElementById("address_1").disabled = true;
    document.getElementById("address_2").disabled = true;
    document.getElementById("address_3").disabled = true;
    document.getElementById("address_4").disabled = true;
	
    document.getElementById("address_1").value = searching;
    document.getElementById("address_2").value = "";
    document.getElementById("address_3").value = "";
    document.getElementById("address_4").value = "";
    
}

function process() {

    var root = request.responseXML.documentElement;

    unlock(); // small race condition here

    var add1 = root.getElementsByTagName('address1')[0].firstChild;
    var add2 = root.getElementsByTagName('address2')[0].firstChild;
    var add3 = root.getElementsByTagName('address3')[0].firstChild;
    var add4 = root.getElementsByTagName('address4')[0].firstChild;

    document.getElementById("address_1").value = add1 != null ? add1.data : '';
    document.getElementById("address_2").value = add2 != null ? add2.data : '';
    document.getElementById("address_3").value = add3 != null ? add3.data : '';
    document.getElementById("address_4").value = add4 != null ? add4.data : '';

    document.getElementById("postcode").value = document.getElementById("postcode").value.toUpperCase();

}

function unlock() {

    // unwind things you may have done in init()

    if (document.getElementById("address_1").value == searching) {
        document.getElementById("address_1").value = "";
    }

    document.getElementById("address_1").disabled = false;
    document.getElementById("address_2").disabled = false;
    document.getElementById("address_3").disabled = false;
    document.getElementById("address_4").disabled = false;
    
}

function soft_populate() {

    var add1 = document.getElementById('address_1').value;
    var add2 = document.getElementById('address_2').value;
    var add3 = document.getElementById('address_3').value;
    var add4 = document.getElementById('address_4').value;

    if ((add1 != "") || (add2 != "") || (add3 != "") || (add4 != "")) {
        return;
    }
    else {
        populate();
    }
    
}
    
function populate() {

    var building = document.getElementById('building').value;
    var postcode = document.getElementById('postcode').value;

    if ((building != "") && (postcode != "")) {
    
        lock();
    
        url = "/members/getaddress?building=" + escape(building) + "&postcode=" + escape(postcode);

        try {
            _call(url);
	}
	catch (e) {
	    unlock();
	}
	
    } else {

        alert('To look up your address you must enter a building number/name and postcode.');

    }
    
}

