jablonka.czprosek.czf

mapstats

Subversion Repositories:
[/] [mapstats.js] - Rev 10

Compare with Previous - Blame - Download


// --------------------------------------------------------
// This script made by JKLIR as. Unreal][ [http://jklir.net]
// Map engine originally from Emcee Lam [http://sjsutech.com]
// Licence: GNU/GPL | Version 4.1
// (c) 2011 All rights reserved
// --------------------------------------------------------

var mainMap;
var magnifier;

var node = new Array();
var nodecount;
var file_nodes = new Array();
var file_noping = new Array();
var file_links = new Array();
var file_infopoints = new Array();
var file_state = new Array();
var ann, m1, m2, m3, m4, m5, m6, m7, m8, m9;
var m1_a, m2_a, m3_a, m4_a, m5_a, m6_a, m7_a, m8_a, m9_a;
var cntm;
var div_paint, div_points, div_wave, div_infopoint, div_name, div_ip, div_status;
var numoflinks = 0;
var maxnumoflinks = 17;
var is_ie = false;
if(typeof(G_vmlCanvasManager)!='undefined') { is_ie = true; }
actual_links = "";
var drawing_timer;
var is_adding = true;
var visibleTilesMap = new Array();

Array.prototype.max = function() {
        var max = this[0];
        var len = this.length;
        for(var i=1; i<len; i++) if (this[i] > max) max = this[i];
        return max;
}
Array.prototype.min = function() {
        var min = this[0];
        var len = this.length;
        for(var i=1; i<len; i++) if (this[i] < min) min = this[i];
        return min;
}

function mapInit (startzoom) {
        magnifier = new Magnifier();
        mainMap = new MainMap(startzoom);

        var miniMapDiv = document.getElementById("miniMapInner");
        miniMapDiv.onmousedown = function (event) { return magnifier.startMove(event) };
        miniMapDiv.onmousemove = function (event) { return magnifier.processMove(event) };
        miniMapDiv.onmouseup = function (event) { return magnifier.stopMove(event) };
        miniMapDiv.ondragstart = function() { return false; } // for IE
}

function Magnifier () {
        var this1 = this;
        this.f_dragging = false;
        this.div = document.getElementById("magnifier");
        this.div.ondragstart = function() { return false; }  // for IE
        this.div.onmousedown = function (event) { return this1.startMove(event) };
        this.div.onmousemove = function (event) { return this1.processMove(event) };
        this.div.onmouseup = function (event) { return this1.stopMove(event) };
}

Magnifier.prototype.startMove = function (event) {
        // for IE
        if (!event) event = window.event;
  
        var magnifierDiv = document.getElementById("magnifier");
        //var magnifierDiv = this.div;
        this.dragStartLeft = event.clientX;
        this.dragStartTop  = event.clientY;
  
        this.top  = magnifierDiv.offsetTop;
        this.left = magnifierDiv.offsetLeft;
  
        this.f_dragging = true;
        return false;
}

/* As you drag the mouse in the mini map, the magnifier responds by
  moving. Likewise, the main map will show the current area
  enclosed by the magnifier. */
Magnifier.prototype.processMove = function (event) {
        var magnifierDiv = this.div;

        if (!event) event = window.event;  // for IE
        if (this.f_dragging) {

          var minX = 0;
          var maxX = magres_x  - magnifierDiv.offsetWidth;
          var minY = 0;
          var maxY = magres_y - magnifierDiv.offsetHeight;

          var shiftedLeft = this.left + (event.clientX - this.dragStartLeft);
          if (shiftedLeft < minX) shiftedLeft = minX; // map is not infinite
          if (shiftedLeft > maxX) shiftedLeft = maxX;
          magnifierDiv.style.left = shiftedLeft + "px";
  
          var shiftedTop = this.top + (event.clientY - this.dragStartTop);
          if (shiftedTop < minY) shiftedTop = minY; // map is not infinite
          if (shiftedTop > maxY) shiftedTop = maxY;
          magnifierDiv.style.top = shiftedTop + "px";

          mainMap.setViewPort();
        }
}

Magnifier.prototype.stopMove = function (event) {
        this.f_dragging = false;
        is_adding = true;
        checkLinks();
}

Magnifier.prototype.setSize = function (innerDivWidth, innerDivHeight) {
        var magnifierWidth = Math.round((magres_x * inres_x) / innerDivWidth) - 2;  // 200 * 700px
        /* We subtract 2 because the borders are 1 pixel each */
        var magnifierHeight = Math.round((magres_y * inres_y) / innerDivHeight) - 2;  // 141 * 500px
        /* We subtract 2 because the borders are 1 pixel each */
        var magnifierDiv = document.getElementById("magnifier");
        magnifierDiv.style.width  = magnifierWidth  + "px";
        magnifierDiv.style.height = magnifierHeight + "px";
          
        document.getElementById("wrapper").style.width = inres_x + document.getElementById("menuset").clientWidth + 18 + "px";
}

Magnifier.prototype.setPosition = function () {
        var innerDiv = document.getElementById("innerDiv");
        var innerDivWidth  = innerDiv.clientWidth;
        var innerDivHeight = innerDiv.clientHeight;
        var innerDivLeft   = innerDiv.offsetLeft;
        var innerDivTop    = innerDiv.offsetTop;
        this.left = Math.round(Math.abs(innerDivLeft) * magres_x / innerDivWidth);
        this.top = Math.round(Math.abs(innerDivTop) * magres_y / innerDivHeight);

        // alter magnifier
        var magnifierDiv = this.div;
        magnifierDiv.style.left = this.left + "px";
        magnifierDiv.style.top  = this.top  + "px";
}

