﻿var msgAutohideTimeout;
var addressSearchPanelContent = null;

function getPointInfo(point, pId) {
    if (point != undefined) {
        getNoteForm(point, '');		
    }
}

function doGetPointInfo(point, url, callback) {
    var data = {};
    data.url = url;
    data.lat = point.y;
    data.lng = point.x;
    
    hideMapMessage();
    $('#mapLoaderImg').show();	
    request(data, callback, failure, 'POST');
}
function onGetInfoPoint(data) {
    $('#mapLoaderImg').hide();
    if (data.error != undefined && data.message) {
        //showMapMessage(data.message)
        return;
    }
	
    hideMapMessage();
    var map = _maps['basicMap'];
    var pt = new GLatLng(data.point.lat, data.point.lng);
    map.openInfoWindowHtml(pt, data.infoHtml, {
        noCloseOnClick:true,
        onCloseFn:function() {
            mapState.infoWindowHtmlOpened = false;
        }
    });
}

function createNoteMarker(point) {
    markerOptions = {
        icon:_customIcons["activeNoteMarker"], 
        draggable:true
    };
    var marker = new GMarker(point, markerOptions);
    GEvent.addListener(marker, "dragstart", function() {});
    GEvent.addListener(marker, "dragend", function() {
        updateMarkers(_maps['basicMap']);
    });
    return marker;
}

function searchAddress(address) {
    var map = _maps['basicMap'];	
    geocoder = new GClientGeocoder();
    geocoder.getLatLng(
        address = country + ' ' + city + ' ' + address,
        function(point) {
            if (!point) { //NOT FOUND
                alert('Адрес не найден. Попробуйте переписать адрес в формате. Украина, Киев, улица Кадиевская дом 8');
            } else {		
                map.panTo(point);		    	  
                map.openInfoWindowHtml(point, '<div style="padding-top: 8px;">' + address + '<br><br><a href="#" onclick="$(\'#roadTo\').val(\''+ address + '\'); showRoadPanel(); return false;">Проложить сюда маршрут.</a></div>', {
                    noCloseOnClick:true,
                    onCloseFn:function() {
                        mapState.infoWindowHtmlOpened = false;
                    }
                });
            }
        }
        );
}


function CustomTiles(baseUrl, ext, levels){
    function CustomGetTileUrl(tile,zoom) {
        return baseUrl + '/' + zoom + '/' + tile.x + '_' + tile.y + '.' + ext;
    };
    return CustomGetTileUrl;
}


// zoom markers limitations
function hasZoomLimitations(markersType) {
    var minZoom = mapState[markersType + 'MarkersMinZoom'];
    if (minZoom != undefined)
        return _maps['basicMap'].getZoom() < minZoom;
    return false;
}

function ieBugfix() {
    //if (parseInt($.browser.version) == 7 && $.browser.msie && !ieBugFixed) {
    if ($.browser.msie && !ieBugFixed) {
        var map = _maps['basicMap'];
        var mType = map.getCurrentMapType();
	    
        if (G_SATELLITE_MAP.getName() == mType.getName()) {
            map.setMapType(G_NORMAL_MAP);
            map.setMapType(G_SATELLITE_MAP);
	    
        } else {
            map.setMapType(G_SATELLITE_MAP);
            map.setMapType(G_NORMAL_MAP);
        }
        ieBugFixed = true;
    }
}

function changeMapZoom(delta) {
    var map = _maps['basicMap'];
    var currentZoom = map.getZoom();
    var mType = map.getCurrentMapType();
    
    if (delta > 0 && currentZoom == 19 && mType.getName() == G_SATELLITE_MAP.getName()) return;
    else if (delta > 0 && currentZoom == 17 && mType.getName() != G_SATELLITE_MAP.getName()) return;
    map.setZoom(currentZoom + delta);
    return false;
}

