$(function() {

    uploadImages();
    
    bindFilterEvents();    
    bindNavigationEvents();
    bindPaginationEvents();
    
    if ($('#resultSort')) {
        bindOrderEvents();
    }
    
    window.onbeforeunload = function(){
        if (document.state) {
            if($(".active").length) {
                document.state.active = $(".active").attr('id').substr(1);
            }
            if(!isEmpty(document.state)) {
                location.hash = JSON.stringify(document.state);
            }
        }
    };

    $(".resultEntry").livequery('click', function(){        
        document.map.clearOverlays();
        $('.resultEntry').removeClass('active');
        $(this).addClass('active');

        if (!$(this).hasClass('agents')) {
            var latLng = new GLatLng(parseFloat($('.latitude', this).html()), parseFloat($('.longitude', this).html()));
            var marker = new GMarker(latLng);
            GEvent.addListener(marker, "click", function() {
                $("a[href=#"+$(".active").parents(".ui-tabs-panel").attr('id')+"]").trigger('click');
                $("#searchResult").scrollTo(".active", {
                    duration:300
                });
            });
            document.map.addOverlay(marker);
        }
        document.state.active = $('.active').attr('id').substr(1);
    });

    if (location.hash) {
        initializeState();
    }
})

function bindOrderEvents() {
    $("#resultSort div.orderby a").hover(function() {
        if($(this).is('.activated')) {
            if($(this).is('.asc')) {
                $(this).removeClass('asc').removeClass('activated').addClass('desc').addClass('inactivated');
            } else {
                $(this).removeClass('desc').removeClass('activated').addClass('asc').addClass('inactivated');
            }
        }
        $(this).addClass('hover');
    }, function() {
        if($(this).is('.inactivated')) {
            if($(this).is('.asc')) {
                $(this).removeClass('asc').removeClass('inactivated').addClass('desc').addClass('activated');
            } else {
                $(this).removeClass('desc').removeClass('inactivated').addClass('asc').addClass('activated');
            }
        }
        $(this).removeClass('hover');
    });
}

function bindNavigationEvents() {
    $(".prev").livequery('click', function() {
        var p = (parseInt(document.page) - parseInt(document.perPage));
        if (0 == p) p = '';
        $($(".ui-state-active a").attr('href')+" .pagination a[href$=/"+p+"]").trigger('click');
    });

    $(".next").livequery('click', function() {
        var p = (parseInt(document.page) + parseInt(document.perPage));
        $($(".ui-state-active a").attr('href')+" .pagination a[href$=/"+p+"]").trigger('click');
    });

    $("#scrollUp").bind('click', function() {
        $(".resultEntry").each(function(i) {
            var t = $(this).offset().top;
            if(i > 0 && t >= $("#searchResult").offset().top) {
                $("#searchResult").scrollTo($(".resultEntry").eq(i-1), 'slow');
                return false;
            }
        });
    });

    $("#scrollDown").bind('click', function() {
        $(".resultEntry").each(function(i) {
            var t = $(this).offset().top;
            if(t > $("#searchResult").offset().top) {
                $("#searchResult").scrollTo(this, 'slow');
                return false;
            }
        });
    });
}

function bindFilterEvents() {
    $("#bedSlider").slider({
        range: true,
        min: 0,
        max: 20,
        values: [0, 20],
        slide: function(event, ui) {
            $("#bedFilter").html('<span class="min">' + ui.values[0] + '</span> - <span class="max">' + ui.values[1] + '</span>');
            if (ui.values[0]==0 && ui.values[1]==20) {
                $("#bedFilter").html('Any');
            }
        },
        stop: function(){
            filterState();
        }
    });
    $("#bathSlider").slider({
        range: true,
        min: 0,
        max: 20,
        values: [0, 20],
        slide: function(event, ui) {
            $("#bathFilter").html('<span class="min">' + ui.values[0] + '</span> - <span class="max">' + ui.values[1] + '</span>');
            if (ui.values[0]==0 && ui.values[1]==20) {
                $("#bathFilter").html('Any');
            }
        },
        stop: function(){
            filterState();
        }
    });
    $("#priceSlider").slider({
        range: true,
        min: 0,
        max: 500000,
        values: [0, 500000],
        slide: function(event, ui) {
            $("#priceFilter").html('&euro; <span class="min">' + ui.values[0] + '</span> - &euro; <span class="max">' + ui.values[1] + '</span>');
            if (ui.values[0]==0 && ui.values[1]==500000) {
                $("#priceFilter").empty().html('Any');
            } else if (ui.values[1]==500000) {
                $("#priceFilter").html('&euro; <span class="min">' + ui.values[0] + '</span> - <span class="max"> Unlimited </span>');
            }
        },
        stop: function(){
            filterState();
        }
    });

    $("#propertyType div").bind('click', function() {
        if($(this).is('.on') && 1 == $(".on").length) { // if the clicked type is the only active type, activate all other types
            $("#propertyType div").addClass('on');
        } else if($("#propertyType div").length == $(".on").length) { // if all is on, activate the clicked one
            $("#propertyType div").removeClass('on');
            $(this).addClass('on');
        } else {
            $(this).toggleClass('on');
        }
        filterState();
    });

    $("#pool").bind('click', function(){
        filterState();
    });
}