function MainMap (zoomfirst) {
        var this1 = this;

        // view port is the visible portion of the main map
        this.viewPortWidth  = inres_x; //500
        this.viewPortHeight = inres_y; //400

        this.tileSize = 256;
        this.f_dragging = false;
        this.innerDiv = document.getElementById("innerDiv");
        this.innerDiv.style.cursor = "url('grab.cur'), default";
        this.tilesX = Math.ceil(inres_x / this.tileSize) + 1;
        this.tilesY = Math.ceil(inres_y / this.tileSize) + 1;

        var outerDiv = document.getElementById("outerDiv");
        this.outerDiv = outerDiv;
        outerDiv.style.width = inres_x + "px";
        outerDiv.style.height = inres_y + "px";
        var underMap = document.getElementById("underMap");
        underMap.style.width = (inres_x - 4) + "px";

        outerDiv.onmousedown = function(event) { return this1.startMove(event) };
        outerDiv.onmousemove = function(event) { return this1.processMove(event) };
        outerDiv.onmouseup = function(event) { return this1.stopMove(event) };
        outerDiv.ondblclick = function(event) { return this1.doubleClick() };
        outerDiv.ondragstart = function() { return false; }  // for IE

        if(zoomfirst==eq_mini) { zf = 0; }
        else if(zoomfirst==eq_medi) { zf = 1; }
        else if(zoomfirst==eq_high) { zf = 2; }
        else if(zoomfirst==eq_orig) { zf = 3; }
        else { zf = 0; }

        this.zoom = zf;
        this.zoomDim = [
           {
             width:parseInt(full_x * eq_mini),
             height:parseInt(full_y * eq_mini),
             size:1,
             nasobek:eq_mini,
             numoflinks:17
           },
           {
             width:parseInt(full_x * eq_medi),
             height:parseInt(full_y * eq_medi),
             size:2,
             nasobek:eq_medi,
             numoflinks:13
           },
           {
             width:parseInt(full_x * eq_high),
             height:parseInt(full_y * eq_high),
             size:3,
             nasobek:eq_high,
             numoflinks:11
           },
           {
             width:parseInt(full_x * eq_orig),
             height:parseInt(full_y * eq_orig),
             size:4,
             nasobek:eq_orig,
             numoflinks:8
           },
        ]

        var zoomElt = this.zoomDim[this.zoom];
        this.setInnerDivSize (zoomElt.width, zoomElt.height, zoomElt.size, (parseInt(zoomfirst*1000)/10));
        document.getElementById("zoom"+this.zoom).className = "active";

        var innerDiv = document.getElementById("innerDiv");
        innerDiv.style.left = -(start_left * start_mul) + "px";
        innerDiv.style.top = -(start_top * start_mul) + "px";

        magnifier.setPosition();
        this.checkTiles();
}

MainMap.prototype.startMove = function (event) {
        // for IE
        if (!event) event = window.event;
  
        this.dragStartLeft = event.clientX;
        this.dragStartTop  = event.clientY;
        var innerDiv = this.innerDiv;
        innerDiv.style.cursor = "url('grabbing.cur'), default";

        this.top  = innerDiv.offsetTop;
        this.left = innerDiv.offsetLeft;

        this.f_dragging = true;
        is_adding = true;
        window.clearInterval(drawing_timer);
        drawing_timer = window.setInterval(checkLinks, 1100);
        return false;
}

MainMap.prototype.processMove = function (event) {
        var zoomElt = this.zoomDim[this.zoom];
        var maxY = 0;
        var minY = -(zoomElt.height - this.viewPortHeight);
        var maxX = 0;
        var minX = -(zoomElt.width  - this.viewPortWidth);
  
        if (!event) event = window.event;  // for IE
        var innerDiv = this.innerDiv;
        if (this.f_dragging) {
          var shiftedTop = this.top + (event.clientY - this.dragStartTop);
          if (shiftedTop > maxY) shiftedTop = maxY;  // map is not infinite
          if (shiftedTop < minY) shiftedTop = minY;
          innerDiv.style.top = shiftedTop + "px";

          var shiftedLeft = this.left + (event.clientX - this.dragStartLeft);
          if (shiftedLeft > maxX) shiftedLeft = maxX; // map is not infinite
          if (shiftedLeft < minX) shiftedLeft = minX;
          innerDiv.style.left = shiftedLeft + "px";
  
          this.checkTiles();
          magnifier.setPosition();
        }

        var konst = 0;
        var nasobek = this.zoomDim[this.zoom].nasobek;
        if (is_ie) { konst = -2; }
        var outerDiv = this.outerDiv;
        var infoDiv = document.getElementById("infoDiv");
        if(this.f_dragging) {
          infoDiv.innerHTML = parseInt((Math.abs(shiftedLeft) + event.clientX - outerDiv.offsetLeft + konst)/nasobek) + " x " + parseInt((Math.abs(shiftedTop) + event.clientY - outerDiv.offsetTop + konst)/nasobek);
        } else {
          infoDiv.innerHTML = parseInt((Math.abs(parseInt(innerDiv.style.left)) + event.clientX - outerDiv.offsetLeft + konst)/nasobek) + " x " + parseInt((Math.abs(parseInt(innerDiv.style.top)) + event.clientY - outerDiv.offsetTop + konst)/nasobek);
        }
}

MainMap.prototype.checkZoom = function () {
        window.clearInterval(drawing_timer);
        var zoomElt = this.zoomDim[this.zoom];
        var maxY = 0;
        var minY = -(zoomElt.height - this.viewPortHeight);
        var maxX = 0;
        var minX = -(zoomElt.width  - this.viewPortWidth);
        var chcky = 0;
        var chckx = 0;
  
        var innerDiv = this.innerDiv;
        var shiftedTop = innerDiv.offsetTop;
        if (shiftedTop > maxY) { shiftedTop = maxY; chcky = 1; } // map is not infinite
        if (shiftedTop < minY) { shiftedTop = minY; chcky = 1; }
        if (chcky == 1) innerDiv.style.top = shiftedTop + "px";
  
        var shiftedLeft = innerDiv.offsetLeft;
        if (shiftedLeft > maxX) { shiftedLeft = maxX; chckx = 1; }// map is not infinite
        if (shiftedLeft < minX) { shiftedLeft = minX; chckx = 1; }
        if (chckx == 1) innerDiv.style.left = shiftedLeft + "px";

        magnifier.setPosition();
        document.getElementById("zoom0").className = "";
        document.getElementById("zoom1").className = "";
        document.getElementById("zoom2").className = "";
        document.getElementById("zoom3").className = "";
        document.getElementById("zoom"+this.zoom).className = "active";
}

