var isloadmap;
var map=null;
var mgr=null;
var point;
var zoom;
var gmgr;
var pointStart = null;
var pointEnd = null;
var isClick = false;
var polyShape;
// флаг показа окна - чтобы не подгружать щиты, елси карта сдвинулась окном
var isWindowOpen = false;
// флаг подгруза щитов после закрытия окна
var doLoadOnClose = false;
var polyLineColor = "#3355ff";
var polyFillColor = "#335599";
var polyPoints = new Array();
var markers = new Array();
var sideMarker = new Array();
var sideMarkerIcon  = new Array();
var sideMarkerInfo = new Array();
var m = new Array();
var g = new Array();
var loadIcon;
var loadMarker;
var ajax_params = new Object;
var isClickGroup = false;
var tp = 'bb';

/* Google/Yandex */
function getGMap(a,g,h,f){var e,j,c=55.751849391735284,d=37.618560791015625,k=10;if(null==map&&(e!=document.getElementById(a))){map=new GMap2(document.getElementById(a));map.addControl(new GLargeMapControl());map.addControl(new GHierarchicalMapTypeControl());map.addControl(new GScaleControl());map.disableGoogleBar();map.disableScrollWheelZoom();map.enableContinuousZoom();for(var b=0;b<G_DEFAULT_MAP_TYPES.length;b++){map.removeMapType(G_DEFAULT_MAP_TYPES[b])}map.addMapType(G_NORMAL_MAP);map.removeMapType(G_HYBRID_MAP);g=(isNaN(parseFloat(g))?c:parseFloat(g));h=(isNaN(parseFloat(h))?d:parseFloat(h));f=(isNaN(parseInt(f))?k:parseInt(f));map.setCenter(new GLatLng(g,h),f);map.enableDragging();map.clearOverlays()}return map}function getGYMap(b,c,f,d){return getGMap(b,c,f,d);if(null!=map){addGLayer(map);addYLayer(map);var e=map.getMapTypes();for(var a in e){if("Yandex"==e[a].getName()){map.setMapType(e[a])}}}return map}function atanh(a){return 0.5*Math.log((1+a)/(1-a))}function CustomfromLatLngToPixel(f,e){var b=256*Math.pow(2,e);var d=0.0818197;var g=Math.sin(f.latRadians());var i=(b/(2*Math.PI));var a=Math.floor(b/2+f.lng()*(b/360));var h=Math.floor(b/2-i*(atanh(g)-d*atanh(d*g)));return new GPoint(a,h)}function CustomfromPixelToLatLng(b,i){var d=256*Math.pow(2,i);var a=((b.x)-d/2)/(d/360);var g=((b.y)-d/2)/-(d/(2*Math.PI));g=Math.abs((2*Math.atan(Math.exp(g))-Math.PI/2)*180/Math.PI);var e=g/(180/Math.PI);var h=e+1;var c=0.0818197;var f=-Math.abs(((b.y)-d/2));while(Math.abs(h-e)>1e-7){h=e;e=Math.asin(1-((1+Math.sin(h))*Math.pow(1-c*Math.sin(h),c))/(Math.exp((2*f)/-(d/(2*Math.PI)))*Math.pow(1+c*Math.sin(h),c)))}if(b.y>d/2){g=-e*180/Math.PI}else{g=e*180/Math.PI}return new GLatLng(g,a,false)}function CustomGetTileUrl(d,c){return"http://vec0"+((d.x+d.y)%5)+".maps.yandex.net/tiles?l=map&v=2.4.2&x="+d.x+"&y="+d.y+"&z="+c+".png"}function addGLayer(c){var b={minResolution:0,maxResolution:(G_NORMAL_MAP.getMaximumResolution()-1)};var a=new GMapType(G_NORMAL_MAP.getTileLayers(),G_NORMAL_MAP.getProjection(),"Google",b);c.addMapType(a);c.setCenter(c.getCenter(),c.getZoom(),a);c.removeMapType(G_NORMAL_MAP)}function addYLayer(e){var d=[new GTileLayer(null,0,(G_NORMAL_MAP.getMaximumResolution()-1))];d[0].getTileUrl=CustomGetTileUrl;var b=new GMercatorProjection((G_NORMAL_MAP.getMaximumResolution()-1));b.fromLatLngToPixel=CustomfromLatLngToPixel;b.fromPixelToLatLng=CustomfromPixelToLatLng;var c={minResolution:0,maxResolution:(G_NORMAL_MAP.getMaximumResolution()-1)};var a=new GMapType(d,b,"Yandex",c);a.getTextColor=function(){return"#000000"};e.addMapType(a);e.setCenter(e.getCenter(),e.getZoom(),a)};