function bindPaginationEvents() {
    $("#statusTab").tabs();

    $("#statusTab li a").bind("click", function() {
        updateInterface();
    });

    $("#sale .pagination a").livequery("click", function() {
        $("#resultCount").addClass('hide');
        $("#sale").html('<div id="searchLoading"></div>');

        if (!document.state) {
            document.state = {};
        }

        if (document.agentId && !document.state.agent) {
            document.state.agent = document.agentId;
        }
        document.state.salePage = this.href.substr(this.href.indexOf('#/')+2);

        $("#selfLink").attr('href', '#' + JSON.stringify(document.state));
        document.state.freq = 1;
        if(document.xhr1) document.xhr1.abort();

        document.xhr1 = $.post(document.updateURL + this.href.substr(this.href.indexOf('#/')+2), document.state, function(data) {
            $("#sale").html(data);
            var count = parseInt($("#salecount").html().substring($("#salecount").html().indexOf('(')+1, $("#salecount").html().indexOf(')')));
            if (!document.state.salePage) document.state.salePage = 0;
            document.page = parseInt(document.state.salePage);

            if (count) {
                $(".count").html(parseInt(document.state.salePage) + parseInt(document.perPage) > count ? count : parseInt(document.state.salePage) + parseInt(document.perPage));
                $(".countMin").html(document.state.salePage ? parseInt(document.state.salePage)+1 : 1);
                $("#resultCount").removeClass('hide');
            }
        });
        return false;
    });

    $("#week .pagination a").livequery("click", function(){
        $("#week").html('<div id="searchLoading"></div>');
        if(!document.state) {
            document.state = {};
        }
        if(document.agentId && !document.state.agent) {
            document.state.agent = document.agentId;
        }

        document.state.weekPage = this.href.substr(this.href.indexOf('#/')+2);

        $("#selfLink").attr('href', '#'+JSON.stringify(document.state));
        document.state.freq = 2;
        if (document.xhr2) document.xhr2.abort();
        document.xhr2 = $.post(document.updateURL + this.href.substr(this.href.indexOf('#/')+2), document.state, function(data) {
            if(!document.state.weekPage) document.state.weekPage = 0;

            $("#week").html(data);
            var count = parseInt($("#holidaycount").html().substring($("#holidaycount").html().indexOf('(')+1, $("#holidaycount").html().indexOf(')')));
            $(".count").html(parseInt(document.state.weekPage) + parseInt(document.perPage) > count ? count : parseInt(document.state.weekPage) + parseInt(document.perPage));
            $(".countMin").html(document.state.weekPage ? parseInt(document.state.weekPage)+1 : 1);

            document.page = parseInt(document.state.weekPage);
        });
        return false;
    });

    $("#month .pagination a").livequery("click", function() {
        $("#month").html('<div id="searchLoading"></div>');
        if (!document.state) {
            document.state = {};
        }
        if (document.agentId && !document.state.agent) {
            document.state.agent = document.agentId;
        }

        document.state.monthPage = this.href.substr(this.href.indexOf('#/')+2);
        $("#selfLink").attr('href', '#'+JSON.stringify(document.state));
        document.state.freq = 3;
        if (document.xhr3) document.xhr3.abort();

        document.xhr3 = $.post(document.updateURL + this.href.substr(this.href.indexOf('#/')+2), document.state, function(data) {
            if (!document.state.monthPage) document.state.monthPage = 0;

            $("#month").html(data);

            var count = parseInt($("#holidaycount").html().substring($("#holidaycount").html().indexOf('(')+1, $("#holidaycount").html().indexOf(')')));
            $(".count").html(parseInt(document.state.monthPage) + parseInt(document.perPage) > count ? count : parseInt(document.state.monthPage) + parseInt(document.perPage));
            $(".countMin").html(document.state.monthPage ? parseInt(document.state.monthPage)+1 : 1);

            document.page = parseInt(document.state.monthPage);
        });
        return false;
    });
}