MainMap.prototype.checkTiles = function () {
        var innerDiv = this.innerDiv;
        var tileSize = this.tileSize;
        var visibleTiles = this.getVisibleTiles();
        var i;
  
        var size = this.zoomDim[this.zoom].size;
        for(i=0;i<visibleTiles.length; i++) {
          var tile = visibleTiles[i];
          var xy = "x" + tile.x + "y" + tile.y;
          var tileName =  xy + "z" + this.zoom;
          if (!visibleTilesMap[tileName]) {
             var img = document.createElement("img");
             img.src = "size" + size + "/" + xy + ".jpg";
             img.style.position = "absolute";
             img.style.left = (tile.x * tileSize) + "px";
             img.style.top = (tile.y * tileSize) + "px";
             img.setAttribute("id", tileName);
             innerDiv.appendChild(img);
             visibleTilesMap[tileName] = true;
          }
        }

        var imgs = innerDiv.getElementsByTagName("img");
        for(i=0; i<imgs.length; i++) {
          var id = imgs[i].getAttribute("id");
          if (!visibleTilesMap[id]) {
             innerDiv.removeChild(imgs[i]);
          }
        }
}

MainMap.prototype.getVisibleTiles = function () {
        var innerDiv = this.innerDiv;
        var mapX = innerDiv.offsetLeft;
        var mapY = innerDiv.offsetTop;
        var tileSize = this.tileSize;

        var startX = Math.abs(Math.floor(mapX / tileSize)) - 1;
        if (startX < 0) startX = 0;
        var startY = Math.abs(Math.floor(mapY / tileSize)) - 1;
        if (startY < 0) startY = 0;
  
        var visibleTiles = [];
        var counter = 0;
        for (x = startX; x < (this.tilesX + startX); x++) {
          for (y = startY; y < (this.tilesY + startY); y++) {
            var tile = {};
            tile.x = x;
            tile.y = y;
            visibleTiles[counter++] = tile;
          }
        }
        return visibleTiles;
}

MainMap.prototype.stopMove = function (event) {
        window.clearInterval(drawing_timer);
        checkLinks();
        is_adding = false;
        checkLinks();
        this.innerDiv.style.cursor = "url('grab.cur'), default";
        this.f_dragging = false;
}

// movement in the magnifier moves main map's view port
MainMap.prototype.setViewPort = function () {
        var magDiv   = document.getElementById("magnifier");
        var innerDiv = this.innerDiv;
        var magLeft        = magDiv.offsetLeft;
        var magTop         = magDiv.offsetTop;
        var innerDivWidth  = innerDiv.clientWidth;
        var innerDivHeight = innerDiv.clientHeight;

        /* set innerDivLeft */
        var innerDivLeftMin = inres_x - innerDivWidth;  //500
        var innerDivLeft = Math.round((-magLeft) * innerDivWidth  / magres_x);
        if (innerDivLeft < innerDivLeftMin) innerDivLeft = innerDivLeftMin;
        innerDiv.style.left = innerDivLeft + "px";

        /* set innerDivTop */
        var innerDivTopMin = inres_y - innerDivHeight; //400
        var innerDivTop = Math.round((-magTop)  * innerDivHeight / magres_y);
        if (innerDivTop < innerDivTopMin) innerDivTop = innerDivTopMin;
        innerDiv.style.top  = innerDivTop  + "px";

        this.checkTiles();
}

MainMap.prototype.setInnerDivSize = function (width, height, size, percent) {
        var innerDiv = this.innerDiv;
        innerDiv.style.width  = width  + "px";
        innerDiv.style.height = height + "px";
        magnifier.setPosition();
        magnifier.setSize(width, height);

        var resolutionInfo = document.getElementById("resolutionInfo");
        resolutionInfo.innerHTML = percent + "%, " +  width + " x " + height + "px";
}

MainMap.prototype.setZoom = function (newZoom) {
        is_adding = true;
        if (this.zoom == newZoom) return;
        window.clearInterval(drawing_timer);
        actual_links = "";
        numoflinks = 0;
        var oldZ = this.zoomDim[this.zoom];
        var newZ = this.zoomDim[newZoom];
        var innerDiv = this.innerDiv;
        var imgs = innerDiv.getElementsByTagName("img");
        while (imgs.length > 0) {
          innerDiv.removeChild(imgs[0]);
        }
        visibleTilesMap = new Array();

        var oldLeft   = innerDiv.offsetLeft;
        var oldTop    = innerDiv.offsetTop;
        var wdth = Math.round(((magres_x * inres_x) / newZ.width) - 2);  // 200 * 700px
        var hght = Math.round(((magres_y * inres_y) / newZ.height) - 2);  // 141 * 500px
        var wdth2 = Math.round(((magres_x * inres_x) / oldZ.width) - 2);  // 200 * 700px
        var hght2 = Math.round(((magres_y * inres_y) / oldZ.height) - 2);  // 141 * 500px

        innerDiv.style.left = Math.round(Math.round(newZ.width  * oldLeft / oldZ.width) + ((wdth-wdth2)*4)) + "px";
        innerDiv.style.top = Math.round(Math.round(newZ.height * oldTop  / oldZ.height) + ((hght-hght2)*4)) + "px";
        this.zoom = newZoom;  // set the global zoom
        this.setInnerDivSize(newZ.width, newZ.height, newZ.size, (newZ.nasobek*1000)/10);
        maxnumoflinks = newZ.numoflinks;

        this.checkZoom();
        this.checkTiles();

        deleteNames();
        canvasInit(newZ.nasobek);

}

MainMap.prototype.doubleClick = function () {
        if (this.zoom == 3) return;
        this.setZoom(this.zoom + 1);
}

MainMap.prototype.addNewLinks = function (minx, maxx, miny, maxy, linkname) {
         var innerDiv = this.innerDiv;
         var frameLeft = -innerDiv.offsetLeft;
         var frameTop = -innerDiv.offsetTop;
         var frameRight = frameLeft + inres_x;
         var frameBottom = frameTop + inres_y;
         var regexp = new RegExp(linkname + ' ', 'gi');
         if(!regexp.test(actual_links)) {
           return (minx <= frameRight && frameLeft <= maxx && miny <= frameBottom && frameTop <= maxy); 
        }
}

