
function set_location(point) {
    if (map.getZoom() > 12) {
        $("#latitude").val(point.lat());
        $("#longitude").val(point.lng());
    } else {
        $("#latitude").val("");
        $("#longitude").val("");
    }
}
function z(e) {
    return document.getElementById(e);
}
function p(str, t, cid) {
    var i=0;var m=z(t);
    m.options[i++]=new Option(I18N_ALL,'');
    if (str == undefined) {m.selectedIndex=0; return;}
    var l=str.split("|");
    var c = 0;
    for (x=0;x<l.length;x++) {
        d = l[x].split('_');
        if (d[0] == cid) c = i;
        m.options[i++] = new Option(d[1], d[0]);
    }
    m.selectedIndex=c;
}
function pr(cid){
    var x=z("ci");
    for(var i=x.options.length;i>=0;i--) x.options[i]=null;
    x.selectedIndex=-1;
    p(r[z("pr").value], "ci", cid);
}
function add_city_field(cid){
    var city_field = '<div><label for="ci">' + I18N_CITY + '</label><select id="ci" name="ci"><option value="">' + I18N_ALL + '</option></select></div>';
    $("#pr").after(city_field);
    $("#pr").change(function() {
        pr();
    });
    pr(cid);
}
function set_price(name, prices, end, cur_p) {
    var b = z(name);
    for(i = b.options.length; i >= 0; i--)
        b.options[i] = null;
    var c = (end) ? prices.length-1 : 0;
    for (var x = 0; x < prices.length; x++) {
        b.options[x] = new Option(prices[x], prices[x]);
        if (cur_p != '' && cur_p == prices[x]) c = x;
    }
    if (end) {
        b.options[x-1].text = b.options[x-1].text + '+';
        b.options[x-1].value = '';
    }
    b.selectedIndex = c;
}

var r_r = Array()
for (i = 0; i < 500; i += 50) r_r.push(i);
for (i = 500; i < 5000; i += 500) r_r.push(i);
var s_r = Array();
for (i = 0; i < 100000; i += 20000) s_r.push(i);
for (i = 100000; i < 300000; i += 50000) s_r.push(i);
for (i = 300000; i < 1000000; i += 100000) s_r.push(i);


function add_price_picker() {
    var price_picker = '<legend>'+I18N_PRICE+'</legend><div><label for="pb">'+I18N_FROM+'</label><select id="pb" name="pb"></select></div><div><label for="pt">'+I18N_TO+'</label><select id="pt" name="pt"></select></div>';
    $("#price_range").empty();
    $("#price_range").append(price_picker);
}

function update_price(ot, cur_pb, cur_pt) {
    var p = Array();
    if (ot == 'r') {
        p = r_r;
    } else if (ot == 's') {
        p = s_r;
    } else {
        $("#price_range").empty();
        $("#price_range").html(I18N_OFFER_HAS_NO_PRICE_RANGE);
        return;
    }
    add_price_picker();
    set_price('pb', p, false, cur_pb);
    set_price('pt', p, true, cur_pt);
    $('#pt').selectedIndex = p.length-1;
}
function picker_setup(cid, cur_pb, cur_pt) {
    add_city_field(cid);
    $("input[@name='ot']").click(function(){
        update_price($("input[@name='ot']:checked").val(), '-1', '-1')
    });
    add_price_picker();
    update_price($("input[@name='ot']:checked").val(), cur_pb, cur_pt);
}
function init_post_gmap() {
    if (GBrowserIsCompatible()) {
        var options = {
            showOnLoad : true,
            //searchFormHint : "τ.κ.",
            onMarkersSetCallback : function(markers) {
                for (i in markers) {
                    markers[i].marker.remove();
                }
            }
        };

        map = new GMap2(document.getElementById("post_map_canvas"), {googleBarOptions: options});
        if ($("#latitude").val() != "") {
            map.setCenter(new GLatLng(parseFloat($("#latitude").val()), parseFloat($("#longitude").val())), 16, G_HYBRID_MAP);
        } else {
            map.setCenter(new GLatLng(38.324420427006544, 24.14794921875), 6, G_HYBRID_MAP);
        }
        map.addControl(new GMapTypeControl());
        map.addControl(new GLargeMapControl());
        map.enableScrollWheelZoom();
        map.addControl(new google.maps.LocalSearch(
                {
                    searchFormHint : I18N_POSTCODE,
                    onMarkersSetCallback : function(markers) {
                        for (i in markers) {
                            markers[i].marker.remove();
                        }
                    }
                }
            )
        );

        var location_marker = new GMarker(map.getCenter(), {draggable: true});
        map.addOverlay(location_marker);

        GEvent.addListener(location_marker, "dragend", function() {
            set_location(location_marker.getPoint());
        });

        GEvent.addListener(map, "move", function(point) {
            location_marker.setPoint(map.getCenter());
            set_location(location_marker.getPoint());
        });
        GEvent.addListener(map, "click", function(overlay, point) {
            if (overlay) {

            } else {

            }
        });
    }
}
var green_marker_icon = null;
function init_search_gmap() {
    if (GBrowserIsCompatible()) {
        $("#search_map_canvas").height($(window).height()-140);
        $(window).resize(function(){$("#search_map_canvas").height($(window).height()-140);});
        green_marker_icon = new GIcon();
        green_marker_icon.image = "/static/images/marker_34_green.png";
        green_marker_icon.shadow = "/static/images/shadow50.png";
        green_marker_icon.shadowSize = new GSize(37, 34);
        green_marker_icon.iconAnchor = new GPoint(6, 34);
        green_marker_icon.infoWindowAnchor = new GPoint(5, 1);

        var init_zoom = 6;
        if ($(window).height() > 700) {
            init_zoom = 7;
        }
        map = new GMap2(document.getElementById("search_map_canvas"));
        map.setCenter(new GLatLng(38.324420427006544, 24.14794921875), init_zoom, G_NORMAL_MAP);
        map.addControl(new GLargeMapControl());
        map.addControl(new GMapTypeControl());
        map.enableScrollWheelZoom();
        map.addControl(new google.maps.LocalSearch({searchFormHint : I18N_POSTCODE}));

        GEvent.addListener(map, "zoomend", function() {
                           $("#zoom").val(map.getZoom());
            get_properties();
        });
        GEvent.addListener(map, "dragend", function() {
            //if (map.getInfoWindow().isHidden())
                get_properties();
        });

        GEvent.addListener(map, "click", function(overlay, point) {
            if (overlay) {

            } else {
                //alert(point.lat()+','+point.lng());
            }
        });
        get_properties();
    }
}