function uploadImages() {
    $("body").append('<img src="/images/reload.gif" style="display: none;" />');
    $("body").append('<img src="/styles/images/loading.gif" alt="loading" style="display: none;" />');
    $("body").append('<img src="/styles/images/offBG_2.gif" alt="offbg_2" style="display: none;" />');
    $("body").append('<img src="/images/marker.png" alt="marker" style="display: none;" />');
    $("body").append('<img src="/images/add.png" alt="marker" style="display: none;" />');
    $("body").append('<img src="/images/remove.png" alt="marker" style="display: none;" />');
    $("body").append('<img src="/images/' + document.image + '" alt="" style="display: none;" />');
    $("body").append('<img src="/images/' + document.imageAlt + '" alt="" style="display: none;" />');
}

function updateInterface() {
    var perpage    = parseInt(document.perPage);
    var seletecTab = $('#statusTab').data('selected.tabs');
    var count, curpage;

    $("#resultCount").addClass('hide');

    if (seletecTab == 0) {
        if (!document.state.salePage) document.state.salePage = '0';
        count   = parseInt($("#salecount").html().substring($("#salecount").html().indexOf('(')+1, $("#salecount").html().indexOf(')')));
        curpage = parseInt(document.state.salePage);
    } else if (seletecTab == 1) {
        if (!document.state.weekPage) document.state.weekPage = '0';
        count   = parseInt($("#holidaycount").html().substring($("#holidaycount").html().indexOf('(')+1, $("#holidaycount").html().indexOf(')')));
        curpage = parseInt(document.state.weekPage);
    } else if (seletecTab == 2) {
        if (!document.state.monthPage) document.state.monthPage = '0';
        count   = parseInt($("#longcount").html().substring($("#longcount").html().indexOf('(')+1, $("#longcount").html().indexOf(')')));
        curpage = parseInt(document.state.monthPage);
    }
    if (count) {
        $(".count").html(curpage + perpage > count ? count : curpage + perpage);
        $(".countMin").html(curpage ? curpage+1 : 1);
        $("#resultCount").removeClass('hide');
    }
}

