﻿

function ELabel(point, html, classname, pixelOffset, percentOpacity, overlap) {
    // Mandatory parameters
    this.point = point;
    this.html = html;

    // Optional parameters
    this.classname = classname || "";
    this.pixelOffset = pixelOffset || new GSize(0, 0);
    if (percentOpacity) {
        if (percentOpacity < 0) { percentOpacity = 0; }
        if (percentOpacity > 100) { percentOpacity = 100; }
    }
    this.percentOpacity = percentOpacity;
    this.overlap = overlap || false;
    this.hidden = false;
}

ELabel.prototype = new GOverlay();
ELabel.prototype.initialize = function(map) {
    var div = document.createElement("div");
    div.style.position = "absolute";
    div.innerHTML = '<div class="' + this.classname + '">' + this.html + '</div>';
    map.getPane(G_MAP_FLOAT_SHADOW_PANE).appendChild(div);
    this.map_ = map;
    this.div_ = div;
    if (this.percentOpacity) {
        if (typeof (div.style.filter) == 'string') { div.style.filter = 'alpha(opacity:' + this.percentOpacity + ')'; }
        if (typeof (div.style.KHTMLOpacity) == 'string') { div.style.KHTMLOpacity = this.percentOpacity / 100; }
        if (typeof (div.style.MozOpacity) == 'string') { div.style.MozOpacity = this.percentOpacity / 100; }
        if (typeof (div.style.opacity) == 'string') { div.style.opacity = this.percentOpacity / 100; }
    }
    if (this.overlap) {
        var z = GOverlay.getZIndex(this.point.lat());
        this.div_.style.zIndex = z;
    }
    if (this.hidden) {
        this.hide();
    }
}

ELabel.prototype.remove = function() {
    this.div_.parentNode.removeChild(this.div_);
}

ELabel.prototype.copy = function() {
    return new ELabel(this.point, this.html, this.classname, this.pixelOffset, this.percentOpacity, this.overlap);
}

ELabel.prototype.redraw = function(force) {
    var p = this.map_.fromLatLngToDivPixel(this.point);
    var h = parseInt(this.div_.clientHeight);
    this.div_.style.left = (p.x + this.pixelOffset.width) + "px";
    this.div_.style.top = (p.y + this.pixelOffset.height - h) + "px";
}

ELabel.prototype.show = function() {
    if (this.div_) {
        this.div_.style.display = "";
        this.redraw();
    }
    this.hidden = false;
}

ELabel.prototype.hide = function() {
    if (this.div_) {
        this.div_.style.display = "none";
    }
    this.hidden = true;
}

ELabel.prototype.isHidden = function() {
    return this.hidden;
}

ELabel.prototype.supportsHide = function() {
    return true;
}

ELabel.prototype.setContents = function(html) {
    this.html = html;
    this.div_.innerHTML = '<div class="' + this.classname + '">' + this.html + '</div>';
    this.redraw(true);
}

ELabel.prototype.setPoint = function(point) {
    this.point = point;
    if (this.overlap) {
        var z = GOverlay.getZIndex(this.point.lat());
        this.div_.style.zIndex = z;
    }
    this.redraw(true);
}

ELabel.prototype.setOpacity = function(percentOpacity) {
    if (percentOpacity) {
        if (percentOpacity < 0) { percentOpacity = 0; }
        if (percentOpacity > 100) { percentOpacity = 100; }
    }
    this.percentOpacity = percentOpacity;
    if (this.percentOpacity) {
        if (typeof (this.div_.style.filter) == 'string') { this.div_.style.filter = 'alpha(opacity:' + this.percentOpacity + ')'; }
        if (typeof (this.div_.style.KHTMLOpacity) == 'string') { this.div_.style.KHTMLOpacity = this.percentOpacity / 100; }
        if (typeof (this.div_.style.MozOpacity) == 'string') { this.div_.style.MozOpacity = this.percentOpacity / 100; }
        if (typeof (this.div_.style.opacity) == 'string') { this.div_.style.opacity = this.percentOpacity / 100; }
    }
}

