var _maps = [];
var _baseIcons = [];

var updateTimeout = null;
var updateTimeoutTime = 1000;// 1 sec

var maxHeight = 988;
var minHeight = 500;
var ieBugFixed = false;


function addZoomBehaviour(map) {
    GEvent.addListener(map, 'zoomend', function() { 
        var currentZoom = map.getZoom();
        if (mapState.pointMgr) removeMarkersByType('point');
        mapState.mapChangeZoom();
    });
}

function createMapMouseInteractListenersForBasicMap(map) {
    GEvent.bind(map, "click", this, function(overlay, point) { getPointInfo(point); });
    mapState.infoWindowHtmlOpened = false;
    GEvent.bind(map, "infowindowopen", this, function() { mapState.infoWindowHtmlOpened = true; });
    GEvent.bind(map, "infowindowclose", this, function() { mapState.infoWindowHtmlOpened = false; });
    //mapState.pointEventListener = GEvent.addListener(map, "moveend", function() { updateMarkers(map); });
    setupDefaultListeners();
}
function createMapMouseInteractListenersForInfomatMap(map) {
	GEvent.addListener(map, "moveend", function() { updateMarkers(map); });
    map.disableDoubleClickZoom();
    map.disableInfoWindow();
}

function updateMarkers(map) {
    if (updateTimeout !== null) {
    	clearTimeout(updateTimeout);
    	updateTimeout = null;
    }
    updateTimeout = setTimeout('doUpdateMarkers();', updateTimeoutTime);
}
function doUpdateMarkers() {   
    if (mapState.enablePOIMarkers) {	mapState.updateMarkers(); }
}

function initMarkersManager(map, markersType) { var mgr = new MarkerManager(map, {borderPadding:10}); mapState[markersType + 'Mgr'] = mgr; return mgr; } 

function initBaseIcoMarkers() {
    if (_baseIcons["vipNoImage"] == undefined) { var marker = new GIcon(); marker.image = skin + 'img/map_point.png'; marker.iconSize = new GSize(36, 36); marker.iconAnchor = new GPoint(18, 18); marker.infoWindowAnchor = new GPoint(18, 0); _baseIcons["simpleMapMarkers"] = marker; }
    if (_baseIcons["vipGroup"] == undefined) { if (mapState.infomatMode) { var marker = new GIcon(); marker.image = skin + 'img/map_panorama_infomat.png'; marker.iconSize = new GSize(12, 27); marker.iconAnchor = new GPoint(6, 14); marker.infoWindowAnchor = new GPoint(6, 0); _baseIcons["panoramaMapMarkers"] = marker; } else { var marker = new GIcon(); marker.image = skin + 'img/map_panorama.png'; marker.iconSize = new GSize(12, 12); marker.iconAnchor = new GPoint(6, 6); marker.infoWindowAnchor = new GPoint(6, 0); _baseIcons["panoramaMapMarkers"] = marker; } }
    if (_baseIcons["free"] == undefined) { var marker = new GIcon(); marker.image = skin + 'img/standart.png'; marker.iconSize = new GSize(24, 24); marker.iconAnchor = new GPoint(10, 5); marker.infoWindowAnchor = new GPoint(0, 0); _baseIcons["free"] = marker; }
    if (_baseIcons["freeGroup"] == undefined) { var marker = new GIcon(); marker.image = skin + 'img/map_point_cool.png'; marker.iconSize = new GSize(14, 23); marker.shadow = skin + 'img/map_point_cool_shadow.png'; marker.shadowSize = new GSize(16, 25); marker.iconAnchor = new GPoint(0, -2); marker.infoWindowAnchor = new GPoint(0, 0); _baseIcons["pointMapMarkers"] = marker; }
    if (_baseIcons["WiFiBase"] == undefined) { var marker = new GIcon(); marker.image = skin + 'img/hotspot-free.png'; marker.iconSize = new GSize(24, 24); marker.iconAnchor = new GPoint(10, 5); marker.infoWindowAnchor = new GPoint(0, 0); _baseIcons["WiFiBase"] = marker; }
    if (_baseIcons["advBase"] == undefined) { var marker = new GIcon(); marker.image = "http://labs.google.com/ridefinder/images/mm_20_red.png"; marker.shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png"; marker.iconSize = new GSize(12, 20); marker.shadowSize = new GSize(22, 20); marker.iconAnchor = new GPoint(6, 20); marker.infoWindowAnchor = new GPoint(5, 1); _baseIcons["advBase"] = marker;}
    if (_baseIcons["adv4"] == undefined) { var marker = new GIcon(); marker.image = skin + 'img/adv/beg_ligth.png'; marker.iconSize = new GSize(18, 20); marker.iconAnchor = new GPoint(18, 18); marker.infoWindowAnchor = new GPoint(18, 0); _baseIcons["adv4"] = marker; }
    if (_baseIcons["adv3"] == undefined) { var marker = new GIcon(); marker.image = skin + 'img/adv/b_bord.png'; marker.iconSize = new GSize(18, 20); marker.iconAnchor = new GPoint(18, 18); marker.infoWindowAnchor = new GPoint(18, 0); _baseIcons["adv3"] = marker; }
    if (_baseIcons["adv5"] == undefined) { var marker = new GIcon(); marker.image = skin + 'img/adv/siti_l.png'; marker.iconSize = new GSize(18, 20); marker.iconAnchor = new GPoint(18, 18); marker.infoWindowAnchor = new GPoint(18, 0); _baseIcons["adv5"] = marker; }
    if (_baseIcons["adv6"] == undefined) { var marker = new GIcon(); marker.image = skin + 'img/adv/b_prizma.png'; marker.iconSize = new GSize(18, 20); marker.iconAnchor = new GPoint(18, 18); marker.infoWindowAnchor = new GPoint(18, 0); _baseIcons["adv6"] = marker; }
}

function onMapMoveCalculations(map) {
	
    var bounds = map.getBounds();
    var southWest = bounds.getSouthWest();
    var northEast = bounds.getNorthEast();
    var currentZoom = map.getZoom();    
    var data = {
    			"sw"   : southWest,
    			"ne"   : northEast,
    			"zoom" : currentZoom    			
    			};  
    return data;
}



function createSimpleNoteMarker(point) {
	var markerOptions = { icon:_baseIcons["activeNoteMarker"], draggable:false };
	var marker = new GMarker(point, markerOptions);
	GEvent.addListener(marker, 'click', function() { return false; });
	return marker;
}


function removeMarkersByType(markersType) {
    var mgr = mapState[markersType + 'Mgr'];
    if (mgr !== null) {
    	mgr.clearMarkers();
    	mapState[markersType + 'Mgr'] = null;
    }    
    mapState[markersType + 'Markers'] = [];
    mapState[markersType + 'MarkersId'] = [];
    mapState[markersType + 'MarkersInfo'] = [];
}