function filterState() {
    var state      = getDocumentState();
    document.state = state;

    $("#resultCount").addClass('hide');
    $("#sale").html('<div id="searchLoading"></div>');
    $("#week").html('<div id="searchLoading"></div>');
    $("#month").html('<div id="searchLoading"></div>');

    $("#salecount").html('For Sale <img src="/images/reload.gif" style="vertical-align:middle;" />');
    $("#holidaycount").html('Holiday Let <img src="/images/reload.gif" style="vertical-align:middle;" />');
    $("#longcount").html('Long let <img src="/images/reload.gif" style="vertical-align:middle;" />');
    $("#paginationSale").html('');
    $("#paginationWeek").html('');
    $("#paginationMonth").html('');

    if(document.xhr1) document.xhr1.abort();
    state.freq = 1;
    document.xhr1 = $.post(document.updateURL, state, function(data) {
        $("#sale").html(data);
        $("#salecount").html('For Sale ('+$("#sale .property-count-update").html()+')');
        if (0 == $('#statusTab').data('selected.tabs')) {
            var count = parseInt($("#salecount").html().substring($("#salecount").html().indexOf('(')+1, $("#salecount").html().indexOf(')')));
            if (count) {
                document.state.salePage = 0;
                $(".count").html(parseInt(document.state.salePage) + parseInt(document.perPage) > count ? count : parseInt(document.state.salePage) + parseInt(document.perPage));
                $(".countMin").html(document.state.salePage ? parseInt(document.state.salePage)+1 : 1);
                document.page = 0;
                $("#resultCount").removeClass('hide');
            }
        }
    });

    state.freq = 2;
    if(document.xhr2) document.xhr2.abort();
    document.xhr2 = $.post(document.updateURL, state, function(data) {
        $("#week").html(data);
        $("#holidaycount").html('Holiday Let ('+$("#week .property-count-update").html()+')');
        if (1 == $('#statusTab').data('selected.tabs')) {
            var count = parseInt($("#holidaycount").html().substring($("#holidaycount").html().indexOf('(')+1, $("#holidaycount").html().indexOf(')')));
            if (count) {
                document.state.weekPage = 0;
                $(".count").html(parseInt(document.state.weekPage) + parseInt(document.perPage) > count ? count : parseInt(document.state.weekPage) + parseInt(document.perPage));
                $(".countMin").html(document.state.weekPage ? parseInt(document.state.weekPage) + 1 : 1);
                document.page = 0;
                $("#resultCount").removeClass('hide');
            }
        }
    });
    state.freq = 3;
    if(document.xhr3) document.xhr3.abort();
    document.xhr3 = $.post(document.updateURL, state, function(data) {
        $("#month").html(data);
        $("#longcount").html('Long Let ('+$("#month .property-count-update").html()+')');
        if (2 == $('#statusTab').data('selected.tabs')) {
            var count = parseInt($("#longcount").html().substring($("#longcount").html().indexOf('(')+1, $("#longcount").html().indexOf(')')));
            if(count) {
                document.state.monthPage = 0;
                $(".count").html(parseInt(document.state.monthPage) + parseInt(document.perPage) > count ? count : parseInt(document.state.monthPage) + parseInt(document.perPage));
                $(".countMin").html(document.state.monthPage ? parseInt(document.state.monthPage)+1 : 1);
                document.page = 0;
                $("#resultCount").removeClass('hide');
            }
        }
    });
    
    $("#selfLink").attr('href', '#' + JSON.stringify(document.state));
}

function initializeState() {
    document.state = JSON.parse(unescape(location.hash.substr(1)));
    if (document.state.order) {
        var a = document.state.order.split(' ');
        $(".activated").removeClass("activated");
        $('#sort'+a[0]).addClass("activated")
    }
    var count = 0;

    for (k in document.state) {
        if (document.state.hasOwnProperty(k)) count++;
    }
  
    if (document.state.active && 1 == count) {
        $("#p"+document.state.active).addClass('active');
        $("#searchResult").scrollTo(".active", {
            duration:300
        });
            
        if (document.map) {
            document.map.clearOverlays();
            var marker = new GMarker(new GLatLng(parseFloat($('.latitude', $(".active")).html()), parseFloat($('.longitude', $(".active")).html())));
            GEvent.addListener(marker, "click", function() {
                $("a[href=#"+$(".active").parents(".ui-tabs-panel").attr('id')+"]").trigger('click');
                $("#searchResult").scrollTo(".active", {
                    duration:300
                });
            });
            document.map.addOverlay(marker);
        }
        return false;
    }

    initializeFilters();        

    $("#resultCount").addClass('hide');
    $("#sale").html('<div id="searchLoading"></div>');
    $("#week").html('<div id="searchLoading"></div>');
    $("#month").html('<div id="searchLoading"></div>');
    $("#salecount").html('For Sale <img src="/images/reload.gif" style="vertical-align:middle;" />');
    $("#holidaycount").html('Holiday Let <img src="/images/reload.gif" style="vertical-align:middle;" />');
    $("#longcount").html('Long let <img src="/images/reload.gif" style="vertical-align:middle;" />');
    $("#paginationSale").html('');
    $("#paginationWeek").html('');
    $("#paginationMonth").html('');

    if (document.state.x && document.state.y && document.state.z) {
        $('#mapHelper').attr('src', '/images/' + document.imageAlt);
        document.mapMoved = true;

        if (document.map) {
            document.map.setCenter(new GLatLng(parseFloat(document.state.y), parseFloat(document.state.x)), parseInt(document.state.z));
        }
    }
          
    if (document.xhr1) document.xhr1.abort();
    document.state.freq = 1;
    document.state.salePage = undefined != document.state.salePage ? document.state.salePage : '';

    document.xhr1 = $.post(document.updateURL + document.state.salePage, document.state, function(data) {
        $("#sale").html(data);
        $("#salecount").html('For Sale ('+$("#sale .property-count-update").html()+')');
        $("#paginationSale").html($("#sale .pagination-update").html());

        if(document.state.active && $("#p"+document.state.active).length && $("#p"+document.state.active).is(':not(.active)')) {
            addMapMarker();
        }
    });

    document.state.freq = 2;
    document.state.weekPage = undefined != document.state.weekPage ? document.state.weekPage : '';

    if(document.xhr2) document.xhr2.abort();

    document.xhr2 = $.post(document.updateURL + document.state.weekPage, document.state, function(data) {
        $("#week").html(data);
        $("#holidaycount").html('Holiday Let ('+$("#week .property-count-update").html()+')');
        $("#paginationWeek").html($("#week .pagination-update").html());
        if (document.state.active && $("#p"+document.state.active).length && $("#p"+document.state.active).is(':not(.active)')) {
            addMapMarker();
        }
    });

    document.state.freq = 3;
    document.state.monthPage = undefined != document.state.monthPage ? document.state.monthPage : '';

    if(document.xhr3) document.xhr3.abort();

    document.xhr3 = $.post(document.updateURL + document.state.monthPage, document.state, function(data) {
        $("#month").html(data);
        $("#longcount").html('Long Let ('+$("#month .property-count-update").html()+')');
        $("#paginationMonth").html($("#month .pagination-update").html());
        if(document.state.active && $("#p"+document.state.active).length && $("#p"+document.state.active).is(':not(.active)')) {
            addMapMarker();
        }
    });
}

