// Global variables
var isCSS, isW3C, isIE4, isNN4, isIE6CSS, loadedImages, toggleState;

// initialize upon load to let all browsers establish content objects
function initDHTMLAPI() {
   if (document.images) {
      isCSS = (document.body && document.body.style) ? true : false;
      isW3C = (isCSS && document.getElementById) ? true : false;
      isIE4 = (isCSS && document.all) ? true : false;
      isNN4 = (document.layers) ? true : false;
      isIE6CSS = (document.compatMode && document.compatMode.indexOf("CSS1") >= 0) ? true : false;
   }
   loadImages('toTopNormal.gif', 'toTopOver.gif', 'back-menu-item-down.png', 'back-menu-item-over.png');
   MenuInit();
}

// set event handler to initialize API
window.onload = initDHTMLAPI;

// Convert object name string or object reference
// into a valid element object reference
function getRawObject(obj) {
   var theObj;
   if (typeof obj == "string") {
      if (isW3C) {
         theObj = document.getElementById(obj);
      } else if (isIE4) {
         theObj = document.all(obj);
      } else if (isNN4) {
         theObj = seekLayer(document, obj);
      }
   } else {
      // pass through object reference
      theObj = obj;
   }
   return theObj;
}

// Convert object name string or object reference
// into a valid style (or NN4 layer) reference
function getObject(obj) {
   var theObj = getRawObject(obj);
   if (theObj && isCSS) {
      theObj = theObj.style;
   }
   return theObj;
}

// Position an object at a specific pixel coordinate
function shiftTo(obj, x, y) {
   var theObj = getObject(obj);
   if (theObj) {
      if (isCSS) {
         // equalize incorrect numeric value type
         var units = (typeof theObj.left == "string") ? "px" : 0;
         theObj.left = x + units;
         theObj.top = y + units;
      } else if (isNN4) {
         theObj.moveTo(x,y)
      }
   }
}

// Move an object by x and/or y pixels
function shiftBy(obj, deltaX, deltaY) {
   var theObj = getObject(obj);
   if (theObj) {
      if (isCSS) {
         // equalize incorrect numeric value type
         var units = (typeof theObj.left == "string") ? "px" : 0;
         theObj.left = getObjectLeft(obj) + deltaX + units;
         theObj.top = getObjectTop(obj) + deltaY + units;
      } else if (isNN4) {
         theObj.moveBy(deltaX, deltaY);
      }
   }
}

// Set the z-order of an object
function setZIndex(obj, zOrder) {
   var theObj = getObject(obj);
   if (theObj) {
      theObj.zIndex = zOrder;
   }
}

// Set the background color of an object
function setBGColor(obj, color) {
   var theObj = getObject(obj);
   if (theObj) {
      if (isNN4) {
         theObj.bgColor = color;
      } else if (isCSS) {
         theObj.backgroundColor = color;
      }
   }
}

// Set the visibility of an object to visible
function show(obj) {
   var theObj = getObject(obj);
   if (theObj) {
      theObj.visibility = "visible";
   }
}

// Set the visibility of an object to hidden
function hide(obj) {
   var theObj = getObject(obj);
   if (theObj) {
      theObj.visibility = "hidden";
   }
}

// Retrieve the x coordinate of a positionable object
function getObjectLeft(obj)  {
   var elem = getRawObject(obj);
   var result = 0;
   if (document.defaultView) {
      var style = document.defaultView;
      var cssDecl = style.getComputedStyle(elem, "");
      result = cssDecl.getPropertyValue("left");
   } else if (elem.currentStyle) {
      result = elem.currentStyle.left;
   } else if (elem.style) {
      result = elem.style.left;
   } else if (isNN4) {
      result = elem.left;
   }
   return parseInt(result);
}

// Retrieve the y coordinate of a positionable object
function getObjectTop(obj)  {
   var elem = getRawObject(obj);
   var result = 0;
   if (document.defaultView) {
      var style = document.defaultView;
      var cssDecl = style.getComputedStyle(elem, "");
      result = cssDecl.getPropertyValue("top");
   } else if (elem.currentStyle) {
      result = elem.currentStyle.top;
   } else if (elem.style) {
      result = elem.style.top;
   } else if (isNN4) {
      result = elem.top;
   }
   return parseInt(result);
}

// Retrieve the rendered width of an element
function getObjectWidth(obj)  {
   var elem = getRawObject(obj);
   var result = 0;
   if (elem.offsetWidth) {
      result = elem.offsetWidth;
   } else if (elem.clip && elem.clip.width) {
      result = elem.clip.width;
   } else if (elem.style && elem.style.pixelWidth) {
      result = elem.style.pixelWidth;
   }
   return parseInt(result);
}

