﻿function ScreenHelper() { };
ScreenHelper.prototype.GetViewportSize = function() {
    var a = { width: 0, height: 0 };
    if (typeof window.innerWidth !== "undefined")
        a = { width: window.innerWidth,
            height: window.innerHeight
        };
    else if (typeof document.documentElement !== "undefined" && typeof document.documentElement.clientWidth !== "undefined" && document.documentElement.clientWidth !== 0)
        a = { width: document.documentElement.clientWidth, height: document.documentElement.clientHeight };
    else
        a = { width: document.getElementsByTagName("body")[0].clientWidth, height: document.getElementsByTagName("body")[0].clientHeight };
    return a
};
ScreenHelper.prototype.GetMousePosition = function(a) {
    if (!a)
        a = window.event;
    var b = { x: 0, y: 0 };
    if (typeof a.pageX !== "undefined" && typeof a.x !== "undefined") {
        b.x = a.pageX;
        b.y = a.pageY
    }
    else {
        var c = this.GetScrollPosition();
        b.x = a.clientX + c.x;
        b.y = a.clientY + c.y
    }
    return b
};
ScreenHelper.prototype.GetScrollPosition = function() {
    var a = { x: 0, y: 0 };
    if (typeof window.pageYOffset !== "undefined") {
        a.x = window.pageXOffset;
        a.y = window.pageYOffset
    }
    else if (typeof document.documentElement !== "undefined" && typeof document.documentElement.scrollTop !== "undefined") {
        a.x = document.documentElement.scrollLeft;
        a.y = document.documentElement.scrollTop
    }
    else if (typeof document.body.scrollTop !== "undefined") {
        a.x = document.body.scrollLeft;
        a.y = document.body.scrollTop
    }
    return a
};
ScreenHelper.prototype.GetElementPosition = function(e) {
    if (e != null && typeof e != 'undefined' && e.style != null) {
        if (e.style.left != null && e.style.left != 'undefined' && e.style.top != null && e.style.top != 'undefined')
            var x = parseInt(e.style.left, 10),
      y = parseInt(e.style.top, 10);
        return new WAPI.Pixel(x, y);
    }
    return null;
};
ScreenHelper.prototype.GetPosition = function(elt, calcScroll) {
    var 
     a = elt,
     f, b, i, h, x1 = 0, y1 = 0;
    while (a !== null) {
        f = typeof a.scrollTop !== "undefined" && a !== document.body && a !== document.documentElement && a.tagName !== "TEXTAREA" && a.tagName !== "INPUT" ? 1 : 0;
        x1 += a.offsetLeft - f * a.scrollLeft;
        y1 += a.offsetTop - f * a.scrollTop;
        a = a.offsetParent;
    }
    if (calcScroll) {
        b = screen.GetScrollPosition();
        x1 -= b.x;
        y1 -= b.y
    }
    return { x: x1, y: y1 }
};
ScreenHelper.prototype.GetMouseScrollDelta = function(e) {
    if (e.wheelDelta)
        return e.wheelDelta;
    else if (e.detail)
        return -e.detail;
    return 0
};
ScreenHelper.prototype.MathRound = function(a) { return Math.round(a) };