function initializeFilters() {
    if (!document.state.pricemax) {
        document.state.pricemax = 5000000;
    }
    if (document.state.pricemin && document.state.pricemax) {
        $("#priceSlider").slider("values", 0, document.state.pricemin);
        $("#priceSlider").slider("values", 1, document.state.pricemax);
        $("#priceFilter").html('<div class="no-break">&euro;&nbsp;<span class="min">' + document.state.pricemin + '</span>&nbsp;-&nbsp;&euro;&nbsp;<span class="max">' + (document.state.pricemax == 5000000 ? 'Unlimited' : document.state.pricemax) + '</span>');
        if (document.state.pricemin==0 && document.state.pricemax==5000000) {
            $("#priceFilter").html('Any');
        }
    }

    if (document.state.bedmin && document.state.bedmax) {
        $("#bedSlider").slider("values", 0, document.state.bedmin);
        $("#bedSlider").slider("values", 1, document.state.bedmax);
        $("#bedFilter").html('<span class="min">' + document.state.bedmin + '</span>&nbsp;&mdash;&nbsp;<span class="max">' + document.state.bedmax + '</span>');
        if (document.state.bedmin==0 && document.state.bedmax==10) {
            $("#bedFilter").html('Any');
        }
    }

    if (document.state.bathmin && document.state.bathmax) {
        $("#bathSlider").slider("values", 0, document.state.bathmin);
        $("#bathSlider").slider("values", 1, document.state.bathmax);
        $("#bathFilter").html('<span class="min">' + document.state.bathmin + '</span> - <span class="max">' + document.state.bathmax + '</span>');
        if (document.state.bathmin==0 && document.state.bathmax==10) {
            $("#bathFilter").html('Any');
        }
    }

    if (document.state.types) {
        var types = document.state.types.split(' ');
        $(".on").removeClass('on');
        for(i in types) {
            $("#"+types[i]).addClass('on');
        }
    }

    if(document.state.pool) {
        $("#pool").attr('checked', true);
    }
}

function addMapMarker() {
    $("#p"+document.state.active).addClass('active');
    $("a[href=#"+$(".active").parents(".ui-tabs-panel").attr('id')+"]").trigger('click');
    $("#searchResult").scrollTo(".active", {
        duration:300
    });
    
    document.map.clearOverlays();

    var latLng = new GLatLng(parseFloat($('.latitude', $(".active")).html()), parseFloat($('.longitude', $(".active")).html()))
    var marker = new GMarker(latLng);

    GEvent.addListener(marker, "click", function() {
        $("a[href=#" + $(".active").parents(".ui-tabs-panel").attr('id')+"]").trigger('click');
        $("#searchResult").scrollTo(".active", {
            duration:300
        });
    });
    document.map.addOverlay(marker);
}