ELabel.prototype.getPoint = function() {
    return this.point;
}
ELabel.prototype.U = function() {
    return this.point;
}
ELabel.prototype.V = function() {
    return this.point;
}
ELabel.prototype.W = function() {
    return this.point;
}
ELabel.prototype.X = function() {
    return this.point;
}
ELabel.prototype.Y = function() {
    return this.point;
}
ELabel.prototype.Z = function() {
    return this.point;
}

var DmMap = new Object();
DmMap.height = 427;
DmMap.width = 480;
DmMap.AnnArray = [];
DmMap.GoogleMap1 = undefined;
DmMap.GoogleMap2 = undefined;
DmMap.FirmMap = undefined;
DmMap.Dialog1 = undefined;
DmMap.Dialog1Open = false;
DmMap.Dialog2 = undefined;
DmMap.Dialog2Open = false;
DmMap.MaxLat = undefined;
DmMap.MaxLon = undefined;
DmMap.MinLat = undefined;
DmMap.MinLon = undefined;

DmMap.CreateDialog = function(dialogid, contentid, closefunction, width, height, title) {
    var dialog = $("#" + dialogid);
    if (dialog.length > 0)
        dialog.remove();

    var param = { css: "dialog-dmo dialog-alert-dmo",  width: width, height: height, title: title, close: closefunction, id: dialogid, contentid: contentid };
    DialogAutoMain(dialog, param);
    
    
   };


DmMap.ShowDialog = function(dialogid, width, heigh) {
    var div2 = $("#" + dialogid);
    
    div2.dialog({

            width: width,
            height: heigh,
            position: ['center', ($.browser.opera ? 150 : 'center')],
            draggable: false,
            resizable: false,
            modal: true,
            bgiframe: true
            
            
        });
        
};

DmMap.FixCoord = function(latlon) {
    var lLat = 0.0001;
    var lLon = 0.0002;
    var Lat = latlon.Lat * (1 + lLat * (Math.random() - 0.5));
    var Lon = latlon.Lon * (1 + lLon * (Math.random() - 0.5));
    return {Lat:Lat, Lon:Lon};
};


DmMap.ClctAllInf = function() {
    var mapdivs = $("[id^=forMap]");
    var n = mapdivs.length;
    var id;
    this.MaxLat = undefined;
    this.MaxLon = undefined;
    this.MinLat = undefined;
    this.MinLon = undefined;
    this.AnnArray = [];
    this.AnnArrayCount = 0;
    var LatLonArr = [];

    for (var i = 0; i < n; i++) {

        var pointexist = false;
        var firmexist = false;
        var newmappoint = false;

        id = mapdivs[i].id.substring(7);
        var param = this.FindParam(id);
        var key1 = param.Lat + "_" + param.Lon;
        var key = param.Lat + "_" + param.Lon + "_" + param.fid;
        if (LatLonArr[key1])
            pointexist = true;
        else
            LatLonArr[key1] = [];

        if (!this.AnnArray[key])
            newmappoint = true;


        if (newmappoint) {

            this.AnnArray[key] = [];
            this.AnnArray[key].count = 0;
            if (pointexist) {
                var latlon = DmMap.FixCoord({ Lat: param.Lat, Lon: param.Lon });
                param.Lat = latlon.Lat;
                param.Lon = latlon.Lon;
            }

            this.AnnArray[key].Lat = param.Lat;
            this.AnnArray[key].Lon = param.Lon;
            this.AnnArray[key].fid = param.fid;
            this.AnnArray[key].firm = param.firm;
            this.AnnArray[key].groupId = param.groupId;
            this.AnnArray[key].vac = [];
        }

        this.AnnArray[key].vac[this.AnnArray[key].count] = param;
        this.AnnArray[key].count++;
        this.AnnArrayCount++;
        if (!this.MaxLat || this.MaxLat < param.Lat)
            this.MaxLat = param.Lat;
        if (!this.MaxLon || this.MaxLon < param.Lon)
            this.MaxLon = param.Lon;
        if (!this.MinLat || this.MinLat > param.Lat)
            this.MinLat = param.Lat;
        if (!this.MinLon || this.MinLon > param.Lon)
            this.MinLon = param.Lon;

    }
    this.ShowAllOnMap();

};