function searchCityCenter(city) {
    var map = _maps['basicMap'];
    geocoder = new GClientGeocoder();
    geocoder.getLatLng(
        city,
        function(point) {
            if (!point) { //NOT FOUND
                alert('Город не найден на картах. Попробуйте выбрать соседний к Вам город.');
            } else {	
                map.panTo(point);  			    		
            }			      
        }				
        );				  
}
function showTree() {	
    if (mapState.requeststatus) return;		
    if ($('#firstpane').css('display') == 'none')
    {		
        mapState.enablePOIMarkers = true;
        removeTotalMarkers();
        doUpdateMarkers();
        $('#company_list_search').fadeOut('fast');
        $('#addressDiv').fadeOut('fast');
        $('#menu_advertisingplane').fadeOut('fast');
        $('#firstpane').fadeIn('fast');
        mapState.enableWiFiMarkers = false;
        mapState.enableCompanyTreeMarkers = true;
        togleButton('treeButton');
        removePoiWiFiMarkers(); 
        removeAllPoiMarkers();
        setupDefaultListeners();
        return;
    }
    if ($('#firstpane').css('display') == 'block')
    {
        $('#firstpane').fadeOut('fast');
        mapState.enablePOIMarkers = false;
        togleButton('treeButton');
        return;
    }			  
}
function showSearchCompany() {
    if (mapState.requeststatus) return;
    if ($('#company_list_search').css('display') == 'none')
    {
        removeTotalMarkers();
        $('#firstpane').fadeOut('fast');
        $('#addressDiv').fadeOut('fast');
        $('#roadSearch').fadeOut('fast');
        $('#menu_advertisingplane').fadeOut('fast');
        $('#company_list_search').fadeIn('fast');
        mapState.enableWiFiMarkers = false;
        mapState.enableAdvertisingMarkers = false;
        mapState.enableCompanyTreeMarkers = false;
        togleButton('search_company_button');
        return;
    }
    if ($('#company_list_search').css('display') == 'block')
    {
        $('#company_list_search').fadeOut('fast');
        togleButton('search_company_button');
        return;
    }		
}
function showSearchAdress() {
    if (mapState.requeststatus) return;
    if ($('#addressDiv').css('display') == 'none')
    {
        removeTotalMarkers();
        $('#company_list_search').fadeOut('fast');
        $('#firstpane').fadeOut('fast');
        $('#roadSearch').fadeOut('fast');
        $('#menu_advertisingplane').fadeOut('fast');
        $('#addressDiv').fadeIn('fast');
        togleButton('search_adress_button');
        return;
    }
    if ($('#addressDiv').css('display') == 'block')
    {
        $('#addressDiv').fadeOut('fast');
        togleButton('search_adress_button');
        mapState.enableWiFiMarkers = false;
        mapState.enableAdvertisingMarkers = false;
        mapState.enableCompanyTreeMarkers = false;
        return;
    }
}	
function showRoadPanel() {
    if (mapState.requeststatus) return;
    if ($('#roadSearch').css('display') == 'none')
    {		
        removeTotalMarkers();
        $('#company_list_search').fadeOut('fast');
        $('#firstpane').fadeOut('fast');
        $('#addressDiv').fadeOut('fast');
        $('#menu_advertisingplane').fadeOut('fast');
        $('#roadSearch').fadeIn('fast');
        mapState.enableWiFiMarkers = false;
        mapState.enableAdvertisingMarkers = false;
        mapState.enableCompanyTreeMarkers = false;
        togleButton('roadButton');
        return;
    }
    if ($('#roadSearch').css('display') == 'block')
    {
        $('#roadSearch').fadeOut('fast');
        togleButton('roadButton');
        return;
    }
}