function backToSearchPage(event) {
    var obj = {};

    if (document.map.getCenter()) {
        obj.y = document.map.getCenter().lat();
        obj.x = document.map.getCenter().lng();
        obj.s = document.map.getBounds().getSouthWest().lat();
        obj.w = document.map.getBounds().getSouthWest().lng();
        obj.n = document.map.getBounds().getNorthEast().lat();
        obj.e = document.map.getBounds().getNorthEast().lng();
        obj.z = document.map.getZoom();
    }
    document.location.href = '/search#' + JSON.stringify(obj);
    event.preventDefault();
}

function showAgentProperties(agentId) {
    var stage = getDocumentState();
    stage.agent = agentId;
    document.location.href = '/agent/' + agentId + '#' + JSON.stringify(stage);
}

function getDocumentState() {
    var state = {};
        
    if (undefined !== document.state.com && false == document.mapMoved) state.com = document.state.com;
    if (undefined !== document.state.pro && false == document.mapMoved) state.pro = document.state.pro;
    if (undefined !== document.state.mun && false == document.mapMoved) state.mun = document.state.mun;
    if (undefined !== document.state.town && false == document.mapMoved) state.town = document.state.town;
    if (undefined !== document.state.shortlist) state.shortlist = 1;
    if (undefined !== document.state.area) state.area = document.state.area;
    if (undefined !== document.agentId) state.agent = document.agentId;

    if ($(".orderby").length) {
        var activated = $(".orderby a.activated");
        if (!activated.length) {
            activated = $("#sortDate");
            activated.addClass('activated');
        }
        state.order = activated.attr('id').substr(4) + (activated.is('.asc') ? ' ASC' : ' DESC');
    }
  
    if ($("#priceSlider").parent().find(".min").length) {
        state.pricemin = parseInt($("#priceSlider").parent().find(".min").html());
        state.pricemax = parseInt($("#priceSlider").parent().find(".max").html());
        if(!state.pricemax) delete state.pricemax;
    }
    if ($("#bedSlider").parent().find(".min").length) {
        state.bedmin = parseInt($("#bedSlider").parent().find(".min").html());
        state.bedmax = parseInt($("#bedSlider").parent().find(".max").html());
        if(!state.bedmax) delete state.bedmax;
    }
    if ($("#bathSlider").parent().find(".min").length) {
        state.bathmin = parseInt($("#bathSlider").parent().find(".min").html());
        state.bathmax = parseInt($("#bathSlider").parent().find(".max").html());
        if(!state.bathmax) delete state.bathmax;
    }
    if ($("#pool").is(':checked')) {
        state.pool = $("#pool").is(':checked');
    }

    if ($("#propertyType div").length != $(".on").length) {
        var proptypes = [];
        $(".on").each(function(){
            proptypes.push($(this).attr('id'));
        });
        state.types = proptypes.join(' ');
    }
    
    if (document.map && document.mapMoved) {
        //alert('mapMoved');
        state.y = document.map.getCenter().lat();
        state.x = document.map.getCenter().lng();
        state.s = document.map.getBounds().getSouthWest().lat();
        state.w = document.map.getBounds().getSouthWest().lng();
        state.n = document.map.getBounds().getNorthEast().lat();
        state.e = document.map.getBounds().getNorthEast().lng();
        state.z = document.map.getZoom();        
    }
    return state;
}

function saveSearchQuery() {
			
    var state = getDocumentState();

    state.title = $('#search_query_title').val();

    if ($('#saveSearchQueryForm input[checked]').length) {
        state.query_id = $('#saveSearchQueryForm input[checked]').val();
    }

    $.post('/search/save_search_query', state, function(data) {
        $.blockUI({
            css: {
                padding: '10px',
                width: '500px'
            },
            message: '<div style="padding: 25px 0;"><h2>Your search query was saved</h2></div>',
            timeout: 2000
        });
    });
}

function showSatelliteOption() {
    var offset = $(this).offset();
    $("#typeSatHyb").css('display', 'block');
    $("#typeSatHyb").css('top', offset.top + $(this).height() + 1);
    $("#typeSatHyb").css('left', offset.left + 2);
}

