// google maps stuff
var markersList = [];
var base_icon = new GIcon();
function InitIcons() {
    base_icon.image = "/images/icon_red.png";
    base_icon.shadow = "/images/icon_shadow.png";
    base_icon.iconSize = new GSize(12, 20);
    base_icon.shadowSize = new GSize(22, 20);
    base_icon.iconAnchor = new GPoint(6, 20);
    base_icon.infoWindowAnchor = new GPoint(5, 1);
}
function AdMarker(p, id, tooltip){
	this.inheritFrom=GMarker;
	this.inheritFrom(p, base_icon);
	this.mid = id;
	this.tooltip = tooltip;
}
AdMarker.prototype=new GMarker(new GLatLng(1,1));
AdMarker.prototype.gp_setSelected = function(){this.setImage('/images/icon_green.png');}
AdMarker.prototype.gp_setDefault = function(){this.setImage('/images/icon_red.png');}
AdMarker.prototype.gp_setBlue = function(){this.setImage('/images/icon_blue.png');}
function GetMarkerbyId(id) {
	for(var i=0;i<markersList.length;i++)
		if (markersList[i].mid==id) return markersList[i];
}
GMap2.prototype.gp_AddMarker = function(lat, lng, id, tooltip) {
    var m = new AdMarker(new GLatLng(lat, lng), id, tooltip);
    markersList.push(m);
    this.addOverlay(m);
    GEvent.addListener(m, "click", function() { m.openInfoWindowHtml(tooltip); });
}
GMap2.prototype.gp_RemoveAllMarker = function() {
    markersList.clear();
    this.clearOverlays();
}
GMap2.prototype.gp_LoadMarkers = function(){}
GMap2.prototype.gp_SetZoomDetailed = function(){gp_StopListen();map.setZoom(16);gp_StartListen();}
GMap2.prototype.gp_SetZoomOverview = function(){gp_StopListen();map.setZoom(12);gp_StartListen();}
function gp_ZoomControl() {}
gp_ZoomControl.prototype = new GControl();
gp_ZoomControl.prototype.initialize = function(map) {
    var c = document.createElement("div");
    var d=document.createElement("img");
    d.src='/images/zoomin.gif';
    d.className='gpZoomIn';
    d.title='Ближе';
    c.appendChild(d);
    GEvent.addDomListener(d,"click", function(){if (map.getZoom()<map.gp_zoomLimit[1]){map.zoomIn();}});
    var e=document.createElement("img");
    e.src='/images/zoomout.gif';
    e.className='gpZoomOut';
    e.title='Дальше';
    c.appendChild(e);
    GEvent.addDomListener(e,"click", function(){if(map.getZoom()>map.gp_zoomLimit[0]){map.zoomOut();}});
    map.getContainer().appendChild(c);
    return c;
}
gp_ZoomControl.prototype.getDefaultPosition = function(){return new GControlPosition(G_ANCHOR_TOP_LEFT,new GSize(7,7));}
var map;
function gp_Init() {
    if (!map) {
        if (!GBrowserIsCompatible()) return false;
        map = new GMap2($('map'));
        InitIcons();
        map.gp_zoomLimit = [9, 18];
        map.setCenter(new GLatLng(59.9385257507382, 30.3160429000854), 10);
        map.setMapType(G_NORMAL_MAP);
        map.addControl(new gp_ZoomControl());
        map.addControl(new GMapTypeControl());
        map.gp_LoadMarkers();
        gp_StartListen();
    }
}
function gp_StartListen(){
    GEvent.addListener(map, "dragend", function() {main_Search(1, true);});
    GEvent.addListener(map, "zoomend", function() {main_Search(1, true);});
}
function gp_StopListen(){
    GEvent.clearListeners(map, "dragend");
    GEvent.clearListeners(map, "zoomend");
}

