
var map;
var mm;
var bMapLoaded = false;
var aMarkery = [];
var aMarkeryA = [];
var aMarkeryB = [];
var aMarkeryC = [];
var aMarkeryD = [];
var markeryZoomLevels = [];
var oAllowedBounds;
var oMoveListener;

markeryZoomLevels['a'] = [];
markeryZoomLevels['b'] = [];
markeryZoomLevels['c'] = [];
markeryZoomLevels['d'] = [];


markeryZoomLevels['a']['min'] = 7;
markeryZoomLevels['b']['min'] = 15;
markeryZoomLevels['c']['min'] = 16;
markeryZoomLevels['d']['min'] = 17;

//{a: {min: 9}, b: {min: 15}, c: {min: 16}, d: {min: 17}};
var aOnClickHandles = [];
var oMapCenter;


function dodajMarker(ido, x, y, lang, klasa, order, title) {
    marker = new GMarker(new GLatLng(x, y), {zIndexProcess:calculateZIndex, title: title});
    marker.order = order;
    aOnClickHandles[ido] = GEvent.addListener(marker, "click", function(){
        wyswietlDymek(marker, ido, lang);
    });
    switch(klasa) {
        case 'a':
            marker.klasa = 'a';
            aMarkeryA.push(marker);
            break;
        case 'b':
            if(marker.getPoint().distanceFrom(oMapCenter) > 3000) {
                marker.klasa = 'a';
                aMarkeryA.push(marker);
//                debugOdleglosci.push({'id': ido, 'odleglosc': marker.getPoint().distanceFrom(oMapCenter)})
            }else 
            {
                marker.klasa = 'b';
                aMarkeryB.push(marker);
            }
            break;
        case 'c':
            if(marker.getPoint().distanceFrom(oMapCenter) > 4000) {
                marker.klasa = 'a';
                aMarkeryA.push(marker);
//                debugOdleglosci.push({'id': ido, 'odleglosc': marker.getPoint().distanceFrom(oMapCenter)})
            }else 
            {
                marker.klasa = 'c';
                aMarkeryC.push(marker);
            }
            break;

        case 'd':
            if(marker.getPoint().distanceFrom(oMapCenter) > 5000) {
                marker.klasa = 'a';
                aMarkeryA.push(marker);
//                debugOdleglosci.push({'id': ido, 'odleglosc': marker.getPoint().distanceFrom(oMapCenter)})
            }else 
            {
                marker.klasa = 'd';
                aMarkeryD.push(marker);
            }
            break;
            
    }
    aMarkery[ido] = marker;
}

function wyswietlDymek(marker, id, lang) {
    xajax_generujDymek(id, lang);
}

function dodajDymek(ido, htmlInfo, htmlOpis) {
    if(!aMarkery[ido]) {
        return;
    }
    try{
        GEvent.removeListener(aOnClickHandles[ido]);
    } catch(e){
        alert('błąd: GEvent.removeListener');   
    }
    try {
        aOnClickHandles[ido] = GEvent.addListener(aMarkery[ido], "click", function() {
            this.openInfoWindowTabsHtml([new GInfoWindowTab('Info', htmlInfo),
                                         new GInfoWindowTab('Opis', htmlOpis)]);
                                         
                                         
        });
    } catch(e) {
        alert('błąd: GEvent.addListener');   
    }
    
    try {
        if(map.getZoom() < markeryZoomLevels[aMarkery[ido].klasa]["min"]) {
            var eventHandle = GEvent.addListener(mm, "changed", function() {
                GEvent.trigger(aMarkery[ido], "click");
                GEvent.removeListener(eventHandle);
                
                if(objOverviewMapControl.show) {
                    objOverviewMapControl.show();
                }
                
                
            })
            map.setZoom(markeryZoomLevels[aMarkery[ido].klasa]["min"]);
        } else {
            GEvent.trigger(aMarkery[ido], "click");
        }
    } catch(e) {
        alert('błąd: GEvent.trigger');  
        throw e; 
    }
}

function calculateZIndex(marker, b) {
    if(marker.order) {
        return -marker.order;
    }
    
    return GOverlay.getZIndex(marker.getPoint().lat())
}