function bindMapEvents() {

    $('#mapHelper').removeClass('hide');

    $('#mapHelper').bind('mousedown', function(){
        document.map.setCenter(new GLatLng(document.map.getCenter().lat() + 0.001, (document.map.getCenter().lng())), document.map.getZoom());
        $('#mapHelper').attr('src', '/images/' + document.imageAlt);
    });

    $("#btnZoomIn").bind('click', function(){
        document.mapMoved = true;
        filterState();
        $('#mapHelper').attr('src', '/images/' + document.imageAlt);
        document.map.zoomIn();
    });
    $("#btnZoomOut").bind('click', function(){
        document.mapMoved = true;
        filterState();
        $('#mapHelper').attr('src', '/images/' + document.imageAlt);
        document.map.zoomOut();
    });

    $("#resultSort div.orderby a.hover").livequery('click', function(){
        $(".activated").removeClass("activated");
        $(".inactivated").removeClass("inactivated");
        $(this).addClass("activated").removeClass("hover");
        filterState(false);
    });

    $("#btnTypeMap").bind('click', function(){
        $(this).css("font-weight", "bold");
        $("#typeSatHyb").css('display', 'none');
        $("#btnTypeRelief, #btnTypeSat").css("font-weight", "normal");
        $("#btnTypeSat").unbind('mouseover', showSatelliteOption);

        document.map.setMapType(G_NORMAL_MAP);
    });

    $("#btnTypeSat").bind('click', function() {
        var offset = $(this).offset();
        $(this).css("font-weight", "bold");
        $("#btnTypeMap, #btnTypeRelief").css("font-weight", "normal");
        $("#typeSatHyb").css('display', 'block');
        $("#typeSatHyb").css('top', offset.top + $(this).height() + 1);
        $("#typeSatHyb").css('left', offset.left + 2);
        $("#btnTypeSat").bind('mouseover', showSatelliteOption);

        if ($("#chkTypeSatHyb").attr('checked') == true) {
            document.map.setMapType(G_HYBRID_MAP);
        } else {
            document.map.setMapType(G_SATELLITE_MAP);
        }
    });

    $("#btnTypeSat").bind('mouseout', function(event) {
        if (event.relatedTarget.id != 'typeSatHyb') {
            $("#typeSatHyb").css('display', 'none');
        }
    });

    $("#typeSatHyb").bind('mouseout', function(event) {
        if (event.relatedTarget.id != 'btnTypeSat' && event.relatedTarget.id != 'chkTypeSatHyb') {
            $("#typeSatHyb").css('display', 'none');
        }
    });

    $("#chkTypeSatHyb").bind('click', function(){
        if (this.checked == true) {
            document.map.setMapType(G_HYBRID_MAP);
        } else {
            document.map.setMapType(G_SATELLITE_MAP);
        }
    });

    $("#btnTypeRelief").bind('click', function(){
        $(this).css("font-weight", "bold");
        $("#btnTypeMap, #btnTypeSat").css("font-weight", "normal");
        $("#typeSatHyb").css('display', 'none');
        $("#btnTypeSat").unbind('mouseover', showSatelliteOption);
        document.map.setMapType(G_PHYSICAL_MAP);
    });
}

function setCookie(c_name,value,expiredays) {
    var exdate=new Date();
    exdate.setDate(exdate.getDate()+expiredays);
    document.cookie=c_name+ "=" +escape(value)+";path=/"+((expiredays==null) ? "" : ";expires="+exdate.toGMTString());
}

function deleteCookie( name ) {
    if ( getCookie( name ) ) document.cookie = name + "=;path=/;expires=Thu, 01-Jan-1970 00:00:01 GMT";
}

function getCookie(c_name) {
    if (document.cookie.length>0) {
        c_start=document.cookie.indexOf(c_name + "=");
        if (c_start!=-1) {
            c_start=c_start + c_name.length+1;
            c_end=document.cookie.indexOf(";",c_start);
            if (c_end==-1) c_end=document.cookie.length;
            return unescape(document.cookie.substring(c_start,c_end));
        }
    }
    return "";
}    

function addOrRemoveShortList(property) {
    var a = $('#property_' + property);

    $.post('/shortlist/add_or_remove/' + property, function (result) {
        var image = (result == 'added') ? 'remove' : 'add';
        a.html('<img src="/images/' + image + '.png" alt="" />');
    });
    return false;
}

function removeFromShortList(property) {
    $.post('/shortlist/add_or_remove/' + property, function () {
        filterState();
    });
}

