postcodelookup = {
    
    POSTCODE_URL : "/postcodelookup/list/",
    FETCH_ADDRESS_URL : "/postcodelookup/fetch/",

    get_region_id : true,

    fill_address: function(target) {
    /* automatic fill region and address*/
        var codename = $('#select_address').val();
        $('#id_load_address_list').after('<span class="kreciol"><img src="/statics/img/ajax-loader-small.gif" alt=""/></span>');
        var kreciol = $('#id_post_code ~ .kreciol');

        $(target).load(postcodelookup.FETCH_ADDRESS_URL, {codename: codename},
            function()
            {
                kreciol.remove();
                var address = $('#fetch_address_address').val();
                var region_id = $('#fetch_address_region_id').val();

                if (address != undefined) {
                    $('#id_address')[0].value = address;
                }

                if (postcodelookup.get_region_id) {
                    if (region_id != undefined && region_id != '-1') {
                        if($('#londonlist_id').length) {
                            $('#id_addr_city2').val(region_id);
                        } else {
                        $.get('/structure/chooser/region/'+region_id+'/parents/', {}, function (data) {
                          var ids = eval('('+data+')').slice(-3);
                          SELECTOR.resetSelectors('region',
                            ['id_big_region', 'id_county', 'id_addr_city'], ids);
                          $('#id_city').val(ids[ids.length-1]);
                        })};
                    }
                }
            }
        );
    },
    attach_address_list_events: function(select_element) {
    /* attach onchange events to select_element */

        var target = $('#fetch_address_placeholder');
        select_element.change(function() { postcodelookup.fill_address(target); });
    
    },
    load_address_list: function(target, postcode){
    /* Loads select with address list into element target */
        
        $('#id_post_code').after('<span class="kreciol"><img src="/statics/img/ajax-loader-small.gif" alt=""/></span>');
        var kreciol = $('#id_post_code ~ .kreciol');
        $(target).load(postcodelookup.POSTCODE_URL, {postcode: postcode}, 
            function() 
            { 
                /* funkcja call with CALLBACK*/
                kreciol.remove();
				/* strip proxy mess */
				$('#load_address_list').hide()
				$('#load_address_list').html($('#load_address_list').html().substring($('#load_address_list').html().indexOf("<"),$('#load_address_list').html().lastIndexOf(">")+1))
				$('#load_address_list').show();
                postcodelookup.get_region_id = true;
                var select_element =  $('select', target);
                $('#select_address').click(postcodelookup.attach_address_list_events(select_element)) 
            } 
            )    
    },
    postcode_onkeypressed: function() {
        /* call load_address_list(target) */
        var postcode =  $('#id_post_code').val()
        var list_div = $('#load_address_list')
        if (postcode.match(/(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-HJKS-UW]) ?[0-9][ABD-HJLNP-UW-Z]{2})/i)){
            postcodelookup.load_address_list(list_div, postcode)
            }
        else {
            alert('Postcode not valid')
        }
        return false;
    },
    init: function() {
       /* connect event postcode_onclick to inputa with postcode */

        $("#get_list").filter(".get_list").click(postcodelookup.postcode_onkeypressed);
        return false;

    }
}

$(document).ready(postcodelookup.init)


