function showCompanyInSearch(lat,lng,pointId,poiCatId,typePoint,icon) {	
    var map = _maps['basicMap'];		
    var point = new GLatLng(lat,lng);
    if (!point || (lat == 0.000000 || lng == 0.000000)) { //NOT FOUND
        alert('Извините, но мы не можем показать данное предприятие на карте т.к. оно не верно указало свои координаты.');
    } else {		 
        map.panTo(point);

        var mgr = initMarkersManager(map,'searchCompanyMarker');
        var companyMarker = new GIcon(); 
        companyMarker.image = icon;
        companyMarker.iconSize = new GSize(49, 49);
        if (typePoint == 'vip')
        {						
            companyMarker.shadow = skin + 'img/bg_igoogle_balloon_sm.png';
            companyMarker.iconAnchor = new GPoint(16,29);
        }else{
            companyMarker.iconSize = new GSize(24, 24); 
            companyMarker.shadow = false;
            companyMarker.iconAnchor = new GPoint(12, 24);
        }			
        var mapMarker =  new GMarker(point, {
            icon: companyMarker
        });
        mgr.addMarker(mapMarker, 5, 17);
	    	  
        getPOIInfo(point, pointId, poiCatId, typePoint,false,true);
    }
}

function doShowPointer(tree){
    if (updateTimeout !== null) {
        clearTimeout(updateTimeout);
        updateTimeout = null;
    }
    updateTimeout = setTimeout('showPointer("'+tree+'")', updateTimeoutTime);
}
function showPoi(id) {    
    mapState.requeststatus = true
    var _close = !$('#poi_cat_' + id).attr('checked');
    if (_close) {
        removePoiMarkers(id);
        mapState.requeststatus = false;
    } else {
        var tree = getSelectedCategories();
        if (tree.length > 0) 
        {    	
            mapState.enableWiFiMarkers = false;
        }
        doShowPointer(tree);
    //showPointer(tree);
    }
}

function getSelectedCategories() {
    var tree = '';
    if (mapState.selectedPoiCategories.length > 0)
    {
        $(mapState.selectedPoiCategories).each( function() { 
            tree += this + ','; 
        });
    }	
    $('#firstpane input:checkbox:checked').each( function() { 
        tree += $(this).attr('childId') != undefined ? $(this).attr('childId') + ',' : ''; 
    });    
    return tree;
}
function deselectedAllCategories() {
    var allCheckboxes = $('#firstpane input:checkbox:checked');
    allCheckboxes.removeAttr('checked');    
}

function checkboxToggle(id){
    if ($('#poi_cat_'+id).attr('checked'))
    {
        $('#poi_cat_'+id).attr('checked', false); 
    }else{
        $('#poi_cat_'+id).attr('checked', 'checked'); 
    }
}
function showPointer(tree) {
    var map = _maps['basicMap'];
    var currentZoom = map.getZoom();
    if (currentZoom == 12 && tree.length > 0) {
        alert('Что бы увидеть предприятия на карте - необходимо приблизить карту.');
    }    
    var data = onMapMoveCalculations(map);
    data.url = base + 'ajax';
    data.tree = tree;
    $('#mapLoaderImg').show();    
    request(data, onShowPoi, failure, 'GET');
}

function onShowPoi(data) {
    $('#mapLoaderImg').hide();    
    if (data.error != undefined) {
        alert(data.error);
        return false;
    }    
    removeAllPoiMarkers();    
    var xmlCompany = GXml.parse(data.markers);
    var markersCompany = xmlCompany.documentElement.getElementsByTagName("marker");
    //alert(markersCompany.length);
    var map = _maps['basicMap'];
    if (mapState.enableCompanyTreeMarkers){
        for (var i = 0; i < markersCompany.length; i++) {       	
            var poiCatId = markersCompany[i].getAttribute("tree");    	    	
            var mgrName = 'poi' + poiCatId + 'Mgr';    	
            if (mapState[mgrName] == undefined)
                mapState[mgrName] = initMarkersManager(map, 'poi' + poiCatId);
            var mgr = mapState[mgrName];
            mgr.clearMarkers();
        //removeAllPoiMarkers();
        }    
        for (var i = 0; i < markersCompany.length; i++) {            	
            createPoiMarker(markersCompany[i]);
        }    
    }   
}