function isEmpty(o) {
    var i, v;
    if (typeof(o) === 'object') {
        for (i in o) {
            v = o[i];
            if (v !== undefined && typeof(v) !== 'function') {
                return false;
            }
        }
    }
    return true;
}

if(!this.JSON){
    JSON={}
}(function(){
    function f(n){
        return n<10?'0'+n:n
    }if(typeof Date.prototype.toJSON!=='function'){
        Date.prototype.toJSON=function(a){
            return this.getUTCFullYear()+'-'+f(this.getUTCMonth()+1)+'-'+f(this.getUTCDate())+'T'+f(this.getUTCHours())+':'+f(this.getUTCMinutes())+':'+f(this.getUTCSeconds())+'Z'
        };String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(a){
            return this.valueOf()
        }
    }var e=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,escapable=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,gap,indent,meta={
        '\b':'\\b',
        '\t':'\\t',
        '\n':'\\n',
        '\f':'\\f',
        '\r':'\\r',
        '"':'\\"',
        '\\':'\\\\'
    },rep;function quote(b){
        escapable.lastIndex=0;return escapable.test(b)?'"'+b.replace(escapable,function(a){
            var c=meta[a];return typeof c==='string'?c:'\\u'+('0000'+a.charCodeAt(0).toString(16)).slice(-4)
        })+'"':'"'+b+'"'
    }function str(a,b){
        var i,k,v,length,mind=gap,partial,value=b[a];if(value&&typeof value==='object'&&typeof value.toJSON==='function'){
            value=value.toJSON(a)
        }if(typeof rep==='function'){
            value=rep.call(b,a,value)
        }switch(typeof value){
            case'string':return quote(value);case'number':return isFinite(value)?String(value):'null';case'boolean':case'null':return String(value);case'object':if(!value){
                return'null'
            }gap+=indent;partial=[];if(Object.prototype.toString.apply(value)==='[object Array]'){
                length=value.length;for(i=0;i<length;i+=1){
                    partial[i]=str(i,value)||'null'
                }v=partial.length===0?'[]':gap?'[\n'+gap+partial.join(',\n'+gap)+'\n'+mind+']':'['+partial.join(',')+']';gap=mind;return v
            }if(rep&&typeof rep==='object'){
                length=rep.length;for(i=0;i<length;i+=1){
                    k=rep[i];if(typeof k==='string'){
                        v=str(k,value);if(v){
                            partial.push(quote(k)+(gap?': ':':')+v)
                        }
                    }
                }
            }else{
                for(k in value){
                    if(Object.hasOwnProperty.call(value,k)){
                        v=str(k,value);if(v){
                            partial.push(quote(k)+(gap?': ':':')+v)
                        }
                    }
                }
            }v=partial.length===0?'{}':gap?'{\n'+gap+partial.join(',\n'+gap)+'\n'+mind+'}':'{'+partial.join(',')+'}';gap=mind;return v
        }
    }if(typeof JSON.stringify!=='function'){
        JSON.stringify=function(a,b,c){
            var i;gap='';indent='';if(typeof c==='number'){
                for(i=0;i<c;i+=1){
                    indent+=' '
                }
            }else if(typeof c==='string'){
                indent=c
            }rep=b;if(b&&typeof b!=='function'&&(typeof b!=='object'||typeof b.length!=='number')){
                throw new Error('JSON.stringify');
            }return str('',{
                '':a
            })
        }
    }if(typeof JSON.parse!=='function'){
        JSON.parse=function(c,d){
            var j;function walk(a,b){
                var k,v,value=a[b];if(value&&typeof value==='object'){
                    for(k in value){
                        if(Object.hasOwnProperty.call(value,k)){
                            v=walk(value,k);if(v!==undefined){
                                value[k]=v
                            }else{
                                delete value[k]
                            }
                        }
                    }
                }return d.call(a,b,value)
            }e.lastIndex=0;if(e.test(c)){
                c=c.replace(e,function(a){
                    return'\\u'+('0000'+a.charCodeAt(0).toString(16)).slice(-4)
                })
            }if(/^[\],:{}\s]*$/.test(c.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,'@').replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,']').replace(/(?:^|:|,)(?:\s*\[)+/g,''))){
                j=eval('('+c+')');return typeof d==='function'?walk({
                    '':j
                },''):j
            }throw new SyntaxError('JSON.parse');
        }
    }
})();
