var availableAddresses = new Array();

function searchForPostcode( postcode ) {

    $("#addressSearchError").hide();
	$("#ajax_loader").show();

	postcode = postcode.replace(' ','');
	postcode = (postcode.substring(0,postcode.length-3) + " " +postcode.substr(postcode.length-3,3)).toUpperCase();

	if (checkPostcodeIsValid( postcode ) ) {
		$("#addressSelectArea").hide();
		getAddress(postcode);
	} else {
		alert("This does not appear to be a valid postcode");
		$("#ajax_loader").hide();
	} 
}

function checkPostcodeIsValid( postcode ) {
	return (/^(GIR 0AA|[A-PR-UWYZ]([0-9]{1,2}|([A-HK-Y][0-9]|[A-HK-Y][0-9]([0-9]|[ABEHMNPRV-Y]))|[0-9][A-HJKMS-UW]) [0-9][ABD-HJLNP-UW-Z]{2})$/.test(postcode));
}

function getAddress(postcode) {
	$.getJSON("../../lookup.php?postcode="+postcode, function(jsonMap) {			

        $("#ajax_loader").hide();
		
		if (jsonMap.message) {
        		$("#addressSearchError").html(jsonMap.message);
        		$("#addressSearchError").show();
		} else {
		  	$("#selectAddress").removeOption(/./);
          		availableAddresses = new Array();
			$.each(jsonMap.addresses, function(i,address) { 
	       			$("#selectAddress").addOption(i,formatAddressDetail(address),false); 
		   		availableAddresses[i] = address;
          		});
			$("#addressSelectArea").show();
		}
	});
}	

function formatAddressDetail(address) {
    var formatted = "";
    formatted += formatAddressLine(address.flatNumber);
    formatted += formatAddressLine(address.houseName);
    formatted += formatAddressLine(address.houseNumber);
    formatted += formatAddressLine(address.address1);
    formatted += formatAddressLine(address.address2);
    formatted += address.town;
    return formatted;
}

function formatAddressLine(addressLine) {
	if ("" == addressLine || null == addressLine) {
		return "";
	}
	return addressLine + ", ";
}

function setAddressValues(index) {
    $("#addressDetails").show();
    $("#flatNumber").val( availableAddresses[index].flatNumber );
    $("#houseName").val( availableAddresses[index].houseName );
    $("#houseNumber").val( availableAddresses[index].houseNumber );
    $("#address1").val( availableAddresses[index].address1 );
    $("#address2").val( availableAddresses[index].address2 );
    $("#town").val( availableAddresses[index].town );
    $("#postcode").val( availableAddresses[index].postcode );
}
