// borrowed from http://dunnbypaul.net/js_mouse/
var mousex = 0;
var mousey = 0;
var grabx = 0;
var graby = 0;
var orix = 0;
var oriy = 0;
var elex = 0;
var eley = 0;
var elew = 0;
var eleh = 0;
var algor = 0;

var dragobj = null;

function falsefunc() { return false; } // used to block cascading events

function init()
{
  // update(event) implied on NS, update(null) implied on IE
  document.onmousemove = update;
  update();

  // preload images
  //var i = new Image(3350,3224);
  //i.src = 'images/map100.jpg';
  //i = new Image(3015,2902);
  //i.src = 'images/map90.jpg';
  //i = new Image(2680,2579);
  //i.src = 'images/map80.jpg';
  //i = new Image(2345,2257);
  //i.src = 'images/map70.jpg';
  //i = new Image(2010,1934);
  //i.src = 'images/map60.jpg';
  //i = new Image(1675,1612);
  //i.src = 'images/map50.jpg';
  //i = new Image(1340,1290);
  //i.src = 'images/map40.jpg';
  //i = new Image(1005,967);
  //i.src = 'images/map30.jpg';
  //i = new Image(670,645);
  //i.src = 'images/map20.jpg';
  //i = new Image(335,322);
  //i.src = 'images/map10.jpg';

  //i = new Image(494,478);
  //i.src = 'images/master_plan15.jpg';
  var i = new Image(829,802);
  i.src = 'images/master_plan30.jpg';
  i = new Image(1164,1126);
  i.src = 'images/master_plan45.jpg';
  i = new Image(1499,1450);
  i.src = 'images/master_plan60.jpg';
  i = new Image(1834,1774);
  i.src = 'images/master_plan75.jpg';
  i = new Image(2169,2098);
  i.src = 'images/master_plan90.jpg';
}

function setInnerHTML(id, content)
{
  var el = document.getElementById(id);
  if (el)
  {
    el.innerHTML = content;
  }
}

function getMouseXY(e) // works on IE6,FF,Moz,Opera7
{
  // works on IE, but not NS (we rely on NS passing us the event)
  if (!e) e = window.event;

  if (e)
  {
    if (e.pageX || e.pageY)
    { // this doesn't work on IE6!! (works on FF,Moz,Opera7)
      mousex = e.pageX;
      mousey = e.pageY;
      algor = '[e.pageX]';
      if (e.clientX || e.clientY) algor += ' [e.clientX] '
    }
    else if (e.clientX || e.clientY)
    { // works on IE6,FF,Moz,Opera7
      mousex = e.clientX + document.body.scrollLeft;
      mousey = e.clientY + document.body.scrollTop;
      algor = '[e.clientX]';
      if (e.pageX || e.pageY) algor += ' [e.pageX] '
    }
  }
}

function update(e)
{
  getMouseXY(e); // NS is passing (event), while IE is passing (null)

  setInnerHTML('span_browser', navigator.appName);
  setInnerHTML('span_winevent',
      window.event ? window.event.type : '(na)');
  setInnerHTML('span_autevent', e ? e.type : '(na)');
  setInnerHTML('span_mousex', mousex);
  setInnerHTML('span_mousey', mousey);
  setInnerHTML('span_grabx', grabx);
  setInnerHTML('span_graby', graby);
  setInnerHTML('span_orix', orix);
  setInnerHTML('span_oriy', oriy);
  setInnerHTML('span_elex', elex);
  setInnerHTML('span_eley', eley);
  setInnerHTML('span_elew', elew);
  setInnerHTML('span_eleh', eleh);
  setInnerHTML('span_algor', algor);
  setInnerHTML('span_dragobj',
      dragobj ? (dragobj.id ? dragobj.id : 'unnamed object') : '(null)');
}

function grab(context)
{
  // in NS this prevents cascading of events, disabling text selection
  document.onmousedown = falsefunc;
  dragobj = context;
  dragobj.style.zIndex = 10; // move it to the top
  document.onmousemove = drag;
  document.onmouseup = drop;
  grabx = mousex;
  graby = mousey;
  elex = orix = dragobj.offsetLeft;
  eley = oriy = dragobj.offsetTop;
  elew = getWidth(dragobj) - getWidth(dragobj.parentNode);
  eleh = getHeight(dragobj) - getHeight(dragobj.parentNode);
  limit();
  update();
}

function getWidth(el)
{
  var w = getStyle(el).width;
  var i_w = parseInt(w.replace(/px/,''));
  if (isNaN(i_w))
  {
    i_w = 0;
    if (el.nodeType == 1 && el.nodeName == 'IMG')
      i_w = el.width;
  }
  return i_w;
}

function getHeight(el)
{
  var h = getStyle(el).height;
  var i_h = parseInt(h.replace(/px/,''));
  if (isNaN(i_h))
  {
    i_h = 0;
    if (el.nodeType == 1 && el.nodeName == 'IMG')
      i_h = el.height;
  }
  return i_h;
}

function getStyle(el)
{
  if (window.getComputedStyle)
  {
    return getComputedStyle(el, null);
  }
  return el.currentStyle;
}

function limit()
{
  if (0 < elex) elex = 0; else if (-elew > elex) elex = -elew;
  if (0 < eley) eley = 0; else if (-eleh > eley) eley = -eleh;
}

function drag(e) // parameter passing is important for NS family
{
  if (dragobj)
  {
    elex = orix + (mousex-grabx);
    eley = oriy + (mousey-graby);
    limit();
    if ((elex <= 0 && elex >= -elew) || (eley <= 0 && eley >= -eleh))
    {
      dragobj.style.position = "relative";
      if (elex <= 0 && elex >= -elew)
        dragobj.style.left = (elex).toString(10) + 'px';
      if (eley <= 0 && eley >= -eleh)
        dragobj.style.top  = (eley).toString(10) + 'px';
    }
  }
  update(e);

  // in IE this prevents cascading of events, text selection is disabled
  return false;
}

function drop()
{
  if (dragobj)
  {
    dragobj.style.zIndex = 0;
    dragobj = null;
  }
  update();
  document.onmousemove = update;
  document.onmouseup = null;
  document.onmousedown = null; // re-enables text selection on NS
}

function zoom(which, where)
{
  var el = document.getElementById(which);
  var currZoom = parseInt(el.src.match(/master_plan(\d+)\.jpg/)[1]);
  if (currZoom < 90 && where > 0) // zoom in
  {
    el.src = 'images/master_plan' + (currZoom + 15) + '.jpg';
  }
  else if (15 < currZoom && 0 > where) // zoom out
  {
    // Just reset the image to the top left.....
    el.style.position = "relative";
    el.style.left = '0px';
    el.style.top = '0px';
    el.src = 'images/master_plan' + (currZoom - 15) + '.jpg';
  }
}

function setView(which, img)
{
  var el = document.getElementById(which);
  var i = document.getElementById(img);
  if (el && img)
  {
    el.style.width = getWidth(i).toString(10) + 'px';
    el.style.height = getHeight(i).toString(10) + 'px';
  }
}

// vim:ts=2:sw=2:et:sts=2:ht=2:foldmethod=marker