/*Zoom Bar*/
function ZoomBar(map_control, container_id) {
  if (map_control == 'undefined' || map_control == null)
    return;
  var 
        controlBox = null,
        panBox = null,
        panImage = null,
        panButton0 = null,
        panButton1 = null,
        panButton2 = null,
        panButton3 = null,
        panButton4 = null,
        zoomInBox = null,
        zoomInImage = null,
        zoomOutBox = null,
        zoomOutImage = null,
        scaleBox = null,
        scaleButton = null,
        scaleImage = null,
        zooming = false,
        currentZoomLevel = 0,
        mouseX = 0,
        mouseY = 0,
        screen = null,
        map = map_control,
        map_container_id = container_id;
        
  function Load() {
    if (map == null)
      throw "Map control cannot be null.";
    screen = new ScreenHelper();
    controlBox = document.createElement("div");
    controlBox.className = "css_controlBox";

    panBox = document.createElement("div");
    panBox.className = "css_panBox";
    panImage = document.createElement("div");
    panImage.className = "css_panImage";
    panImage.style.height = "259px";
    panImage.style.width = "128px"

    panButton0 = document.createElement("div");
    panButton0.className = "css_panButton0";
    panButton0.title = "Pan North";
    panButton1 = document.createElement("div");
    panButton1.className = "css_panButton1";
    panButton1.title = "Pan East";

    panButton2 = document.createElement("div");
    panButton2.className = "css_panButton2";
    panButton2.title = "Pan South";

    panButton3 = document.createElement("div");
    panButton3.className = "css_panButton3";
    panButton3.title = "Pan West";

    panButton4 = document.createElement("div");
    panButton4.className = "css_panButton4";
    panButton4.title = "Fit to Screen";

    zoomInBox = document.createElement("div");
    zoomInBox.className = "css_zoomInBox";
    zoomInBox.title = "Zoom In";

    zoomInImage = document.createElement("div");
    zoomInImage.className = "css_zoomInImage";
    zoomInImage.style.height = "259px";
    zoomInImage.style.width = "128px"

    zoomOutBox = document.createElement("div");
    zoomOutBox.className = "css_zoomOutBox";
    zoomOutBox.title = "Zoom Out";

    zoomOutImage = document.createElement("div");
    zoomOutImage.className = "css_zoomOutImage";
    zoomOutImage.style.height = "259px";
    zoomOutImage.style.width = "128px"

    scaleBox = document.createElement("div");
    scaleBox.className = "css_scaleBox";

    scaleBox = document.createElement("div");
    scaleBox.className = "css_scaleBox";

    scaleButton = document.createElement("div");
    scaleButton.className = "css_scaleButton";
    scaleButton.title = "Zoom Level 10";

    scaleImage = document.createElement("div");
    scaleImage.className = "css_scaleImage";
    scaleImage.style.height = "259px";
    scaleImage.style.width = "128px"
    scaleImage.onmousedown = function(e) { return false; }

    map.AttachEvent("onendzoom", OnEndZoom);
    map.AttachEvent("onmousewheel", OnMouseWheel);

    var ctrl = document.getElementById(map_container_id);
    ctrl.parentNode.appendChild(controlBox);
    
    controlBox.appendChild(panBox);
    panBox.appendChild(panImage);
    panBox.appendChild(panButton0);
    panBox.appendChild(panButton1);
    panBox.appendChild(panButton2);
    panBox.appendChild(panButton3);
    panBox.appendChild(panButton4);
    controlBox.appendChild(zoomInBox);
    zoomInBox.appendChild(zoomInImage);
    controlBox.appendChild(zoomOutBox);
    zoomOutBox.appendChild(zoomOutImage);
    controlBox.appendChild(scaleBox);
    controlBox.appendChild(scaleButton);
    scaleButton.appendChild(scaleImage);

    controlBox.onmouseout = function(e) {
      if (zooming) {
        var box = screen.GetPosition(controlBox, false),
                pos = screen.GetMousePosition(e);
        if (pos.x < box.x || pos.x > box.x + 45 || pos.y < box.y || pos.y > box.y + 256) {
          SetCursor(scaleButton, 'pointer');
          box = screen.GetPosition(scaleBox, false),
          pos = screen.GetMousePosition(e),
          z = screen.MathRound((160 - (pos.y - box.y - 5)) / 10);
          SetZoomLevel(z, true);
          zooming = false;
        }
      }
    }
    controlBox.onmousemove = function(e) {
      if (zooming == true) {
        var box = screen.GetPosition(scaleBox, false);
        var pos = screen.GetMousePosition(e);
        var y1 = pos.y - box.y;
        var y2 = y1 - mouseY;
        var y3 = (63 + 160 - currentZoomLevel * 10);
        var y4 = y3 + y2;
        if (y4 >= 63 && y4 <= (160 + 53))
          scaleButton.style.top = y4 + "px";
      }
    }
    controlBox.onmouseup = function(e) {
      if (zooming) {
        SetCursor(scaleButton, 'pointer');
        var box = screen.GetPosition(scaleBox, false),
                pos = screen.GetMousePosition(e);
        var z = screen.MathRound((160 - (pos.y - box.y - 5)) / 10);
        SetZoomLevel(z, true);
        zooming = false;
      }
    }

    panButton0.onmouseover = function(e) { panImage.style.marginTop = "-41px"; }
    panButton0.onmouseout = function(e) { panImage.style.marginTop = "-5px"; }
    panButton0.onmouseup = function(e) {
      var v = GetMapSize().Height;
      map.Pan(0, -v / 2);
    }

    panButton1.onmouseover = function(e) { panImage.style.marginTop = "-77px"; }
    panButton1.onmouseout = function(e) { panImage.style.marginTop = "-5px"; }
    panButton1.onmouseup = function(e) {
      var v = GetMapSize().Width;
      map.Pan(v / 2, 0);
    }

    panButton2.onmouseover = function(e) { panImage.style.marginTop = "-113px"; }
    panButton2.onmouseout = function(e) { panImage.style.marginTop = "-5px"; }
    panButton2.onmouseup = function(e) {
      var v = GetMapSize().Height;
      map.Pan(0, v / 2);
    }

    panButton3.onmouseover = function(e) { panImage.style.marginTop = "-149px"; }
    panButton3.onmouseout = function(e) { panImage.style.marginTop = "-5px"; }
    panButton3.onmouseup = function(e) {
      var v = GetMapSize().Height;
      map.Pan(-v / 2, 0);
    }

    panButton4.onmouseover = function(e) { panImage.style.marginTop = "-185px"; }
    panButton4.onmouseout = function(e) { panImage.style.marginTop = "-5px"; }

    zoomInBox.onmouseover = function(e) { zoomInImage.style.marginTop = "-63px"; }
    zoomInBox.onmouseout = function(e) { zoomInImage.style.marginTop = "-42px"; }
    zoomInBox.onmouseup = function(e) { SetZoomLevel(currentZoomLevel + 1, true); }

    zoomOutBox.onmouseover = function(e) { zoomOutImage.style.marginTop = "-104px"; }
    zoomOutBox.onmouseout = function(e) { zoomOutImage.style.marginTop = "-83px"; }
    zoomOutBox.onmouseup = function(e) { SetZoomLevel(currentZoomLevel - 1, true); }

    scaleButton.onmouseover = function(e) { scaleImage.style.marginTop = "-22px"; }
    scaleButton.onmouseout = function(e) { scaleImage.style.marginTop = "-8px"; }

    scaleImage.onmousedown = function(e) {
      SetCursor(scaleButton, '../JavaScript/Dashboard/grabbing.cur');
      var box = screen.GetPosition(scaleBox, false),
               pos = screen.GetMousePosition(e);
      mouseX = pos.x - box.x;
      mouseY = pos.y - box.y;
      zooming = true;
      return false
    };
    scaleImage.onmousemove = function(e) {
      if (e == null || e == 'undefined')
        e = window.event;
      e.returnValue = false
      //e.cancelBubble = true;
    }
    scaleBox.onmouseup = function(e) {
      var box = screen.GetPosition(scaleBox, false),
              pos = screen.GetMousePosition(e);
      var z = screen.MathRound((160 - (pos.y - box.y - 5)) / 10);
      SetZoomLevel(z, true);
    }
    SetZoomLevel(map.GetZoomLevel(), false);
  }

  function GetMapSize() {
    var s = document.getElementById(map_container_id);
    var size = new Object();
    size.Width = parseInt(s.style.width);
    size.Height = parseInt(s.style.height);
    return size;
  }
  
  
  function SetCursor(e, c) {
    var b = e.style;
    if (b.cursor != c)
      b.cursor = c
  }
  function SetZoomLevel(z, b) {
    if (z < 1)
      z = 1
    else if (z > 16)
      z = 16;
    currentZoomLevel = z;
    scaleButton.style.top = (223 - z * 10) + "px";
    scaleButton.title = "Zoom Level " + z;
    if (b == true)
      map.SetZoomLevel(currentZoomLevel);
  }

  function OnEndZoom(s, e) {
    SetZoomLevel(s.zoomLevel, false);
  }
  function OnMouseWheel(s, e) {
    if (s.mouseWheelChange < 0)
      return !(s.zoomLevel > 1)
    else
      return !(s.zoomLevel < 16)
  }
  this.Load = Load;
}