DmMap.AddPercent = function(x, percent) {
    return x * (1 + percent / 100);
};
DmMap.CloseBigMap = function() {
    $("#_ID_Map_All").hide();
    var href = $("#_ID_Map_All_href").get()[0];
    href.innerHTML = "Показать все на карте <strong> &#9660;</strong>";
    href.onclick = function() { DmMap.ClctAllInf(); };
};

DmMap.ShowBigMap = function() {
    $("#_ID_Map_All").show();
};

DmMap.RemoveBr = function(s) {
    var div = $("<div>" + s + "</div>");
    div.find("input").remove();
    var res = div.html();
    return res;
    //return DmMap.Trim(res.replace("<br />", " ").replace("<br>", " ").replace("<br/>", " ").replace("<BR />", " ").replace("<BR>", " ").replace("<BR/>", " "))
   
};

DmMap.createMarker = function(point, number) {
    var baseIcon = new GIcon(G_DEFAULT_ICON);
    baseIcon.image = "/img/map/pinger02.png";
    markerOptions = { icon: baseIcon, title: "Нажмите для просмотра информации" };

    var marker = new GMarker(point, markerOptions);
    marker.value = number;
    GEvent.addListener(marker, "click", function() {
        var s = "<div style=\"width: " + (DmMap.width - 150) + "px;\">";

//        if (DmMap.AnnArray[number].count == 1) {
//            s += DmMap.AnnArray[number].vac[0].Vac;
//            var s1 = DmMap.RemoveBr(DmMap.AnnArray[number].vac[0].amm);
//            s += "<br />" + ((s1.length == 0) ? "не указана" : s1);
//            s += "<br />" + DmMap.AnnArray[number].vac[0].VacFull;
//        }
//        else 
        {
            s += "<table class=\"map_listvac\">";
            for (var i = 0; i < DmMap.AnnArray[number].vac.length; i++) {
                s += "<tr>"
                var s1 = DmMap.RemoveBr(DmMap.AnnArray[number].vac[i].amm)
                s += "<td class=\"r\" style=\"width:75px;\"><strong>" + ((s1.length == 0) ? "не указана" : s1) + "</strong></td><td class=\"map_list\">" + DmMap.AnnArray[number].vac[i].Vac + "</td>";
                s += "</tr>"
            }
            s += "</table>";
            s += "<br />" + DmMap.AnnArray[number].firm;
        }

        s += "</div>";
        DmMap.GoogleMap2.openInfoWindowHtml(point, s);
    });
    return marker;
};


DmMap.createLabel = function(point, i) {
    var sLabHTML = "<div class=\"map_label\" style=\"z-index: " + (1000 + i) + " \">" + (i + 1) + "</div>"
    var oLabel = new ELabel(point, sLabHTML, "maplabel");
    oLabel.pixelOffset = new GSize(-16, 0);
    oLabel.percentOpacity = 0;
    GEvent.addListener(oLabel, "click", function() {
    var s = "<div style=\"width: " + (DmMap.width - 150) + "px;\">" + DmMap.AnnArray[i].Vac + "<br />" + DmMap.AnnArray[i].VacFull + "</div>";
        DmMap.GoogleMap2.openInfoWindowHtml(point, s);
    });
    return oLabel;
};