function init_post_form() {
    if (!($("#for_rent").attr('checked'))) {
        $("#rent_field").hide();
    }
    if (!($("#for_sale").attr('checked'))) {
        $("#sale_field").hide();
    }
    $("#for_rent").click(function() {
        $("#rent_field").toggle();
    });
    $("#for_sale").click(function() {
        $("#sale_field").toggle();
    });

    $("#post_map_desc").html(I18N_POST_MAP_DESC);
    //$("#postcode").keyup(function(){
    //                     $(".gsc-input").val($("#postcode").val());
    //                     $(".gsc-search-button").click();
    //});
    $("#property_form").submit(function(){
        if (!$("#for_rent").attr('checked') && !$("#for_sale").attr('checked') && !$("#for_trade").attr('checked')) {
            if (!confirm(I18N_NO_OFFER_SELECTED)) {
                $("#offer_types").css('background', '#fdd');
                document.location = "#offer_types";
                return false;
            }
        }
        if (!$("#latitude").val()) {
            if (!confirm(I18N_NO_MAP_POSITION)) {
                $("#post_map_desc").css('background', '#fdd');
                document.location = "#post_map_desc";
                return false;
            }
        }
    });
    init_post_gmap();
}

function get_properties() {
    $.ajax({
        type: "GET",
        url: '/api/properties.json?zoom='+map.getZoom()+'&bounds='+map.getBounds(),
        data: $("#picker").formSerialize(),
        success: function(data){
            parse_markers(data);
        }
    });
}

cache=Array();
function property_info(id) {
    if (cache[id]) {
        return cache[id];
    }
    res = $.ajax({
     url: '/properties/info/'+id,
     async: false,
     dataType: 'html'
    }).responseText
    cache[id] = res;
    return res;
}
function zoom_in(lat, lng) {
    map.setCenter(new GLatLng(lat, lng));
    map.zoomIn();
}
var groups=0;
var tot=0;
function create_overlay(mdata) {
    var mtype = mdata[0];
    var point = new GLatLng(mdata[1], mdata[2]);
    var pid = 0;
    if (mtype.indexOf('h') != -1) {
        tot+=1;
        var newicon = new GIcon(green_marker_icon);
        var img_num = mtype.substr(0, mtype.indexOf('h'));
        pid = mtype.substr(mtype.indexOf('h')+1,mtype.length-mtype.indexOf('h'));
        newicon.image = '/images/properties/'+parseInt(pid/1000)+'/'+pid+'_'+img_num+'_mini.jpg';
        var marker = new GMarker(point, newicon);
    } else if (mtype.substr(0,1) == 'm') {
        var text = mdata[0].substr(1,mdata[0].length) + '+';
        tot+=parseInt(mdata[0].substr(1,mdata[0].length));
        groups+=1;
        var marker = new ELabel(point, '<a href="#" onclick="zoom_in('+mdata[1]+','+mdata[2]+')">'+text+'</a>', "property_count");
    } else {
        tot+=1;
        pid = mtype;
        var marker = new GMarker(point, green_marker_icon);
    }
    if (pid != 0) {
        GEvent.addListener(marker, "click", function() {
            var popup_html = property_info(pid);
            marker.openInfoWindowTabsHtml(
                [new GInfoWindowTab("Info", popup_html)]);
        });
    }
    return marker
}

function parse_markers(markers) {
    tot = 0;
    groups=0;
    map.clearOverlays();
    if (!(markers.length > 0)) {
        return;
    }
    mlist = markers.split('|');
    for (var i = 0; i < mlist.length; i++) {
        map.addOverlay(create_overlay(mlist[i].split(';')));
    }
    $("#count").html(tot);
    $("#groups").html(groups);

}