function createPoiMarker(m) {   
    var poiCatId = m.getAttribute("tree");                
    var poiCatIcon = m.getAttribute("icon");
    var mgrName = 'poi' + poiCatId + 'Mgr';
    var mgr = mapState[mgrName];
    _baseIcons["company"] = _baseIcons["free"];
    var pointId = m.getAttribute("id");
    var map = _maps['basicMap'];
    var point = new GLatLng(parseFloat(m.getAttribute("lat")), parseFloat(m.getAttribute("lng")));
    var mapMarker =  new GMarker(point, {
        title: m.getAttribute("title"), 
        icon: _baseIcons["company"]
        });	
    GEvent.addListener(mapMarker, 'mouseover', function() {
        getPOIInfo(point, pointId, poiCatId, m.getAttribute("type"),m);
    });		
    GEvent.addListener(mapMarker, 'mouseout', function() {
        map.closeInfoWindow();
    });
    GEvent.addListener(mapMarker, 'click', function() {
        window.location = m.getAttribute("url");
    });
    mgr.addMarker(mapMarker, 13, 17);
//alert(mgrName);
}

function icoForMarker(m){	
	
    var companyMarker = new GIcon(); 
    companyMarker.image = m.getAttribute("icon");
    companyMarker.iconSize = new GSize(24, 24);
    companyMarker.shadow = false;
    companyMarker.iconAnchor = new GPoint(24, 24);				
    return companyMarker;
}


function getPOIInfo(point, pointId, poiCatId, type,m , rqst){
    var data = {};
    data.url = base + 'pointinfo';
    data.id = pointId;
    data.poiCatId = poiCatId;
    data.type = type;
    
    $('#mapLoaderImg').show(); 
    if(!rqst || rqst == 'undefined'){
        onGetCompanyInfo(m);
    }else{
        request(data, onGetCompanyInfoAjax, failure, 'GET');
    }

}

function onGetCompanyInfoAjax(data) {
    $('#mapLoaderImg').hide();
    if (data.error != undefined && data.message) {
        alert(data.message)
        return;
    }    
    var map = _maps['basicMap'];
    var pt = new GLatLng(data.point.lat, data.point.lng);
    map.openInfoWindowHtml(pt, data.html, {});
}


function onGetCompanyInfo(data) {
    $('#mapLoaderImg').hide();
    if (data.error != undefined && data.message) {
        alert(data.message)
        return;
    }    
    var map = _maps['basicMap'];    
    var pt = new GLatLng(data.getAttribute("lat"), data.getAttribute("lng"));
    var html = '<div style="width:300px; padding: 10px; "><div style="margin: 0pt 8px 0pt 0pt; float: left;"><center><img src="' + data.getAttribute("logo") + '"></center></div><b>' + data.getAttribute("title") + '</b><br><b>Адрес: </b> ' + data.getAttribute("address") + '<br><br>  <br><br></div>';
    map.openInfoWindowHtml(pt, html, {
        maxWidth:100
    });
}

mapState.updateMarkers = function() {
    var tree = getSelectedCategories();
    showPointer(tree);
}

function removePoiMarkers(poiCatId) {
    var mgrName = 'poi' + poiCatId + 'Mgr';
    var mgr = mapState[mgrName];
    if (mgr != undefined) mgr.clearMarkers();
}

function removeAllPoiMarkers() {
    $('#firstpane input:checkbox:checked').each( function() {
        if ($(this).attr('childId') != undefined) {
            removePoiMarkers($(this).attr('childId'));
        }
    });
}

mapState.mapChangeZoom = function() {
    var map = _maps['basicMap'];
    var currentZoom = map.getZoom();
    if (currentZoom < 13) {
        removeAllPoiMarkers();
        mapState.enablePOIMarkers = false;
        return;
    }
    mapState.enablePOIMarkers = true;
}