// Retrieve the rendered height of an element
function getObjectHeight(obj)  {
   var elem = getRawObject(obj);
   var result = 0;
   if (elem.offsetHeight) {
      result = elem.offsetHeight;
   } else if (elem.clip && elem.clip.height) {
      result = elem.clip.height;
   } else if (elem.style && elem.style.pixelHeight) {
      result = elem.style.pixelHeight;
   }
   return parseInt(result);
}

// Return the available content width space in browser window
function getInsideWindowWidth() {
   if (window.innerWidth) {
      return window.innerWidth;
   } else if (isIE6CSS) {
      // measure the html element's clientWidth
      return document.body.parentElement.clientWidth;
   } else if (document.body && document.body.clientWidth) {
      return document.body.clientWidth;
   }
   return 0;
}

// Return the available content height space in browser window
function getInsideWindowHeight() {
   if (window.innerHeight) {
      return window.innerHeight;
   } else if (isIE6CSS) {
      // measure the html element's clientHeight
      return document.body.parentElement.clientHeight;
   } else if (document.body && document.body.clientHeight) {
      return document.body.clientHeight;
   }
   return 0;
}

// return top and left offset of elem with id
function getElementPosition(elemID) {
   var offsetTrail = document.getElementById(elemID);
   var offsetLeft = 0;
   var offsetTop = 0;
   while (offsetTrail) {
      offsetLeft += offsetTrail.offsetLeft;
      offsetTop += offsetTrail.offsetTop;
      offsetTrail = offsetTrail.offsetParent;
   }
   if (navigator.userAgent.indexOf("Mac") != -1 &&
         typeof document.body.leftMargin != "undefined") {
      offsetLeft += document.body.leftMargin;
      offsetTop += document.body.topMargin;
   }
   return {left:offsetLeft, top:offsetTop};
}

function MenuInit() {
   var menu = getRawObject('menu');
   var items = menu.getElementsByTagName('td');
   for ( var i = 0; i < items.length; i++ ) {
      if (items[i].className && (items[i].className.indexOf("item") != -1)) {
         var msg = items[i].title;
         items[i].title = "";
         items[i].msg = msg;
         items[i].onmouseover = function(event) {
            ShowTip(this.msg, event);
            if(this.className && this.className == 'item') {
               this.className = 'item_o';
            }
         }
         items[i].onmouseout = function(event) {
            HideTip();
            if(this.className && this.className == 'item_o') {
               this.className = 'item';
            }
         }
         items[i].onclick = function() {
            FollowLink(this);
         }
      }
   }
}

function HideTip() {
   document.getElementById('tooltip').innerHTML = "";
   hide('tooltip');
}

function ShowTip(msg, evt) {
   hide('tooltip');
   evt = (evt) ? evt : event;
   if(!evt) {
      return;
   }
   if( typeof( evt.pageX ) == 'number' ) {
      //most browsers
      var x = evt.pageX;
      var y = evt.pageY;
   } else if( typeof( evt.clientX ) == 'number' ) {
      var x = evt.clientX;
      var y = evt.clientY;
      var badOldBrowser =  ( window.navigator.userAgent.indexOf( 'Opera' ) + 1 ) ||
                           ( window.ScriptEngine && ScriptEngine().indexOf( 'InScript' ) + 1 ) ||
                           ( navigator.vendor == 'KDE' );
      if( !badOldBrowser ) {
         if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
            // IE 4, 5 & 6 (in non-standards compliant mode)
            x += document.body.scrollLeft;
            y += document.body.scrollTop;
         } else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
            //IE 6 (in standards compliant mode)
            x += document.documentElement.scrollLeft;
            y += document.documentElement.scrollTop;
         }
      }
   } else {
      //total failure, we have no way of obtaining the mouse coordinates
      return;
   }
   // shift a little
   x += 28;
   y += 14;
   document.getElementById('tooltip').innerHTML = msg;
   shiftTo('tooltip', x, y);
   show('tooltip');
}

function FollowLink(obj) {
   var theObj = getRawObject(obj);
   var reDomain = /^http:\/\/[^\/]+/g;
   var baseURL = window.location.href.match(reDomain);
   var theReference = theObj.firstChild.attributes.getNamedItem('href');
   if(theReference.specified && (typeof theReference.value == 'string')) {
      if(theReference.value.match(reDomain)) {
         var gotoURL = theReference.value;
      } else {
         var gotoURL = baseURL + theReference.value;
      }
      window.location.href = gotoURL;
   }
}

// flip images
function loadImages(){
   var img;
   if (document.images){
      if (!loadedImages) loadedImages = new Array()
      for (var i=0; i < arguments.length; i++){
         img = new Image();
         img.src = '/rsc/' + arguments[i];
         loadedImages[loadedImages.length] = img;
      }
   }   
}

function flip(imgName, imgSrc){
   if (document.images){
      document[imgName].src = imgSrc;
   }
}

function toggle(imgName, state) {
   flip(imgName, '/rsc/toTop' + state + '.gif');
}