function showAdvertisingPlane() {
    if (mapState.requeststatus) return;
    var map = _maps['basicMap'];
    if (!mapState.enableAdvertisingMarkers)
    {
        removeTotalMarkers();
        $('#company_list_search').fadeOut('fast');
        $('#firstpane').fadeOut('fast');
        $('#addressDiv').fadeOut('fast');
        $('#roadSearch').fadeOut('fast');	 	    
        $('#menu_advertisingplane').fadeIn('fast');
        mapState.enableAdvertisingMarkers = true;
        mapState.enableWiFiMarkers = false;
        mapState.enablePOIMarkers = false;
        mapState.enableCompanyTreeMarkers = false;
        togleButton('search_advertising_button');	    
        GEvent.removeListener(mapState.pointEventListener);
        mapState.pointAdvEventListener = GEvent.addListener(map, "moveend", function() {
            updateAdvMarkers(map);
        });
        doUpdateAdvMarkers();
        return;
    }
    if (mapState.enableAdvertisingMarkers)
    {
        $('#menu_advertisingplane').fadeOut('fast');	    
        removeTotalMarkers();
        togleButton('search_advertising_button');
        setupDefaultListeners();
        mapState.enableAdvertisingMarkers = false;
        mapState.enablePOIMarkers = true;
        mapState.enableCompanyTreeMarkers = false;
        mapState.enableWiFiMarkers = true;
        return;
    }
}

function showWiFi() {
    if (mapState.requeststatus) return;
    var map = _maps['basicMap'];   
    if (!mapState.enableWiFiMarkers)
    {
        removeTotalMarkers();
        $('#company_list_search').fadeOut('fast');
        $('#firstpane').fadeOut('fast');
        $('#addressDiv').fadeOut('fast');
        $('#roadSearch').fadeOut('fast');	 	    
        $('#menu_advertisingplane').fadeOut('fast');
        mapState.enableAdvertisingMarkers = false;
        mapState.enableWiFiMarkers = true;
        mapState.enablePOIMarkers = false;
        mapState.enableCompanyTreeMarkers = false;        
        togleButton('WiFi_button');	    
        GEvent.removeListener(mapState.pointEventListener);
        mapState.pointWiFiEventListener = GEvent.addListener(map, "moveend", function() {
            updateWiFiMarkers(map);
        });
        doUpdateWiFiMarkers();
        return;
    }
    if (mapState.enableWiFiMarkers)
    {
        removeTotalMarkers();
        togleButton('WiFi_button');
        setupDefaultListeners();
        mapState.enableAdvertisingMarkers = false;
        mapState.enablePOIMarkers = false;
        mapState.enableCompanyTreeMarkers = false;
        mapState.enableWiFiMarkers = false;
        return;
    }
}

function setupDefaultListeners(){	
    var map = _maps['basicMap'];	
    mapState.pointEventListener = GEvent.addListener(map, "moveend", function() {
        updateMarkers(map);
    });
    if (mapState.pointAdvEventListener){
        GEvent.removeListener(mapState.pointAdvEventListener);
    }
}
function removeTotalMarkers(){
    removeAllAdvPoiMarkers();
    removeAllPoiMarkers();
    removeAdvSearchPoiByNumber();
    removePoiWiFiMarkers();
//deselectedAllAdvCategories();
//deselectedAllCategories();	
}
function upperButton(){
    $('#map_button a').css('background-position','0px 0px');
}
function togleButton(id){	       
    if (($('#'+id).css('background-position') == '0px -29px') || ($('#'+id).css('background-position') == '0px -28px') || ($('#'+id).css('background-position') == '0px 0px') || ($('#'+id).css('background-position') == '0% 0%'))
    {   
        upperButton(); 
        $('#'+id).css('background-position','0px -58px');
    }else{
        $('#'+id).css('background-position','0px 0px');
    }	    
}
function onShowSearchResult(data){	
    $('#list_search').html(data.html);
    $('#mapLoaderImg').hide();
}
function onShowAdvSearchResult(data){	
    $('#adv_company').html(data.html);
    $('#mapLoaderImg').hide();
}