function loadBoardInfo(){
    var marker = this;
    var c = marker.getPoint();
    window.isWindowOpen = true;
    $.post((tp=='bb'?"/ajax/map.php":"/ajax/map-pt.php"),{x:c.lat(),y:c.lng()},function(data){ replaceContent(data,marker); },"json");
}

function loadBoardInfoPt(){
    var marker = this;
    var c = marker.getPoint();
    window.isWindowOpen = true;
    $.post(("/ajax/map-pt.php"),{x:c.lat(),y:c.lng()},function(data){
            replaceContent(data,marker);
        },"json");
}

function replaceContent(data,marker){
    marker.openInfoWindowHtml(data.html,{maxWidth: '250'});
    $(".tooltip2").tooltip({ showURL: false, left: -270, top: 15, showBody: " + ", zindex: 10000 });
} 

function getHrefParams(href) {
    if ( undefined == href ) href = window.location.href;
    if ( -1 == href.indexOf("?")) return {};
    var sq = href.substr(href.indexOf("?") + 1);
    var x = sq.replace(/;/g, '&').split('&'), i, name, t;
    for (q={}, i=0; i < x.length; i++) {
        t = x[i].split('=', 2);
        name = unescape(t[0]);
       if ( t[1] ) {
            if (! q[name]) q[name] = [];
            if (t.length > 1) q[name][q[name].length] = unescape(encodeURIComponent(t[1]));
            else q[name][q[name].length] = true;
        }
    }
    point = map.getCenter();
    q['lat']=point.lat();
    q['lng']=point.lng();
    return q;
}

function loadBillboards(c, type){
    if ( typeof(type) == 'undefined') { type = 'bb'; }
    tp = type;
    if(window.isWindowOpen==true) { doLoadOnClose = true; return true; }
    doLoadOnClose = false;
    loadIcon = new GIcon();
    loadIcon.image = "/ru/images/public/map-loader.gif";
    loadIcon.iconSize = new  GSize(66, 66);
    loadIcon.dragCrossSize = new  GSize(0, 0);
    loadIcon.shadowSize = new  GSize(12, 12);
    loadIcon.iconAnchor = new  GPoint(33, 33);
    loadIcon.infoWindowAnchor= new  GPoint(6, 6);
    lmarkerOptions = { icon:loadIcon };
    if(mgr != null) mgr.clearMarkers();

    if ( map.getZoom() > 12 ) {
        var params = getHrefParams();
        var pt = map.getCenter();
        loadMarker = new GMarker(pt, lmarkerOptions);
        map.addOverlay(loadMarker);
        $.post(( type=='bb' ? "/ajax/billboards.php" : "/ajax/peret.php" ), params,
            function(data) {
                addMarkers(data);
                map.removeOverlay(loadMarker);
            },
        "json");
    }
}

function showCoords(c){
    //map.setCenter(bounds.getCenter());
    //map.setZoom(map.getBoundsZoomLevel(bounds));
    isClickGroup=true;
    map.setCenter(c,13);
}

function loadMapSearch() {
    if(map == null && isloadmap){
    $("div.map-loaded").show();
        var script = document.createElement("script");
        script.src = "http://www.google.com/jsapi?key=ABQIAAAA7Rn9taVn4nr2mfVUxLpD4hQ3ShrPD4Oen9NYtPwV6-W5vLbi1RTW20z_n0DvV1JIVMGKR6wfSndyCw&callback=loadMaps";
        script.type = "text/javascript";
        document.getElementsByTagName("head")[0].appendChild(script);
    }
}   