MainMap.prototype.removeOldLinks = function (minx, maxx, miny, maxy, linkname) {
         var innerDiv = this.innerDiv;
         var frameLeft = -innerDiv.offsetLeft;
         var frameTop = -innerDiv.offsetTop;
         var frameRight = frameLeft + inres_x;
         var frameBottom = frameTop + inres_y;
         var regexp = new RegExp(linkname + ' ', 'gi');
         if(regexp.test(actual_links) && numoflinks>=maxnumoflinks) {
          if(!(minx <= frameRight && frameLeft <= maxx && miny <= frameBottom && frameTop <= maxy)) {
            actual_links = actual_links.replace(regexp, "");
             var linkDOM = document.getElementById(linkname);
             if(is_ie) {
              linkDOM.parentNode.parentNode.removeChild(linkDOM.parentNode);
            } else {
              linkDOM.parentNode.removeChild(linkDOM);
            }
            numoflinks--;
            return;
          }
        }
}


function canvasInit(nasobek) {
        is_adding = true;
        actual_links = "";
        numoflinks = 0;
        
        div_paint = document.getElementById("paint");
        div_points = document.getElementById("mapstats_points");
        div_wave = document.getElementById("mapstats_wave");
        div_infopoint = document.getElementById("mapstats_infopoint");
        div_name = document.getElementById("mapstats_name");
        div_ip = document.getElementById("mapstats_ip");
        div_status = document.getElementById("mapstats_status");
        
        div_paint.style.width = parseInt(full_x*nasobek) + "px";
        div_paint.style.height = parseInt(full_y*nasobek) + "px";
        
        var mapstats_over = document.getElementById("mapstats_over");
        mapstats_over.style.width = parseInt(full_x*nasobek) + "px";
        mapstats_over.style.height = parseInt(full_y*nasobek) + "px";

        ann = nasobek;
        var pozdrav2 = new Array();
        var pozdr = new Array();
        var pozdrav = file_nodes.split('\n');
        var pozdrav1 = file_noping.split('\n');
        var a_cnt = 0;
        var p0count = pozdrav.length;
        var p1count = pozdrav1.length;

        for(a=0;a<p0count;a++){
          if(pozdrav[a]!=false) {
            node[a] = new Array();
            pozdrav2 = pozdrav[a].split(';');
            for(b=0;b<pozdrav2.length;b++){
                node[a][b] = pozdrav2[b];
            }
            a_cnt++;
          }
        }
        for(e=0;e<p1count;e++) {
          if(pozdrav1[e]!=false) {
            node[(e+a_cnt)] = new Array();
            pozdr = pozdrav1[e].split(';');
            for(f=0;f<pozdr.length;f++){
                node[(e+a_cnt)][f] = pozdr[f];
            }
          }
        }

        nodecount = node.length;
        var pozdrav3 = new Array();
        var pozdrav4 = new Array();
        var size;
        var clrlnk;
        m1 = 0; m1_a = 0;
        m2 = 0; m2_a = 0;
        m3 = 0; m3_a = 0;
        m4 = 0; m4_a = 0;
        m5 = 0; m5_a = 0;
        m6 = 0; m6_a = 0;
        m7 = 0; m7_a = 0;
        m8 = 0; m8_a = 0;
        m9 = 0; m9_a = 0;
        cntm = 0;
        
        checkLinks();

        cntm = m1 + m2 + m3 + m4 + m5 + m6 + m7 + m8 + m9 + m1_a + m2_a + m3_a + m4_a + m5_a + m6_a + m7_a + m8_a + m9_a;

        var pozdrav5 = new Array();
        var pozdrav6 = new Array();
        if(ch_infopoint) {
          if(file_infopoints.length>0) {
            pozdrav5 = file_infopoints.split('\n');
            for(d=0;d<pozdrav5.length;d++) {
              if(pozdrav5[d]!=false) {
                pozdrav6 = pozdrav5[d].split(';');
                // Vykreslime si infopointy
                if(ch_name) {
                  drawInfo(pozdrav6[0],pozdrav6[1],pozdrav6[2],nasobek);
                }
                drawInfoPoint(pozdrav6[1],pozdrav6[2],nasobek);
              }
            }
          }
        }

        for(e=0;e<p1count;e++) {
          if(pozdrav1[e]!="") {
            if(ch_noping) {
              if(node[(a_cnt+e)][3]==1) {
                drawClient(node[(a_cnt+e)][1],node[(a_cnt+e)][2],nasobek);
                if(ch_name) {
                   drawName(node[(a_cnt+e)][0],(node[(a_cnt+e)][1])-1,(node[(a_cnt+e)][2])-1,nasobek)
                }
              }
              if(node[(a_cnt+e)][3]==2) {
                drawSwitch(node[(a_cnt+e)][1],node[(a_cnt+e)][2],nasobek);
              }
            }
          }
        }

        var pozdrav7 = file_state.split('\n');
        var pozdrav8 = new Array();
        var clrpnt;
        var x_pos;
        var y_pos;
        var name_pos;
        var title_pos;
        var p7count = pozdrav7.length;

        for(c=0;c<p7count;c++){
          if(pozdrav7[c]!=false) {
            pozdrav8 = pozdrav7[c].split(';');
            if(pozdrav8[1]==1) { clrpnt = "on"; pozdrav8[2] = pozdrav8[2] + ' ms'; } else { clrpnt = "off"; pozdrav8[2] = "offline"; }
            if(pozdrav8[0]!=node[c][4]) { x_pos = ip2sour(pozdrav8[0],1); y_pos = ip2sour(pozdrav8[0],2); name_pos = ip2sour(pozdrav8[0],0); title_pos = ip2sour(pozdrav8[0],3); } else { x_pos = node[c][1]; y_pos = node[c][2]; name_pos = node[c][0]; title_pos = node[c][3]; }  // check if the result doesnt replaced

            if(title_pos.toLowerCase()=="ap") {
              if(ch_ap) {
                drawAP(x_pos,y_pos,nasobek);
                drawNode(x_pos,y_pos,nasobek,clrpnt);
                if(ch_name) {
                  drawName(name_pos,x_pos,y_pos,nasobek);
                }
                if((ch_ip) && (ch_status)) {
                  drawStatus(pozdrav8[2],x_pos,y_pos,nasobek);
                  drawIP(pozdrav8[0],x_pos,y_pos,nasobek);
                } else if((!ch_ip) && (ch_status)) {
                  drawStatus(pozdrav8[2],x_pos,y_pos-parseInt(12/nasobek),nasobek);
                } else if((ch_ip) && (!ch_status)) {
                  drawIP(pozdrav8[0],x_pos,y_pos,nasobek);
                }
              }
            } else if(title_pos.toLowerCase()=="router") {
              if(ch_router) {
                drawNode(x_pos,y_pos,nasobek,clrpnt);
                if(ch_name) {
                  drawName(name_pos,x_pos,y_pos,nasobek);
                }
                if(ch_status) {
                  drawStatus(pozdrav8[2],x_pos,y_pos-parseInt(12/nasobek),nasobek);
                }
               }
            } else {
              if(ch_node) {
                drawNode(x_pos,y_pos,nasobek,clrpnt);
                 if(ch_name) {
                  drawName(name_pos,x_pos,y_pos,nasobek);
                }
              }
            }
          }
        }

        var legend = document.getElementById('legend');
        if((ch_legend) && (cntm>0)) {
          drawLegend();
          legend.style.display = "block";
        } else {
          legend.style.display = "none";
        }
}