DmMap.ShowAllOnMap = function() {
    $(window).unload(function() { DmMap.Unload(); });

    contentid = "frmmap";
    $("#" + contentid).show();
    if (this.GoogleMap2 && !this.GoogleMap1)
        GUnload();
    else
        this.GoogleMap2 = [];

    this.GoogleMap2 = new GMap2(document.getElementById(contentid));

    //this.GoogleMap2.addControl(ctrl = new GMapTypeControl());
    //this.GoogleMap2.addMapType(G_PHYSICAL_MAP);
    this.GoogleMap2.enableScrollWheelZoom();
    var n = this.AnnArrayCount;
    if (n == 0) return;
    var leftLon = this.MinLon;
    var topLat = this.MaxLat;
    var rightLon = this.MaxLon;
    var bottomLat = this.MinLat;

    var percent = (topLat - bottomLat) / bottomLat;
    topLat = this.AddPercent(topLat, percent * 10);
    bottomLat = this.AddPercent(bottomLat, percent * (-10));

    var rectBounds = new GLatLngBounds(new GLatLng(bottomLat, leftLon), new GLatLng(topLat, rightLon));
    var center = rectBounds.getCenter();
    var zoom = this.GoogleMap2.getBoundsZoomLevel(rectBounds);

    this.GoogleMap2.setCenter(center, zoom);

    for (var key in this.AnnArray) {

        var point = new GLatLng(this.AnnArray[key].Lat, this.AnnArray[key].Lon);
        var baseIcon = new GIcon(G_DEFAULT_ICON);
        if (this.AnnArray[key].groupId!='') {
            baseIcon.image = "/img/map/c_0" + this.AnnArray[key].groupId + ".png";
            baseIcon.iconSize = new GSize(29, 38);
            baseIcon.iconAnchor = new GPoint(14, 38);

        }
        else
            baseIcon.image = "/img/map/pinger02.png";

       

        markerOptions = { icon: baseIcon };
        var marker = new GMarker(point, markerOptions);
        this.GoogleMap2.addOverlay(marker);
        
        
    }

   

};

DmMap.ClctInf = function(Vid, obj, groupId) {


    this.ShowMap(this.FindParam(Vid, groupId));

};

DmMap.ShowRoute = function(Vid) {
    var hiddenDiv = $("#forMap_" + Vid);
    var address = escape(hiddenDiv.find("#adr")[0].innerHTML);
    var lat = hiddenDiv.find("#lat")[0].innerHTML;
    var lon = hiddenDiv.find("#lon")[0].innerHTML;
    window.open("/map/route.aspx?adr=" + address + "&vid=" + Vid + "&lat=" + lat + "&lon=" + lon); 

};
DmMap.FindParam = function(Vid, groupId) {

    var hiddenDiv = $("#forMap_" + Vid);
    var lat = hiddenDiv.find("#lat")[0].innerHTML;
    var lon = hiddenDiv.find("#lon")[0].innerHTML;
    var address = hiddenDiv.find("#adr")[0].innerHTML;
    var fid = hiddenDiv.find("#fid")[0].innerHTML;
    if(!groupId)
        groupId = hiddenDiv.find("#groupId")[0].innerHTML;
    var vacdiv = $("#ann_" + Vid);
    //var vacdiv1 = $("#annf_" + Vid);
    var vacdiv1 = undefined;
    var firmdiv = $("#firm_" + Vid);
    var ammdiv = $("#amm_" + Vid);
    var sTitle ="Расположение компании на карте";
    
    var params = { Lat: lat, Lon: lon, Address: address, Vac: vacdiv.html(), Vid: Vid, VacFull: vacdiv1 ? vacdiv1.html() : undefined, title: sTitle, count: 1, firm: firmdiv.html(), amm: ammdiv.html(), fid: fid, groupId: groupId };
    return params;
};


DmMap.DlgClose = function(id) {
    $("#" + id).dialog("close");
    this.Dialog1Open = false;
};

DmMap.ShowMessage = function(s) {
var dlgid = "__ID_MessageDlg";
var contentid = "__ID_MessageContent";
   
    if (this.Dialog2Open)
        this.Dialog2.dialog("close");

    if (!this.Dialog2) {

        this.CreateDialog(dlgid, contentid, "DmMap.DlgClose('" + dlgid + "')", 450, 450, "title");
        this.Dialog2 = $("#" + dlgid);
    }
    $("#" + contentid).empty();
    $("#" + contentid).append(s);

    this.Dialog2.dialog("open");
    this.Dialog2Open = true;


};

DmMap.ShowMapLatLon = function(Lat, Lon, f, zoom, title) {
var p = { Lat: Lat, Lon: Lon, Address: undefined, Vac: undefined, draggable: true, dragstopf: f, zoom: zoom, title: title };

    DmMap.ShowMap(p);
};