function addIcon(icon) { // Add icon attributes
    icon.iconSize = new  GSize(11, 11);
    icon.dragCrossSize = new  GSize(0, 0);
    icon.shadowSize = new  GSize(11, 11);
    icon.iconAnchor = new  GPoint(5, 5);
} // function addIcon(icon)

function leftClick(overlay,point){
    if(overlay != null) return;
    //alert('click: '+point.lat()+' '+point.lng());
    if(point && markers.length<2) {
         $("#edit-clearpoly").removeAttr("disabled");
         $('#edit-clearpoly').removeClass('bt-hidden');
        var square = new  GIcon();
        square.image = "/ru/images/square.png";
        addIcon(square);
        var marker =new  GMarker(point, {icon:square, draggable:true, bouncy:false, dragCrossMove:true});
        markers.push(marker);
        map.addOverlay(marker);
        GEvent.addListener(marker, "drag", function() {drawPoly();});
    }else if(point && markers.length==2){
        clearPoly();
        leftClick(overlay,point);
    }
    if(markers.length == 2){
        drawPoly();
    }else{
        //clearPoly();
    }

} //-- function leftClick(overlay, point)

function clearPoly() {
    if(polyShape) map.removeOverlay(polyShape);
    polyPoints.length = 0;

    if(markers.length==2) {
        map.removeOverlay(markers[0]);
        map.removeOverlay(markers[1]);
        markers.pop();
        markers.pop();
        markers.length=0;
    }
    else if(markers.length==1) {
        map.removeOverlay(markers[0]);
        markers.pop();
        markers.length=0;
    }

    document.getElementById('edit-lat0').value = 0;
    document.getElementById('edit-lat1').value = 0;
    document.getElementById('edit-lat2').value = 0;
    document.getElementById('edit-lat3').value = 0;
    document.getElementById('edit-lng0').value = 0;
    document.getElementById('edit-lng1').value = 0;
    document.getElementById('edit-lng2').value = 0;
    document.getElementById('edit-lng3').value = 0;

    $("#edit-zoomreg").attr("disabled","disabled");
    $("#edit-clearpoly").attr("disabled","disabled");
    $("#edit-submit-map").attr("disabled","disabled");
    $(".subformbtn").attr("disabled","disabled");
    $("#edit-basket").attr("disabled","disabled");


    $('#edit-clearpoly').addClass('bt-hidden');
    $('#edit-zoomreg').addClass('bt-hidden');
    $('#edit-basket').addClass('bt-hidden');

    //  setMarkers();
}

function clearPolyAll() {
    clearPoly();
    map.clearOverlays();
    markers.length = 0;
}

function initPoly() {
    if( 0 != 0 ) {
        clearPolyAll();
        var pp0 = new  GLatLng(0,0);
        var pp1 = new  GLatLng(0,0);
        var square = new  GIcon();
        square.image = "/ru/images/square.png";
        addIcon(square);
        var marker0 =new  GMarker(pp0, {icon:square, draggable:true, bouncy:false, dragCrossMove:true});
        markers.push(marker0);
        map.addOverlay(marker0);
        var marker1 =new  GMarker(pp1, {icon:square, draggable:true, bouncy:false, dragCrossMove:true});
        markers.push(marker1);
        map.addOverlay(marker1);
        drawPoly();
        GEvent.addListener(marker0, "drag", function() {
            drawPoly();
        });
        GEvent.addListener(marker1, "drag", function() {
            drawPoly();
        });

    }
}