function SmallZoomBar(map_control, container_id) {
  if (map_control == 'undefined' || map_control == null)
    return;
  var 
        controlBox = null,
        panBox = null,
        panImage = null,
        panButton0 = null,
        panButton1 = null,
        panButton2 = null,
        panButton3 = null,
        panButton4 = null,
        zoomInBox = null,
        zoomInImage = null,
        zoomOutBox = null,
        zoomOutImage = null,
        zooming = false,
        currentZoomLevel = 0,
        mouseX = 0,
        mouseY = 0,
        map = map_control,
        map_container_id = container_id;

  function Load() {
    if (map == null)
      throw "Map control cannot be null.";
      
    controlBox = document.createElement("div");
    controlBox.className = "css_controlBox_small";

    panBox = document.createElement("div");
    panBox.className = "css_panBox";
    panImage = document.createElement("div");
    panImage.className = "css_panImage";
    panImage.style.height = "259px";
    panImage.style.width = "128px"

    panButton0 = document.createElement("div");
    panButton0.className = "css_panButton0";
    panButton0.title = "Pan North";
    panButton1 = document.createElement("div");
    panButton1.className = "css_panButton1";
    panButton1.title = "Pan East";

    panButton2 = document.createElement("div");
    panButton2.className = "css_panButton2";
    panButton2.title = "Pan South";

    panButton3 = document.createElement("div");
    panButton3.className = "css_panButton3";
    panButton3.title = "Pan West";

    panButton4 = document.createElement("div");
    panButton4.className = "css_panButton4";
    panButton4.title = "Fit to Screen";

    zoomInBox = document.createElement("div");
    zoomInBox.className = "css_zoomInBox";
    zoomInBox.title = "Zoom In";

    zoomInImage = document.createElement("div");
    zoomInImage.className = "css_zoomInImage";
    zoomInImage.style.height = "259px";
    zoomInImage.style.width = "128px"

    zoomOutBox = document.createElement("div");
    zoomOutBox.className = "css_zoomOutBox_small";
    zoomOutBox.title = "Zoom Out";

    zoomOutImage = document.createElement("div");
    zoomOutImage.className = "css_zoomOutImage_small";
    zoomOutImage.style.height = "259px";
    zoomOutImage.style.width = "128px"

    map.AttachEvent("onendzoom", OnEndZoom);
    map.AttachEvent("onmousewheel", OnMouseWheel);
    
    var ctrl = document.getElementById(map_container_id);
    ctrl.parentNode.appendChild(controlBox);    
    
    controlBox.appendChild(panBox);
    panBox.appendChild(panImage);
    panBox.appendChild(panButton0);
    panBox.appendChild(panButton1);
    panBox.appendChild(panButton2);
    panBox.appendChild(panButton3);
    panBox.appendChild(panButton4);
    controlBox.appendChild(zoomInBox);
    zoomInBox.appendChild(zoomInImage);
    controlBox.appendChild(zoomOutBox);
    zoomOutBox.appendChild(zoomOutImage);

    panButton0.onmouseover = function(e) { panImage.style.marginTop = "-41px"; }
    panButton0.onmouseout = function(e) { panImage.style.marginTop = "-5px"; }
    panButton0.onmouseup = function(e) {
      var v = GetMapSize().Height;
      map.Pan(0, -v / 2);
    }

    panButton1.onmouseover = function(e) { panImage.style.marginTop = "-77px"; }
    panButton1.onmouseout = function(e) { panImage.style.marginTop = "-5px"; }
    panButton1.onmouseup = function(e) {
      var v = GetMapSize().Width;
      map.Pan(v / 2, 0);
    }

    panButton2.onmouseover = function(e) { panImage.style.marginTop = "-113px"; }
    panButton2.onmouseout = function(e) { panImage.style.marginTop = "-5px"; }
    panButton2.onmouseup = function(e) {
      var v = GetMapSize().Height;
      map.Pan(0, v / 2);
    }

    panButton3.onmouseover = function(e) { panImage.style.marginTop = "-149px"; }
    panButton3.onmouseout = function(e) { panImage.style.marginTop = "-5px"; }
    panButton3.onmouseup = function(e) {
      var v = GetMapSize().Width;
      map.Pan(-v / 2, 0);
    }

    panButton4.onmouseover = function(e) { panImage.style.marginTop = "-185px"; }
    panButton4.onmouseout = function(e) { panImage.style.marginTop = "-5px"; }

    zoomInBox.onmouseover = function(e) { zoomInImage.style.marginTop = "-63px"; }
    zoomInBox.onmouseout = function(e) { zoomInImage.style.marginTop = "-42px"; }
    zoomInBox.onmouseup = function(e) { SetZoomLevel(currentZoomLevel + 1, true); }

    zoomOutBox.onmouseover = function(e) { zoomOutImage.style.marginTop = "-104px"; }
    zoomOutBox.onmouseout = function(e) { zoomOutImage.style.marginTop = "-83px"; }
    zoomOutBox.onmouseup = function(e) { SetZoomLevel(currentZoomLevel - 1, true); }

    SetZoomLevel(map.GetZoomLevel(), false);
  }

  function GetMapSize() {
    var s = document.getElementById(map_container_id);
    var size = new Object();
    size.Width = (s.style.width == null || s.style.width == "") ? parseInt(s.currentStyle.width) : parseInt(s.style.width);
    size.Height = (s.style.height == null || s.style.height == "") ? parseInt(s.currentStyle.height) : parseInt(s.style.height);
    return size;
  }
  function SetCursor(e, c) {
    var b = e.style;
    if (b.cursor != c)
      b.cursor = c
  }
  function SetZoomLevel(z, b) {
    if (z < 1)
      z = 1
    else if (z > 16)
      z = 16;
    currentZoomLevel = z;
    if (b == true)
      OnZoomChanged();
  }
  function OnZoomChanged() {
    map.SetZoomLevel(currentZoomLevel);
  }
  function OnEndZoom(s, e) {
    SetZoomLevel(s.zoomLevel, false);
  }
  function OnMouseWheel(s, e) {
    if (s.mouseWheelChange < 0)
      return !(s.zoomLevel > 1)
    else
      return !(s.zoomLevel < 16)
  }
  
  function GetElement() {
    return controlBox;
  }

  this.SetZoomLevel = SetZoomLevel;
  this.GetElement = GetElement;
  this.Load = Load;
}
/*End Zoom Bar*/

