﻿AddressLookup = {
    AjaxUrl: '_LAYOUTS/CB2C/Ajax/AddressLookupHandler.ashx'
};

AddressLookup.ReloadSuburbCombo = function(combo, data, callback) {
    if (combo[0] == null) return;
    var state;
    for (var item in data) {
        state = item.toString().split("|")[0];
        break;
    }
    combo.removeOption(/./);
    combo.addOption(data, false);
    if (callback != null)
        callback(state);
}

AddressLookup.AjaxUpdateSuburb = function(postCodeValue, combo, callback) {
    if (postCodeValue.toString().length == 4) {
        var data = { command: 'postCode', postCode: postCodeValue };
        $.getJSON(AddressLookup.AjaxUrl, data, function(json) { AddressLookup.ReloadSuburbCombo(combo, json, callback); });
    }
}

AddressLookup.AjaxHook = function(postCodeControl, suburbTextControl, suburbComboControl, stateControl, addressControl) {

    postCodeControl.keyup(function() {
        AddressLookup.AjaxUpdateSuburb(postCodeControl.val(), suburbComboControl, function(state) {
            suburbComboControl.change();
            stateControl.val(state);
        });
    });

    suburbComboControl.change(function() {
        if (suburbComboControl.val() != null)
            suburbTextControl.val(suburbComboControl.val());
        else
            suburbTextControl.val("");
    });

    var data = { command: 'address', postCode: postCodeControl.val(), suburb: suburbTextControl.val(), state: stateControl.val(), address: addressControl.val() };
    addressControl.autocomplete(AddressLookup.AjaxUrl,
    { minChars: 1, timeout: 800, parameters: data,
        parametersReset: function(parameters) {
            parameters.postCode = postCodeControl.val();
            parameters.suburb = suburbTextControl.val();
            parameters.state = stateControl.val();
            parameters.address = addressControl.val();
        },
        postClick: function(key) {
            if (key != null) {
                var values = key.split('|');
                stateControl.val(values[3]);
                postCodeControl.val(values[2]);

                AddressLookup.AjaxUpdateSuburb(postCodeControl.val(), suburbComboControl, function() {
                    suburbComboControl.val(values[1]);
                    suburbComboControl.change();
                });
            }
        }
    });
}

AddressLookup.AjaxUnhook = function(postCodeControl, suburbTextControl, suburbComboControl, stateControl, addressControl) {
    addressControl.unbind();
    postCodeControl.unbind();
    suburbComboControl.unbind();
}

// Used by brochure form only    
function initBrochureForm() {
    $("select[jqname=Country]").change(function(e) {
        var countryIndex = $("select[jqname=Country]")[0].selectedIndex;
        var postcode = $("input[jqname=PostCode]");
        var suburbCombo = $("select[jqname=SuburbCombo]");
        var suburbText = $("input[jqname=SuburbText]");
        var state = $("select[jqname=State]");
        var address = $("input[jqname=Address]");

        if (countryIndex == 0) { 
            //- Australia
            AddressLookup.AjaxHook(postcode, suburbText, suburbCombo, state, address);
            postcode.val("");
            suburbText.val("");
            suburbCombo.removeOption(/./);
            state.val("");
            address.val("");
            suburbCombo.attr("style", "display:block");
            suburbText.attr("style", "display:none");
        }
        else { 
            //- New Zealand
            AddressLookup.AjaxUnhook(postcode, suburbText, suburbCombo, state, address);
            postcode.val("NZ");
            suburbText.val("");
            suburbCombo.removeOption(/./);
            state.val("NZ (New Zealand)");
            address.val("");
            suburbCombo.attr("style", "display:none");
            suburbText.attr("style", "display:block");
        }
    });
    $("select[jqname=Country]").change();
}