function drawPoly()
{
     if(polyShape) map.removeOverlay(polyShape);

     polyPoints.length = 0;
     var p1 = markers[0].getLatLng();
     var pp0 =  new  GLatLng(p1.lat(),p1.lng());

     if(markers.length==2){
         var p2 = markers[1].getLatLng();
         var pp1 =  new  GLatLng(p2.lat(),p1.lng());
         var pp2 =  new  GLatLng(p2.lat(),p2.lng());
         var pp3 =  new  GLatLng(p1.lat(),p2.lng());

         polyPoints.push(pp0);
         polyPoints.push(pp1);
         polyPoints.push(pp2);
         polyPoints.push(pp3);
         polyPoints.push(pp0);
         document.getElementById('edit-lat1').value = pp1.lat();
         document.getElementById('edit-lng1').value = pp1.lng();
         document.getElementById('edit-lat2').value = pp2.lat();
         document.getElementById('edit-lat0').value = pp0.lat();
         document.getElementById('edit-lat3').value = pp3.lat();
         document.getElementById('edit-lng0').value = pp0.lng();
         document.getElementById('edit-lng3').value = pp3.lng();
         document.getElementById('edit-lng2').value = pp2.lng();

         $("#edit-zoomreg").removeAttr("disabled");
         $("#edit-clearpoly").removeAttr("disabled");
         $("#edit-submit-map").removeAttr("disabled");
         $(".subformbtn").removeAttr("disabled");
         $("#edit-basket").removeAttr("disabled");
         $('#edit-clearpoly').removeClass('bt-hidden');
         $('#edit-zoomreg').removeClass('bt-hidden');
         $('#edit-basket').removeClass('bt-hidden');
         polyShape = new  GPolygon(polyPoints, polyLineColor, 1, .8, polyFillColor,.3);
         var bounds = polyShape.getBounds();
         map.addOverlay(polyShape);
     }
     else if (markers.length==1){
         $("#edit-clearpoly").removeAttr("disabled");
         $('#edit-clearpoly').removeClass('bt-hidden');
     }
} //--function drawPoly()

function zoomToPoly() {
    if(polyShape && polyPoints.length > 0) {
        var bounds = polyShape.getBounds();
        // x левого нижнего

        map.setCenter(bounds.getCenter());
        map.setZoom(map.getBoundsZoomLevel(bounds));
        zoom = map.getZoom();
        document.getElementById('edit-mapzoom').value = zoom;
        point = map.getCenter();
        document.getElementById('edit-lat').value = point.lat();
        document.getElementById('edit-lng').value = point.lng();
    }
}

function addIconMarker(icon) { // Add icon attributes
    icon.shadow ='';
    icon.iconAnchor = new  GPoint(20, 20);
    icon.iconSize = new  GSize(40, 40);
    icon.dragCrossSize = new  GSize(0, 0);
    icon.shadowSize = new  GSize(0, 0);
    icon.infoWindowAnchor= new  GPoint(8, 8);


} // function addIcon(icon)

function addIconMiniMarker(icon) { // Add icon attributes
    icon.iconSize = new  GSize(12, 12);
    icon.dragCrossSize = new  GSize(0, 0);
    icon.shadowSize = new  GSize(12, 12);
    icon.iconAnchor = new  GPoint(6, 6);
    icon.infoWindowAnchor= new  GPoint(6, 6);
} // function addIcon(icon)

/**
* Добавляет маркеры на карту.
*/
function addMarkers(data)
{
if ( ! data) return;
if (mgr == null && map != null) {
    mgr = new MarkerManager(map);
}

saved_m = data;
var mms = new Array();
var sa = document.getElementById('show_all')?document.getElementById('show_all').checked:true;

for(marker=0;data[marker];marker++)
{
    var m = data[marker];
    m.type = isNaN(parseInt(m.type)) ? 1 : parseInt(m.type);

    // Если не установлен чекбокс, то пропускать занятые щиты
    if (m.mtype==2 || sa || (sa && m.mtype==1))
    {
        var i = new GIcon();
        addIconMiniMarker(i);
        i.image = (tp == 'bb') ?
            i.image = "/ru/images/xmarker"+m.mtype+".png" :
            i.image = "/ru/images/ymarker"+m.mtype+".png";

        var bb = m.bb;
        html = '<img src="/ru/images/public/ajax-load.gif" id="info_'+bb+'">';
        var gm = new GMarker(new GLatLng(m.x,m.y), {icon:i , draggable:false, bouncy:false, dragCrossMove:false});
        gm.bindInfoWindowHtml(html,{maxWidth: '300'});
        GEvent.addListener(gm,"click",loadBoardInfo);
        mms.push(gm);
    }
}
mgr.addMarkers(mms, 13);
mgr.refresh();
}     

function ShowAllMarkers() {
    mgr.clearMarkers();
    addMarkers(saved_m);
}