// application stuff
function main_Search(page, bounds,categor) {
    if (!map) gp_Init();
    show_loading();
    $("photos").innerHTML = "";
    var p=Form.serialize($('searchform'))+'&page='+page
    p+=serialize_bounds();
    if (bounds) p+='&bounds=1';
    else p+='&bounds=0';
    p+='&category='+categor;
    new Ajax.Updater('content', '/main/search', {asynchronous:true, evalScripts:true, parameters:p});
}

function main_Backtolist(categor) {
    if (!map) gp_Init();
    map.gp_SetZoomOverview();
    change_mode(categor);
}

function main_Showall() {
    if (!map) gp_Init();
    map.gp_SetZoomOverview();
    $('searchform').reset();
    $('searchform').partner_id.value='';
    main_Search(1, false);
}

function main_ShowDetails(sid) {
    if (!map) gp_Init();
    map.gp_SetZoomDetailed();
    new Ajax.Updater('content', '/main/showdetails', {asynchronous:true, evalScripts:true, parameters:'id='+sid+serialize_bounds()});
}

function main_SendMessage(f) {
    if (check_sendmessage(f)) {
        var p = Form.serialize(f);
        f.innerHTML = '<img src="/images/loader.gif"> Отправка сообщения...';
        new Ajax.Updater('sendmessage', '/main/sendmessage', {asynchronous:true, evalScripts:true, parameters:p});
    }
}

function select_ad(d) {
    var sid = d.match(new RegExp("\\d+"));
    var s = $(d);
    if (s.className=='ad') {
        $('content').getElementsByClassName('ad_selected').each(function(s, index) {s.className = 'ad'; });
        s.className = 'ad_selected';
        for(var i=0;i<markersList.length;i++) markersList[i].gp_setDefault();
        var m = GetMarkerbyId(sid);
        m.gp_setSelected();

        var p=m.getPoint();
        if (!map.getBounds().contains(p)) {
            map.panTo(p);
        }
    } else {
        show_loading();
        main_ShowDetails(sid);
    }
}

function serialize_bounds() {
    var b=map.getBounds();
    var sw=b.getSouthWest();
    var ne=b.getNorthEast();
    return '&sw_lat='+sw.lat()+'&sw_lng='+sw.lng()+'&ne_lat='+ne.lat()+'&ne_lng='+ne.lng();
}

function show_loading() {
    $('content').innerHTML = '<div id="loader"><img src="/images/loader.gif"> Загрузка...</div>';
}

function set_fav(i,id) {
    state = i.getAttribute("sel");
    if (state=="1") {
        i.setAttribute("sel", "0")
        i.src = "/images/fav.gif";
        del_favorites(id);
    } else if (state=="0") {
        i.setAttribute("sel", "1")
        i.src = "/images/fav-sel.gif";
        add_favorites(id);
    }
}

function add_favorites(id) {
    var s=get_cookie("fav");
    var a=s.split(';');
    for (i in a) if (a[i]==id) return;
    s+=(s=="")?id:';'+id;
    set_cookie("fav", s, 30);
}

function del_favorites(id) {
    var s=get_cookie("fav");
    var a=s.split(';');
    for (i in a) if (a[i]==id) a.splice(i,1);
    s = a.join(";");
    set_cookie("fav", s, 30);
}

function set_cookie(name, value, ex) {
    var d=new Date();
    d.setDate(d.getDate()+ex);
    document.cookie=name+"="+escape(value)+((ex==null)?"":";expires="+d.toGMTString())+";path=/";
}

function get_cookie(name) {
    if (document.cookie.length>0) {
        cstart=document.cookie.indexOf(name+"=");
        if(cstart!=-1) {
            cstart=cstart+name.length+1;
            cend=document.cookie.indexOf(";",cstart);
            if (cend==-1) cend=document.cookie.length;
                return unescape(document.cookie.substring(cstart,cend))
        }
    }
    return "";
}

function change_mode(mode) {
  new Ajax.Updater('search', '/main/search_form', {asynchronous:true, evalScripts:true, parameters:'mode='+mode}); 
  main_Search(1, false, mode)
}

Event.observe(window, 'load', function(){gp_Init();});
Event.observe(window, 'unload', function(){GUnload();});