function drawLink(pos, size, nas, color) {
        var linkname = "canvas" + pos.replace(/(#|&|_|\.|\:)/gi, "");
        var points = new Array();
        var posxy = new Array();
        var coordinates = new Array();
        var cor_x = new Array();
        var cor_y = new Array();
        points = pos.split('#');
        var reg=/(\d+)&(\d+)/;
        for(i=0;i<points.length;i++){
           if (reg.test(points[i])) {
                posxy = points[i].split('&');
                coordinates[i*2] = parseInt(posxy[0]*nas);
                coordinates[i*2+1] = parseInt(posxy[1]*nas);
                cor_x.push(coordinates[i*2]);
                cor_y.push(coordinates[i*2+1]);
           } else {
                coordinates[i*2] = parseInt(node2sour(points[i],1)*nas);
                coordinates[i*2+1] = parseInt(node2sour(points[i],2)*nas);
                cor_x.push(coordinates[i*2]);
                cor_y.push(coordinates[i*2+1]);
           }
        }
        
        var maxX = cor_x.max();
        var minX = cor_x.min();
        var maxY = cor_y.max();
        var minY = cor_y.min();
        if(is_adding) {
          if(!mainMap.addNewLinks(minX, maxX, minY, maxY, linkname)) return;
        } else {
          if(!mainMap.removeOldLinks(minX, maxX, minY, maxY, linkname)) return;
        }
        numoflinks++;
        actual_links = actual_links + linkname + " ";
        var canvas = document.createElement("canvas");
        canvas.width = maxX - minX + 10;
        canvas.height = maxY - minY + 10;
        canvas.id = linkname;
        
        if(is_ie) {
          // for IE's VML absolute positioning
          var div = document.createElement("div");
          div.style.width = maxX - minX + 10 + "px";
          div.style.height = maxY - minY + 10 + "px";
          div.style.position = "absolute";
          div.style.left = (minX - 5) + "px";
          div.style.top = (minY - 5) + "px";
          div.appendChild(canvas);
          div_paint.appendChild(div);
          G_vmlCanvasManager.initElement(canvas);
        } else {
          canvas.setAttribute("style", "position:absolute;left:" + (minX - 5) + "px;top:" + (minY - 5) + "px;");
          div_paint.appendChild(canvas);
        }
        var ctx = document.getElementById(linkname).getContext('2d');
        
         minX -= 5;
        minY -= 5;

        ctx.lineJoin = "round";
        ctx.strokeStyle = "rgb(20, 20, 20)";
        ctx.lineWidth = size+1;
        ctx.beginPath();
        ctx.moveTo(coordinates[0]-minX,coordinates[1]-minY);
        for(i=2;i<coordinates.length;i+=2){
                ctx.lineTo(coordinates[i]-minX,coordinates[i+1]-minY);
        }
        ctx.stroke();

        ctx.lineJoin = "round";
        ctx.strokeStyle = "rgb(0, 0, 0)";
        ctx.lineWidth = size+1;
        ctx.beginPath();
        ctx.moveTo(coordinates[0]-minX,coordinates[1]-minY);
        for(i=2;i<coordinates.length;i+=2){
                ctx.lineTo(coordinates[i]-minX,coordinates[i+1]-minY);
        }
        ctx.stroke();

        ctx.lineJoin = "round";
        ctx.strokeStyle = color;
        ctx.lineWidth = size-1;
        ctx.beginPath();
        ctx.moveTo(coordinates[0]-minX,coordinates[1]-minY);
        for(i=2;i<coordinates.length;i+=2){
                ctx.lineTo(coordinates[i]-minX,coordinates[i+1]-minY);
        }
        ctx.stroke();
}

function drawINPLink(pos, size, nas, color) {
        var linkname = "canvas" + pos.replace(/(#|&|_|\.|\:)/gi, "");
        var points = new Array();
        var posxy = new Array();
        var coordinates = new Array();
        var cor_x = new Array();
        var cor_y = new Array();
        points = pos.split('#');
        var reg=/(\d+)&(\d+)/;
        for(i=0;i<points.length;i++){
           if (reg.test(points[i])) {
                posxy = points[i].split('&');
                coordinates[i*2] = parseInt(posxy[0]*nas);
                coordinates[i*2+1] = parseInt(posxy[1]*nas);
                cor_x.push(coordinates[i*2]);
                cor_y.push(coordinates[i*2+1]);
           } else {
                coordinates[i*2] = parseInt(node2sour(points[i],1)*nas);
                coordinates[i*2+1] = parseInt(node2sour(points[i],2)*nas);
                cor_x.push(coordinates[i*2]);
                cor_y.push(coordinates[i*2+1]);
           }
        }
        
        var maxX = cor_x.max();
        var minX = cor_x.min();
        var maxY = cor_y.max();
        var minY = cor_y.min();
        if(is_adding) {
          if(!mainMap.addNewLinks(minX, maxX, minY, maxY, linkname)) return;
        } else {
          if(!mainMap.removeOldLinks(minX, maxX, minY, maxY, linkname)) return;
        }
        numoflinks++;
        actual_links = actual_links + linkname + " ";
        var canvas = document.createElement("canvas");
        canvas.width = maxX - minX + 10;
        canvas.height = maxY - minY + 10;
        canvas.id = linkname;
        
        if(is_ie) {
          // for IE's VML absolute positioning
          var div = document.createElement("div");
          div.style.width = maxX - minX + 10 + "px";
          div.style.height = maxY - minY + 10 + "px";
          div.style.position = "absolute";
          div.style.left = (minX - 5) + "px";
          div.style.top = (minY - 5) + "px";
          div.appendChild(canvas);
          div_paint.appendChild(div);
          G_vmlCanvasManager.initElement(canvas);
        } else {
          canvas.setAttribute("style", "position:absolute;left:" + (minX - 5) + "px;top:" + (minY - 5) + "px;");
          div_paint.appendChild(canvas);
        }
        var ctx = document.getElementById(linkname).getContext('2d');
        
        minX -= 5;
        minY -= 5;

        ctx.lineJoin = "round";
        ctx.strokeStyle = "rgba(0, 0, 0, 0.1)";
        ctx.lineWidth = size+1.5;
        ctx.beginPath();
        ctx.moveTo(coordinates[0]-minX,coordinates[1]-minY);
        for(i=2;i<coordinates.length;i+=2){
                ctx.lineTo(coordinates[i]-minX,coordinates[i+1]-minY);
        }
        ctx.stroke();

        ctx.lineJoin = "round";
        ctx.strokeStyle = color;
        ctx.lineWidth = size+0.5;
        ctx.beginPath();
        ctx.moveTo(coordinates[0]-minX,coordinates[1]-minY);
        for(i=2;i<coordinates.length;i+=2){
                ctx.lineTo(coordinates[i]-minX,coordinates[i+1]-minY);
        }
        ctx.stroke();
}

function checkLinks() {
        if(file_links.length>0) {
          pozdrav3 = file_links.split('\n');
          var p3count = pozdrav3.length;
          for(a=0;a<p3count;a++){
            if(pozdrav3[a]!=false) {
              pozdrav4 = pozdrav3[a].split(';');
              if(pozdrav4[1].toLowerCase()=="backbone") { size = 4.1; } else { size = 2.7; }
              if(pozdrav4[2].toLowerCase()!="inp") {
                if(pozdrav4[3]==1) { clrlnk = wifi_client; m1 = 1; }
                else if(pozdrav4[3]==2) { clrlnk = wifi_backbone; m2 = 1; }
                else if(pozdrav4[3]==3) { clrlnk = eth_100; m3 = 1; }
                else if(pozdrav4[3]==4) { clrlnk = fso; m4 = 1; }
                else if(pozdrav4[3]==5) { clrlnk = fso_backup; m5 = 1; }
                else if(pozdrav4[3]==6) { clrlnk = ghz5; m6 = 1; }
                else if(pozdrav4[3]==7) { clrlnk = ghz10; m7 = 1; }
                else if(pozdrav4[3]==8) { clrlnk = fiber; m8 = 1; }
                else { clrlnk = other; m9 = 1; }
              } else {
                 if(pozdrav4[3]==1) { clrlnk = wifi_client_a; m1_a = 1; }
                else if(pozdrav4[3]==2) { clrlnk = wifi_backbone_a; m2_a = 1; }
                else if(pozdrav4[3]==3) { clrlnk = eth_100_a; m3_a = 1; }
                else if(pozdrav4[3]==4) { clrlnk = fso_a; m4_a = 1; }
                else if(pozdrav4[3]==5) { clrlnk = fso_backup_a; m5_a = 1; }
                else if(pozdrav4[3]==6) { clrlnk = ghz5_a; m6_a = 1; }
                else if(pozdrav4[3]==7) { clrlnk = ghz10_a; m7_a = 1; }
                else if(pozdrav4[3]==8) { clrlnk = fiber_a; m8_a = 1; }
                else { clrlnk = other_a; m9_a = 1; }
              }
              
              if(pozdrav4[2].toLowerCase()!="inp") {
                if((ch_backbone && size==4.1) || (ch_client && size==2.7)) {
                 drawLink(pozdrav4[0], size, ann, clrlnk);
                }
              } else {
                if(ch_inp) {
                 drawINPLink(pozdrav4[0], size-1, ann, clrlnk);
                }
              }
            }
          }
        }
}

function drawNode(xo, yo, nas, img) {
        xo = parseInt((xo*nas)-7);
        yo = parseInt((yo*nas)-7);
        var text = '<div class="node" style="position:absolute;left:' + xo + 'px;top:' + yo + 'px;background:url(\'' + img + '.png\');" unselectable = "on"></div>';
        div_points.innerHTML += text;
}

function drawAP(xn, yn, nas) {
        xn = parseInt((xn*nas)-31);
        yn = parseInt((yn*nas)-17);
        var text = '<div class="ap" style="position:absolute;left:' + xn + 'px;top:' + yn + 'px;" unselectable = "on"></div>';
        div_wave.innerHTML += text;
}

function drawClient(xc, yc, nas) {
        xc = parseInt((xc*nas)-7);
        yc = parseInt((yc*nas)-7);
        var text = '<div class="client" style="position:absolute;left:' + xc + 'px;top:' + yc + 'px;" unselectable = "on"></div>';
        div_wave.innerHTML += text;
}

function drawSwitch(xs, ys, nas) {
        xs = parseInt((xs*nas)-6);
        ys = parseInt((ys*nas)-6);
        var text = '<div class="switch" style="position:absolute;left:' + xs + 'px;top:' + ys + 'px;" unselectable = "on"></div>';
        div_wave.innerHTML += text;
}

function drawInfoPoint(xl, yl, nas) {
        xl = parseInt((xl*nas)-7);
        yl = parseInt((yl*nas)-7);
        var text = '<div class="infopoint" style="position:absolute;left:' + xl + 'px;top:' + yl + 'px;" unselectable = "on"></div>';
        div_wave.innerHTML += text;
}

function drawInfo(txt, xa, ya, nas) {
        xa = parseInt((xa*nas)+6);
        ya = parseInt((ya*nas)-13);
        var text = '<div class="stitek" style="position:absolute;left:' + xa + 'px;top:' + ya + 'px;" unselectable = "on">' + txt + '</div>';
        div_infopoint.innerHTML += text;
}

function drawName(txt, xa, ya, nas) {
        xa = parseInt((xa*nas)+6);
        ya = parseInt((ya*nas)-13);
        var text = '<div class="stitek" style="position:absolute;left:' + xa + 'px;top:' + ya + 'px;" unselectable = "on">' + txt + '</div>';
        div_name.innerHTML += text;
}

function drawIP(txt, xb, yb, nas) {
        xb = parseInt((xb*nas)+6);
        yb = parseInt((yb*nas)-1);
        var text = '<div class="stitek" style="position:absolute;left:' + xb + 'px;top:' + yb + 'px;" unselectable = "on">' + txt + '</div>';
        div_ip.innerHTML += text;
}

function drawStatus(txt, xc, yc, nas) {
        xc = parseInt((xc*nas)+6);
        yc = parseInt((yc*nas)+11);
        var text = '<div class="stitek" style="position:absolute;left:' + xc + 'px;top:' + yc + 'px;" unselectable = "on">' + txt + '</div>';
        div_status.innerHTML += text;
}

function drawLegendText(txt) {
        document.getElementById("mapstats_legend").innerHTML = '<div class="legend" unselectable = "on">' + txt + '</div>';
}

function drawLegend() {
        var epsilon;
        var cislo = 0;
        var name = "";
        var paintlegend = document.getElementById('paintlegend');
        paintlegend.height = (((cntm-1) * 12)+13);
        paintlegend.width = "25";
        var ctx = paintlegend.getContext('2d');
        ctx.clearRect(0,0,25,((cntm-1) * 12)+13);
        if(m1==1) { epsilon = ((cislo*12)+5); drawLegendLink(epsilon,wifi_client,2.7); name = name + name1 + "<br/>"; cislo++; }
        if(m2==1) { epsilon = ((cislo*12)+5); drawLegendLink(epsilon,wifi_backbone,4.1); name = name + name2 + "<br/>"; cislo++; }
        if(m3==1) { epsilon = ((cislo*12)+5); drawLegendLink(epsilon,eth_100,4.1); name = name + name3 + "<br/>"; cislo++; }
        if(m4==1) { epsilon = ((cislo*12)+5); drawLegendLink(epsilon,fso,4.1); name = name + name4 + "<br/>"; cislo++; }
        if(m5==1) { epsilon = ((cislo*12)+5); drawLegendLink(epsilon,fso_backup,4.1); name = name + name5 + "<br/>"; cislo++; }
        if(m6==1) { epsilon = ((cislo*12)+5); drawLegendLink(epsilon,ghz5,4.1); name = name + name6 + "<br/>"; cislo++; }
        if(m7==1) { epsilon = ((cislo*12)+5); drawLegendLink(epsilon,ghz10,4.1); name = name + name7 + "<br/>"; cislo++; }
        if(m8==1) { epsilon = ((cislo*12)+5); drawLegendLink(epsilon,fiber,4.1); name = name + name8 + "<br/>"; cislo++; }
        if(m9==1) { epsilon = ((cislo*12)+5); drawLegendLink(epsilon,other,4.1); name = name + name9 + "<br/>"; cislo++; }
        if(m1_a==1) { epsilon = ((cislo*12)+5); drawLegendINPLink(epsilon,wifi_client_a,2.7); name = name + name1 + " " + inp + "<br/>"; cislo++; }
        if(m2_a==1) { epsilon = ((cislo*12)+5); drawLegendINPLink(epsilon,wifi_backbone_a,4.1); name = name + name2 + " " + inp + "<br/>"; cislo++; }
        if(m3_a==1) { epsilon = ((cislo*12)+5); drawLegendINPLink(epsilon,eth_100_a,4.1); name = name + name3 + " " + inp + "<br/>"; cislo++; }
        if(m4_a==1) { epsilon = ((cislo*12)+5); drawLegendINPLink(epsilon,fso_a,4.1); name = name + name4 + " " + inp + "<br/>"; cislo++; }
        if(m5_a==1) { epsilon = ((cislo*12)+5); drawLegendINPLink(epsilon,fso_backup_a,4.1); name = name + name5 + " " + inp + "<br/>"; cislo++; }
        if(m6_a==1) { epsilon = ((cislo*12)+5); drawLegendINPLink(epsilon,ghz5_a,4.1); name = name + name6 + " " + inp + "<br/>"; cislo++; }
        if(m7_a==1) { epsilon = ((cislo*12)+5); drawLegendINPLink(epsilon,ghz10_a,4.1); name = name + name7 + " " + inp + "<br/>"; cislo++; }
        if(m8_a==1) { epsilon = ((cislo*12)+5); drawLegendINPLink(epsilon,fiber_a,4.1); name = name + name8 + " " + inp + "<br/>"; cislo++; }
        if(m9_a==1) { epsilon = ((cislo*12)+5); drawLegendINPLink(epsilon,other_a,4.1); name = name + name9 + " " + inp + "<br/>"; }
        drawLegendText(name);
}

function drawLegendLink(yg,color,size) {
        var ctx = document.getElementById('paintlegend').getContext('2d');
        ctx.strokeStyle = "rgb(20, 20, 20)";
        ctx.lineWidth = size+1;
        ctx.beginPath();
        ctx.moveTo(1,yg);
        ctx.lineTo(24,yg);
        ctx.stroke();

        ctx.strokeStyle = "rgb(0, 0, 0)";
        ctx.lineWidth = size;
        ctx.beginPath();
        ctx.moveTo(1,yg);
        ctx.lineTo(24,yg);
        ctx.stroke();

        ctx.strokeStyle = color;
        ctx.lineWidth = size-1;
        ctx.beginPath();
        ctx.moveTo(1,yg);
        ctx.lineTo(24,yg);
        ctx.stroke();
}

function drawLegendINPLink(yg,color,size) {
        var ctx = document.getElementById('paintlegend').getContext('2d');
        ctx.strokeStyle = "rgba(255, 255, 255, 0.5)";
        ctx.lineWidth = size;
        ctx.beginPath();
        ctx.moveTo(1,yg);
        ctx.lineTo(24,yg);
        ctx.stroke();

        ctx.strokeStyle = "rgba(0, 0, 0, 0.1)";
        ctx.lineWidth = size;
        ctx.beginPath();
        ctx.moveTo(1,yg);
        ctx.lineTo(24,yg);
        ctx.stroke();

        ctx.strokeStyle = color;
        ctx.lineWidth = size-0.5;
        ctx.beginPath();
        ctx.moveTo(1,yg);
        ctx.lineTo(24,yg);
        ctx.stroke();
}

function clearMap() {
        div_paint.innerHTML = "";
}

function node2sour(name, pos) {
        var ok = 0;
        for(k=0;k<nodecount;k++){
           if(node[k][0]==name) {
                ok = node[k][pos];
           }
           if(ok!=0) { return ok; }
        }
        return ok;
}

function ip2sour(ip, pos) {
        var ok = 0;
        for(k=0;k<nodecount;k++){
           if(node[k][4]==ip) {
                ok = node[k][pos];
           }
           if(ok!=0) { return ok; }
        }
        return ok;
}

function loadFiles() {
        var d = new Date();
        var tm = d.getTime();
        file_nodes = getFile(nodes + "?" + tm);
        file_noping = getFile(noping + "?" + tm);
        file_links = getFile(links + "?" + tm);
        file_infopoints = getFile(infopoints + "?" + tm);
        file_state = getFile(state + "?" + tm);
        redrawUpdate();
}

function getFile(url) {
        AJAX = (window.XMLHttpRequest ? new XMLHttpRequest() : (window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : false));
        if (AJAX) {
           AJAX.open("GET", url, false);
           AJAX.setRequestHeader("Cache-Control", "no-store");
           AJAX.setRequestHeader("Cache-Control", "no-cache");
           AJAX.setRequestHeader("Cache-Control", "must-revalidate");
           AJAX.setRequestHeader("Pragma", "no-cache");
           AJAX.send(null);
           return AJAX.responseText;
        } else {
           return false;
        }                                             
}

function setAutoLoader() {
        // auto-downloading source files every 2 minutes
        setInterval("loadFiles()", 2 * 60 * 1000);
}

function setCheckboxes() {
        document.form_map.ch_ap.checked = ch_ap;
        document.form_map.ch_router.checked = ch_router;
        document.form_map.ch_node.checked = ch_node;
        document.form_map.ch_infopoint.checked = ch_infopoint;
        document.form_map.ch_noping.checked = ch_noping;
        document.form_map.ch_legend.checked = ch_legend;
        document.form_map.ch_name.checked = ch_name;
        document.form_map.ch_ip.checked = ch_ip;
        document.form_map.ch_status.checked = ch_status;
        document.form_map.ch_backbone.checked = ch_backbone;
        document.form_map.ch_client.checked = ch_client;
        document.form_map.ch_inp.checked = ch_inp;
}
        
function deleteNames() {
        div_paint.innerHTML = "";
        div_points.innerHTML = "";
        div_wave.innerHTML = "";
        div_infopoint.innerHTML = "";
        div_name.innerHTML = "";
        div_ip.innerHTML = "";
        div_status.innerHTML = "";
        document.getElementById("mapstats_legend").innerHTML = "";
}

function reDraw() {
        if(document.form_map.ch_ap.checked) { ch_ap = true; } else { ch_ap = false; }
        if(document.form_map.ch_router.checked) { ch_router = true; } else { ch_router = false; }
        if(document.form_map.ch_node.checked) { ch_node = true; } else { ch_node = false; }
        if(document.form_map.ch_infopoint.checked) { ch_infopoint = true; } else { ch_infopoint = false; }
        if(document.form_map.ch_noping.checked) { ch_noping = true; } else { ch_noping = false; }
        if(document.form_map.ch_legend.checked) { ch_legend = true; } else { ch_legend = false; }
        if(document.form_map.ch_name.checked) { ch_name = true; } else { ch_name = false; }
        if(document.form_map.ch_ip.checked) { ch_ip = true; } else { ch_ip = false; }
        if(document.form_map.ch_status.checked) { ch_status = true; } else { ch_status = false; }
        if(document.form_map.ch_backbone.checked) { ch_backbone = true; } else { ch_backbone = false; }
        if(document.form_map.ch_client.checked) { ch_client = true; } else { ch_client = false; }
        if(document.form_map.ch_inp.checked) { ch_inp = true; } else { ch_inp = false; }
        deleteNames();
        clearMap();
        canvasInit(ann);
}

function changeOpacity(opc) {
        var opcprc = opc / 100;
        var mapstats_update = document.getElementById("mapstats_update");

        if (is_ie) {
           mapstats_update.style.filter = 'alpha(opacity=' + opc + ');';
        } else {
           mapstats_update.style.setProperty("-moz-opacity",opcprc,null);
           mapstats_update.style.setProperty("opacity",opcprc,null);
        }
}

function changeUpdate() {
        var promenna = new Date();
        var rok = promenna.getFullYear();
        var mesic = "" + (promenna.getMonth() + 1);
        var den = "" + (promenna.getDate());
        var hodin = "" + (promenna.getHours());
        var minut = "" + (promenna.getMinutes());
        var sekund = "" + (promenna.getSeconds());
        if(mesic.length==1) { mesic = "0" + mesic; }
        if(den.length==1) { den = "0" + den; }
        if(hodin.length==1) { hodin = "0" + hodin; }
        if(minut.length==1) { minut = "0" + minut; }
        if(sekund.length==1) { sekund = "0" + sekund; }
        document.getElementById("mapstats_update").innerHTML = den + ". " + mesic + ". " + rok + " " + hodin + ":" + minut + ":" + sekund;
}

function redrawUpdate() {
        setTimeout("changeOpacity(90)",100);
        setTimeout("changeOpacity(80)",200);
        setTimeout("changeOpacity(70)",300);
        setTimeout("changeOpacity(60)",400);
        setTimeout("changeOpacity(50)",500);
        setTimeout("changeOpacity(40)",600);
        setTimeout("changeOpacity(30)",700);
        setTimeout("changeOpacity(20)",800);
        setTimeout("changeOpacity(10)",900);
        setTimeout("changeOpacity(0)",1000);
        setTimeout("changeUpdate()",1050);
        setTimeout("changeOpacity(10)",1100);
        setTimeout("changeOpacity(20)",1200);
        setTimeout("changeOpacity(30)",1300);
        setTimeout("changeOpacity(40)",1400);
        setTimeout("changeOpacity(50)",1500);
        setTimeout("changeOpacity(60)",1600);
        setTimeout("changeOpacity(70)",1700);
        setTimeout("changeOpacity(80)",1800);
        setTimeout("changeOpacity(90)",1900);
        setTimeout("changeOpacity(100)",2000);
}

Powered by WebSVN 2.2.1