DmMap.ShowMap = function(p) {
    $(window).unload(function() { DmMap.Unload(); });
    if (this.Dialog1Open)
        this.Dialog1.dialog("close");

    var contentid = "__ID_cntMAP";
    //    if (!this.Dialog1) {
    var dlgid = "__ID_PoupUpDlg";

    this.CreateDialog(dlgid, contentid, "DmMap.DlgClose('" + dlgid + "')", this.width + 17, this.height, p.title);
    this.Dialog1 = $("#" + dlgid);
    $("#__ID_cntMAP").addClass("companyMAP");

    //   }
    //    else {
    //        if (p.title)
    //            this.Dialog1.find("#_dlg_title").html(p.title);
    //    }
    this.Dialog1.dialog("open");
    this.Dialog1Open = true;

    if (this.GoogleMap1 && !this.GoogleMap2) {
        GUnload();
    }
    else {
        this.GoogleMap1 = [];
    }

    var size = new GSize((this.width - 32), (this.height - 100));
    this.GoogleMap1 = new GMap2(document.getElementById(contentid), { size: size });
    this.GoogleMap1.addControl(ctrl = new GMapTypeControl());
    this.GoogleMap1.addMapType(G_PHYSICAL_MAP);
    this.GoogleMap1.enableScrollWheelZoom();

    var point = new GLatLng(p.Lat, p.Lon);
    var zoom = p.zoom;
    if (!zoom)
        zoom = 13;

    this.GoogleMap1.setCenter(point, zoom);

    var baseIcon = new GIcon(G_DEFAULT_ICON);
    if (p.groupId) {
        baseIcon.image = "/img/map/c_0" + p.groupId + ".png";
        baseIcon.iconSize = new GSize(29, 38);
        baseIcon.iconAnchor = new GPoint(14, 38);

    }
    else
        baseIcon.image = "/img/map/pinger02.png";
    var draggable = false;
    if (p.draggable)
        draggable = p.draggable;

    markerOptions = { icon: baseIcon, draggable: draggable };
    var marker = new GMarker(point, markerOptions);
    if (draggable == true)
        GEvent.addListener(marker, "dragend", p.dragstopf);


    var w = ((this.width - 150) > 300) ? 300 : (this.width - 150);
    if (p.Vac && p.Address) {
        var s = "<div style=\"width: " + w + "px;\">" + p.Vac + "<br />" + p.Address + "</div>";
        GEvent.addListener(marker, "click", function() {
            DmMap.GoogleMap1.openInfoWindowHtml(point, s);
        });
    }

    this.GoogleMap1.addOverlay(marker);
    if (p.Vac && p.Address) {
        this.GoogleMap1.openInfoWindowHtml(point,
                  s);
    }
    this.GoogleMap1.addControl(ctrl = new ExtLargeMapControl());

};

DmMap.Unload = function() {
    try { GUnload(); }
    catch (e) { };

};

DmMap.ShowFirmMap = function(p) {
$(window).unload(function() { DmMap.Unload(); });

    contentid = "frmmap";
    $("#frmmapcont").show();

    //var size = new GSize(250, 250);
    this.FirmMap = new GMap2(document.getElementById(contentid));
    this.FirmMap.enableScrollWheelZoom();
    var point = new GLatLng(p.Lat, p.Lon);
    var zoom = p.zoom;
    if (!zoom)
        zoom = 13;

    this.FirmMap.setCenter(point, zoom);
    var baseIcon = new GIcon(G_DEFAULT_ICON);
    if (p.groupId) {
        baseIcon.image = "/img/map/c_0" + p.groupId + ".png";
        baseIcon.iconSize = new GSize(29, 38);
        baseIcon.iconAnchor = new GPoint(14, 38);

    }
    else
        baseIcon.image = "/img/map/pinger02.png";
    
    markerOptions = { icon: baseIcon };
    var marker = new GMarker(point, markerOptions);
    this.FirmMap.addOverlay(marker);
   // this.FirmMap.addControl(ctrl = new ExtLargeMapControl());

};

DmMap.Trim = function(stringToTrim) {
    return stringToTrim.replace(/^\s+|\s+$/g, "");
};
