/*
Default values of public fields:
allExceptFilter = new Array("A.*", 
														"BUTTON.*", 
														"IMG.*", 
														"INPUT.*", 
														"OBJECT.*", 
														"OPTION.*", 
														"SELECT.*", 
														"TEXTAREA.*");
noneExceptFilter = new Array();
menuClassName = "menu_parent";
menuItemClassName = "menu_item";
menuItemClassNameOver = "menu_itemOver";
sepClassName = "menu_separator";
arrowClassName = "menu_arrow";
arrowClassNameOver = "menu_arrowOver";
menuMode = "cursor";
menuBorderWidth = 0;
menuBarClassName = "menuBar";
menuBarItemClassName = "menuBar_item";
menuBarItemClassNameOver = "menuBar_itemOver";
menuBarItemClassNameClick = "menuBar_itemClick";
menuBarDragClassName = "menuBar_drag";
menuBarMode = "absolute";
menuBarActivateMode = "click";
menuBarBorderWidth = 0;
*/

// Uncomment any of the following public properties to override the default value.

//var noneExceptFilter = new Array();
var menuClassName = "menu_parent";
var menuItemClassName = "menu_item";
var menuItemClassNameOver = "menu_itemOver";
var sepClassName = "menu_separator";
var arrowClassName = "menu_arrow";
var arrowClassNameOver = "menu_arrowOver";
//var menuMode = "cursor";
var menuBorderWidth = 0;
var menuBarClassName = "menuBar";
var menuBarItemClassName = "menuBar_item";
var menuBarItemClassNameOver = "menuBar_itemOver";
var menuBarItemClassNameClick = "menuBar_itemClick";
var menuBarDragClassName = "menuBar_drag";
//var menuBarMode = "absolute";
//var menuBarActivateMode = "click";
var menuBarBorderWidth = 0;
var autoHideTimeLimit = 500;

//-----------------------------------------------------------------------------------------------------

/*

  jsDOMenu Version 1.4 BETA
  Copyright (C) 2003 - 2005 Toh Zhiqiang
  Released on ??? 2005
  jsDOMenu is distributed under the terms of the GNU GPL license
  Refer to license.txt for more informatiom
  
  ----
  Brady Clifford's adjustments
  Line 1005: //Fixes with MenuItem width problem
  
  	if (isIE()) 
		temElm.style.width =  this.menuObj.style.width;

*/

/*
Determine whether the browser is IE5.0.
*/
function isIE50() { // Private method
  return isIE5() && !isIE55();
}

/*
Determine whether the browser is IE5.5.
*/
function isIE55() { // Private method
  return navigator.userAgent.indexOf("MSIE 5.5") > -1;
}

/*
Determine whether the browser is IE5.0 or IE5.5.
*/
function isIE5() { // Private method
  return navigator.userAgent.indexOf("MSIE 5") > -1;
}

/*
Determine whether the browser is IE6.
*/
function isIE6() { // Private method
  return navigator.userAgent.indexOf("MSIE 6") > -1 && navigator.userAgent.indexOf("Opera") == -1;
}
function isIE7() { // Private method
  return navigator.userAgent.indexOf("MSIE 7") > -1 && navigator.userAgent.indexOf("Opera") == -1;
}
/*
Determine whether the browser is IE.
*/
function isIE() { // Private method
  return isIE5() || isIE6();
}

/*
Determine whether the browser is Opera.
*/
function isOpera() { // Private method
  return navigator.userAgent.indexOf("Opera") > -1;
}

/* 
Determine whether the browser is Safari.
*/
function isSafari() { // Private method
  return navigator.userAgent.indexOf("Safari") > -1;
}

/*
Determine the page render mode.

0: Quirks mode.
1: Strict mode.
*/
function getPageMode() { // Private method
  if (document.compatMode) {
    switch (document.compatMode) {
      case "BackCompat":
        return 0;
      case "CSS1Compat":
        return 1;
      case "QuirksMode":
        return 0;
    }
  }
  else {
    if (ie5) {
      return 0;
    }
    if (safari) {
      return 1;
    }
  }
  return 0;
}

/*
Alias for document.getElementById().
*/
function getElmId(id) { // Private method
  return document.getElementById(id);
}

/*
Alias for document.createElement().
*/
function createElm(tagName) { // Private method
  return document.createElement(tagName);
}

/*
Get the x-coordinate of the cursor position relative to the window.
*/
function getX(e) { // Private method
  if (!e) {
    var e = window.event;
  }
  if (safari) {
    return e.clientX - getScrollLeft();
  }
  else {
    return e.clientX;
  }
}

/*
Get the y-coordinate of the cursor position relative to the window.
*/
function getY(e) { // Private method
  if (!e) {
    var e = window.event;
  }
  if (safari) {
    return e.clientY - getScrollTop();
  }
  else {
    return e.clientY;
  }
}

/*
Get the left property of obj.
*/
function getLeft(obj) {
  var currentLeft = 0;
  if (obj.offsetParent) {
    while (obj.offsetParent) {
      currentLeft += obj.offsetLeft;
      obj = obj.offsetParent;
    }
  }
  return currentLeft;
}

/*
Get the top property of obj.
*/
function getTop(obj) {
  var currentTop = 0;
  if (obj.offsetParent) {
    while (obj.offsetParent) {
      currentTop += obj.offsetTop;
      obj = obj.offsetParent;
    }
  }
  return currentTop;
}

/*
Get the scrollLeft property.
*/
function getScrollLeft() { // Private method
  switch (pageMode) {
    case 0:
      return document.body.scrollLeft;
    case 1:
      if (document.documentElement && document.documentElement.scrollLeft > 0) {
        return document.documentElement.scrollLeft;
      }
      else {
        return document.body.scrollLeft;
      }
  }
}

/*
Get the scrollTop property.
*/
function getScrollTop() { // Private method
  switch (pageMode) {
    case 0:
      return document.body.scrollTop;
    case 1:
      if (document.documentElement && document.documentElement.scrollTop > 0) {
        return document.documentElement.scrollTop;
      }
      else {
        return document.body.scrollTop;
      }
  }
}

/*
Get the clientHeight property.
*/
function getClientHeight() { // Private method
  switch (pageMode) {
    case 0:
      return document.body.clientHeight;
    case 1:
      if (safari) {
        return self.innerHeight;
      }
      else {
        if (!opera && document.documentElement && document.documentElement.clientHeight > 0) {
          return document.documentElement.clientHeight;
        }
        else {
          return document.body.clientHeight;
        }
      }
  }
}

/*
Get the clientWidth property.
*/
function getClientWidth() { // Private method
  switch (pageMode) {
    case 0:
      return document.body.clientWidth;
    case 1:
      if (safari) {
        return self.innerWidth;
      }
      else {
        if (!opera && document.documentElement && document.documentElement.clientWidth > 0) {
          return document.documentElement.clientWidth;
        }
        else {
          return document.body.clientWidth;
        }
      }
  }
}

/*
Convert the string into lower camel case.
*/
function toCamelCase(input) { // Private method
  var inputArray = input.split("-");
  if (inputArray.length == 1) {
    return inputArray[0];
  }
  else {
    var camelCase = inputArray[0];
    for (var i = 1, len = inputArray.length; i < len; i++) {
      camelCase += inputArray[i].charAt(0).toUpperCase() + inputArray[i].substring(1);
    }
    return camelCase;
  }
}

/*
Get the value of the property of the object.
*/
function getPropVal(obj, propertyName) { // Private method
  var propertyValue = obj.style[toCamelCase(propertyName)];
  if (propertyValue) {
    return propertyValue;
  }
  else {
    if (document.defaultView && document.defaultView.getComputedStyle) {
      return document.defaultView.getComputedStyle(obj, null).getPropertyValue(propertyName);
    }
    else {
      if (obj.currentStyle) {
        return obj.currentStyle[toCamelCase(propertyName)];
      }
      else {
        return null;
      }
    }
  }
}

/*
Get the integer value of the property of the object.
*/
function getPropIntVal(obj, propertyName) { // Private method
  return parseInt(getPropVal(obj, propertyName));
}

/*
Get the left position of the pop-up menu.
*/
function getMainMenuLeftPos(menuObj, x) { // Private method
  if (x + menuObj.offsetWidth <= getClientWidth()) {
    return x;
  }
  else {
    var pos = x - menuObj.offsetWidth;
    return pos < 0 ? 0 : pos;
    /*
    if (newPos < 0) {
      return 0;
    }
    else {
      return newPos;
    }
    */
  }
}

/*
Get the top position of the pop-up menu.
*/
function getMainMenuTopPos(menuObj, y) { // Private method
  if (y + menuObj.offsetHeight <= getClientHeight()) {
    return y;
  }
  else {
    var pos = y - menuObj.offsetHeight;
    return pos < 0 ? 0 : pos;
    /*
    if (newPos < 0) {
      return 0;
    }
    else {
      return newPos;
    }
    */
  }
}

/*
Get the left position of the submenu.
*/
function getSubMenuLeftPos(menuObj, x, offset) { // Private method
  if (x + menuObj.offsetWidth - 2 <= getClientWidth()) {
    return x - 2;
  }
  else {
    var pos = x - menuObj.offsetWidth - offset;
    return pos < 0 ? 0 : pos;
    /*
    if (newPos < 0) {
      return 0;
    }
    else {
      return newPos;
    }
    */
  }
}

/*
Get the top position of the submenu.
*/
function getSubMenuTopPos(menuObj, y, offset) { // Private method
  var top = getPropIntVal(menuObj, btw);
  var bottom = getPropIntVal(menuObj, bbw);
  if (y + menuObj.offsetHeight <= getClientHeight()) {
    if (safari) {
      return y - top;
    }
    else {
      return y;
    }
  }
  else {
    var pos;
    if (safari) {
      pos = y - menuObj.offsetHeight + offset + bottom;
      //return y - menuObj.offsetHeight + offset + bottom;
    }
    else {
      pos = y - menuObj.offsetHeight + offset + top + bottom;
      //return y - menuObj.offsetHeight + offset + top + bottom;
    }
    return pos < 0 ? 0 : pos;
    /*
    if (newPos < 0) {
      return 0;
    }
    else {
      return newPos;
    }
    */
  }
}

/*
Pop up the submenu.
*/
function popUpSubMenu(menuItemObj) { // Private method
  var parentMenuObj = menuItemObj.parent.menuObj;
  var menuObj = menuItemObj.subMenu.menuObj;
  var x;
  var y;
  if (parentMenuObj.style.position == "fixed") {
    x = parentMenuObj.offsetLeft + parentMenuObj.offsetWidth - getPropIntVal(parentMenuObj, brw);
    y = parentMenuObj.offsetTop + menuItemObj.offsetTop + getPropIntVal(parentMenuObj, btw) - getPropIntVal(menuObj, btw);
    menuObj.style.position = "absolute";
    menuObj.style.left = getSubMenuLeftPos(menuObj, x, menuItemObj.offsetWidth) + px;
    menuObj.style.top = getSubMenuTopPos(menuObj, y, menuItemObj.offsetHeight) + px;
    menuObj.style.position = "fixed";
  }
  else {
    if (parentMenuObj.mode == "static" && !ie50) {
      x = getLeft(menuItemObj) + parentMenuObj.offsetWidth - getPropIntVal(parentMenuObj, blw) - getPropIntVal(parentMenuObj, brw) - getScrollLeft();
      y = getTop(menuItemObj) - getPropIntVal(menuObj, btw) - getScrollTop();
      if (ie55 || ie6) {
        x += getPropIntVal(parentMenuObj, blw);
        y += getPropIntVal(parentMenuObj, btw);
      }
      //else {
        //x = getLeft(menuItemObj) + parentMenuObj.offsetWidth - getPropIntVal(parentMenuObj, blw) - getPropIntVal(parentMenuObj, brw) - getScrollLeft();
        //y = getTop(menuItemObj) - getPropIntVal(menuObj, btw) - getScrollTop();
      //}
      /*
      x = menuItemObj.offsetLeft + parentMenuObj.offsetWidth - getPropIntVal(parentMenuObj, blw) - getPropIntVal(parentMenuObj, brw) - getScrollLeft();
      y = menuItemObj.offsetTop - getPropIntVal(menuObj, btw) - getScrollTop();
      if (ie55 || ie6) {
          x += getPropIntVal(parentMenuObj, blw);
          y += getPropIntVal(parentMenuObj, btw);
      }
      if (safari) {
        x += 8;
        y += getPropIntVal(menuObj, btw) + 13;
      }
      */
      menuObj.style.left = (getSubMenuLeftPos(menuObj, x, menuItemObj.offsetWidth) + getScrollLeft()) + px;
      menuObj.style.top = (getSubMenuTopPos(menuObj, y, menuItemObj.offsetHeight) + getScrollTop()) + px;
    }
    else {
      x = parentMenuObj.offsetLeft + parentMenuObj.offsetWidth - getPropIntVal(parentMenuObj, brw) - getScrollLeft();
      y = parentMenuObj.offsetTop + menuItemObj.offsetTop + getPropIntVal(parentMenuObj, btw) - getPropIntVal(menuObj, btw) - getScrollTop();
      menuObj.style.left = (getSubMenuLeftPos(menuObj, x, menuItemObj.offsetWidth) + getScrollLeft()) + px;
      menuObj.style.top = (getSubMenuTopPos(menuObj, y, menuItemObj.offsetHeight) + getScrollTop()) + px;
    }
  }
  if (ie && menuObj.mode == "fixed") {
    menuObj.initialLeft = parseInt(menuObj.style.left) - getScrollLeft();
    menuObj.initialTop = parseInt(menuObj.style.top) - getScrollTop();
  }
  menuObj.style.visibility = "visible";
}

/*
Pop up the main menu.
*/
function popUpMainMenu(menuObj, e) { // Private method
  menuObj.style.left = (getMainMenuLeftPos(menuObj, getX(e)) + getScrollLeft()) + px;
  menuObj.style.top = (getMainMenuTopPos(menuObj, getY(e)) + getScrollTop()) + px;
  var display = popUpMenuObj.menuObj.style.display;
  popUpMenuObj.menuObj.style.display = "none";
  popUpMenuObj.menuObj.style.visibility = "visible";
  popUpMenuObj.menuObj.style.display = display;
}

/*
Deactivate the menu items.
*/
function deactivateMenuItems(menuObj) { // Private method
  var i = menuObj.childNodes.length - 1;
  if (i > -1) {
    do {
    //for (var i = 0, len = menuObj.childNodes.length; i < len; i++) {
      if (menuObj.childNodes[i].enabled) {
        menuObj.childNodes[i].className = menuObj.childNodes[i].itemClassName;
        if (menuObj.childNodes[i].subMenu) {
          menuObj.childNodes[i].arrowObj.className = menuObj.childNodes[i].arrowClassName;
        }
        if (menuObj.childNodes[i].iconObj) {
          menuObj.childNodes[i].iconObj.className = menuObj.childNodes[i].iconClassName;
        }
      }
    } while (i--);
  }
}

/*
Deactivate all menus and menu bars.
*/
function deactivate() { // Private method
  hideAllMenus();
  if (typeof(hideMenuBarMenus) == "function") {
    hideMenuBarMenus();
  }
}

/*
Event handler that handles onmouseover event of the menu item.
*/
function menuItemOver(e) { // Private method
  if (intervalId) {
    clearTimeout(intervalId);
  }
  var previousItem = this.parent.previousItem;
  if (previousItem) {
    if (previousItem.className == previousItem.itemClassNameOver) {
      previousItem.className = previousItem.itemClassName;
    }
    if (previousItem.subMenu) {
      previousItem.className = previousItem.itemClassName;
      previousItem.arrowObj.className = previousItem.arrowClassName;
      if (previousItem.iconObj) {
        previousItem.iconObj.className = previousItem.iconClassName;
      }
    }
    var menuObj = getElmId(this.parent.menuObj.id);
    var i = menuObj.childNodes.length - 1;
    if (i > -1) {
      do {
      //for (var i = menuObj.childNodes.length - 1; i > -1; i--) {
      //for (var i = 0, len = menuObj.childNodes.length; i < len; i++) {
        if (menuObj.childNodes[i].enabled && menuObj.childNodes[i].subMenu) {
          hideMenus(menuObj.childNodes[i].subMenu.menuObj);
        }
      } while (i--);
    }
  }
  if (this.enabled) {
    this.className = this.itemClassNameOver;
    if (this.subMenu) {
      this.arrowObj.className = this.arrowClassNameOver;
      popUpSubMenu(this);
    }
    if (this.iconObj && this.iconClassNameOver) {
      this.iconObj.className = this.iconClassNameOver;
    }
  }
  this.parent.previousItem = this;
}

/*
Event handler that handles onclick event of the menu item.
*/
function menuItemClick(e) { // Private method
  if (this.enabled && this.actionOnClick) {
    var action = this.actionOnClick;
    if (action.indexOf("link:") == 0) {
      location.href = action.substr(5);
    }
    else {
      if (action.indexOf("code:") == 0) {
        eval(action.substr(5));
      }
      else {
        location.href = action;
      }
    }
  }
  if (!e) {
    var e = window.event;
    e.cancelBubble = true;
  }
  if (e.stopPropagation) {
    e.stopPropagation();
  }
  if (this.parent.menuObj.mode == "cursor") {
    hideCursorMenus();
  }
  if (this.parent.menuObj.mode == "absolute" || this.parent.menuObj.mode == "fixed") {
    hideVisibleMenus();
    if (typeof(hideMenuBarMenus) == "function") {
      hideMenuBarMenus();
    }
  }
}

/*
Event handler that handles onmouseout event of the menu item.
*/
function menuItemOut() { // Private method
  intervalId = setTimeout("deactivate()", autoHideTimeLimit);
  if (this.enabled) {
    if (!(this.subMenu && this.subMenu.menuObj.style.visibility == "visible")) {
      this.className = this.itemClassName;
    }
    if (this.subMenu) {
      if (this.subMenu.menuObj.style.visibility == "visible") {
        this.arrowObj.className = this.arrowClassNameOver;
        if (this.iconObj && this.iconClassNameOver) {
          this.iconObj.className = this.iconClassNameOver;
        }
      }
    }
    else {
      if (this.iconObj) {
        this.iconObj.className = this.iconClassName;
      }
    }
  }
}

/*
Determine whether any of the tag name/tag id pair in the filter matches the tagName/tagId pair.
*/
function findMatch(tagName, tagId, filter) { // Private method
  for (var i = 0, len = filter.length; i < len; i++) {
    var filterArray = filter[i].toLowerCase().split(".");
    if ((filterArray[0] == "*" && filterArray[1] == "*") || 
        (filterArray[0] == "*" && filterArray[1] == tagId) || 
        (filterArray[0] == tagName && filterArray[1] == "*") || 
        (filterArray[0] == tagName && filterArray[1] == tagId)) {
      return true;
    }
  }
  return false;
}

/*
Determine whether to show or hide the menu.
*/
function canShowMenu(tagName, tagId, allExcept, noneExcept) { // Private method
  if (allExcept.length > 0) {
    return (!findMatch(tagName.toLowerCase(), tagId.toLowerCase(), allExcept));
  }
  else {
    if (noneExcept.length > 0) {
      return findMatch(tagName.toLowerCase(), tagId.toLowerCase(), noneExcept);
    }
    else {
      return true;
    }
  }
}

/*
Shows/Hides the pop-up menu.
*/
function activatePopUpMenu(e) { // Private method
  if (!popUpMenuObj) {
    return;
  }
  var state = popUpMenuObj.menuObj.style.visibility;
  if (state == "visible") {
    var i = menuCount;
    if (i > 0) {
      do {
      //for (var i = 1; i <= menuCount; i++) {
        var menuObj = getElmId("DOMenu" + i);
        if (menuObj.mode == "cursor") {
          menuObj.style.visibility = "hidden";
          menuObj.style.left = "0px";
          menuObj.style.top = "0px";
          menuObj.initialLeft = 0;
          menuObj.initialTop = 0;
          deactivateMenuItems(menuObj);
        }
      } while (--i);
    }
  }
  else {
    if (!e) {
      var e = window.event;
    }
    var targetElm = e.target ? e.target : e.srcElement;
    if (targetElm.nodeType == 3) {
      targetElm = targetElm.parentNode;
    }
    if (canShowMenu(targetElm.tagName, targetElm.id, popUpMenuObj.menuObj.allExceptFilter, popUpMenuObj.menuObj.noneExceptFilter)) {
      popUpMainMenu(popUpMenuObj.menuObj, e);
      intervalId = setTimeout("deactivate()", autoHideTimeLimit);
    }
  }
}

/*
Event handler that handles left click event.
*/
function leftClickHandler(e) { // Private method
  if (getX(e) > getClientWidth() || getY(e) > getClientHeight()) {
    return;
  }
  if (!e) {
    var e = window.event;
  }
  if (e.button && e.button == 2) {
    return;
  }
  hideVisibleMenus();
  if (typeof(hideMenuBarMenus) == "function") {
    hideMenuBarMenus();
  }
  if (popUpMenuObj) {
    var state = popUpMenuObj.menuObj.style.visibility;
    if (state == "visible" && (hideValue == 0 || hideValue == 2)) {
      activatePopUpMenu(e);
    }
    if ((state == "hidden" || state == "") && (showValue == 0 || showValue == 2)) {
      activatePopUpMenu(e);
    }
  }
}

/*
Event handler that handles right click event.
*/
function rightClickHandler(e) { // Private method
  if (getX(e) > getClientWidth() || getY(e) > getClientHeight()) {
    return;
  }
  hideVisibleMenus();
  if (typeof(hideMenuBarMenus) == "function") {
    hideMenuBarMenus();
  }
  if (popUpMenuObj) {
    var state = popUpMenuObj.menuObj.style.visibility;
    if (state == "visible" && (hideValue == 1 || hideValue == 2)) {
      activatePopUpMenu(e);
      return false;
    }
    if ((state == "hidden" || state == "") && (showValue == 1 || showValue == 2)) {
      activatePopUpMenu(e);
      return false;
    }
  }
}

/*
Event handler that handles scroll event.
*/
function scrollHandler() { // Private method
  var i = menuCount;
  if (i > 0) {
    do {
    //for (var i = 1; i <= menuCount; i++) {
      var menuObj = getElmId("DOMenu" + i);
      if (menuObj.mode == "fixed") {
        menuObj.style.left = (menuObj.initialLeft + getScrollLeft()) + px;
        menuObj.style.top = (menuObj.initialTop + getScrollTop()) + px;
      }
    } while (--i);
  }
  if (typeof(menuBarScrollHandler) == "function") {
    menuBarScrollHandler();
  }
}

/*
Remove all menus events.
*/
function removeMenuEvents(menuObj) { // Private method
  var fields = new Array("setClassName", 
                         "setMode", 
                         "setAlwaysVisible", 
                         "show", 
                         "hide", 
                         "setX", 
                         "setY", 
                         "moveTo", 
                         "moveBy", 
                         "setAllExceptFilter", 
                         "setNoneExceptFilter", 
                         "setBorderWidth", 
                         "previousItem");
  var i = fields.length - 1;
  do {
    /*
    if (fields[i] == "previousItem" && menuObj[fields[i]]) {
      alert(menuObj[fields[i]].id);
    }
    */
    menuObj[fields[i]] = null;
  } while (i--);
}

/*
Remove all menu/menu bar items events.
*/
function removeItemEvents(obj) { // Private method
  var fields = new Array("onmouseover", 
                         "onclick", 
                         "onmouseout", 
                         "onmousedown", 
                         "onmouseup", 
                         "setClassName", 
                         "setClassNameOver", 
                         "setClassNameClick", 
                         "setDisplayText", 
                         "setMenu", 
                         "setArrowClassName", 
                         "setArrowClassNameOver", 
                         "setIconClassName", 
                         "setIconClassNameOver", 
                         "setIconClassNameClick", 
                         "subMenu", 
                         "parent", 
                         "menu");
  var i = obj.childNodes.length - 1;
  var j;
  if (i > -1) {
    do {
      j = fields.length - 1;
      do {
        obj.childNodes[i][fields[j]] = null;
      } while (j--);
    } while (i--);
  }
}

/*
Release the memory to minimize memory leaks.
*/
function releaseMemory() { // Private method
  //var T1 = (new Date()).getTime(); // DEBUG.PROFILE
  
  var i = menuCount;
  var menuObj;
  if (i > 0) {
    do {
      menuObj = getElmId("DOMenu" + i);
      removeMenuEvents(menuObj.parent);
      removeItemEvents(menuObj);
      menuObj.parent = null;
      document.body.removeChild(menuObj);
    } while (--i);
  }
  i = staticMenuId.length - 1;
  if (i > -1) {
    do {
      menuObj = getElmId(staticMenuId[i]);
      removeMenuEvents(menuObj.parent);
      removeItemEvents(menuObj);
      menuObj.parent = null;
    } while (i--);
  }
  if (typeof(menuBarReleaseMemory) == "function") {
    menuBarReleaseMemory();
  }
  
  //alert(((new Date()).getTime() - T1) / 1000); // DEBUG.PROFILE
}

/*
Show the icon before the display text.
Arguments:
className          : Required. String that specifies the CSS class selector for the icon.
classNameOver      : Optional. String that specifies the CSS class selector for the icon when 
                     the cursor is over the menu item.
*/
function showMenuItemIcon() { // Public method
  var iconElm = createElm("span");
  iconElm.id = this.id + "Icon";
  iconElm.className = arguments[0];
  this.insertBefore(iconElm, this.firstChild);
  var height;
  if (ie) {
    height = getPropIntVal(iconElm, "height");
  }
  else {
    height = iconElm.offsetHeight;
  }
  iconElm.style.top = Math.floor((this.offsetHeight - height) / 2) + px;
  if (ie) {
    var left = getPropIntVal(iconElm, "left");
    if (ie55 || ie6) {
      iconElm.style.left = (left - getPropIntVal(this, "padding-left")) + px;
    }
    else {
      iconElm.style.left = left + px;
    }
  }
  this.iconClassName = iconElm.className;
  if (arguments.length > 1 && arguments[1].length > 0) {
    this.iconClassNameOver = arguments[1];
  }
  this.iconObj = iconElm;
  this.setIconClassName = function(className) { // Public method
    this.iconClassName = className;
    this.iconObj.className = this.iconClassName;
  };
  this.setIconClassNameOver = function(classNameOver) { // Public method
    this.iconClassNameOver = classNameOver;
  };
  iconElm = null;
}

/*
Set the menu object that will show up when the cursor is over the menu item object.
Argument:
menuObj            : Required. Menu object that will show up when the cursor is over the 
                     menu item object.
*/
function setSubMenu(menuObj) { // Public method
  var arrowElm = createElm("div");
  arrowElm.id = this.id + "Arrow";
  arrowElm.className = this.arrowClassName;
  this.appendChild(arrowElm);
  var height;
  if (ie) {
    height = getPropIntVal(arrowElm, "height");
  }
  else {
    height = arrowElm.offsetHeight;
  }
  arrowElm.style.top = Math.floor((this.offsetHeight - height) / 2) + px;
  this.subMenu = menuObj;
  this.arrowObj = arrowElm;
  this.setArrowClassName = function(className) { // Public method
    this.arrowClassName = className;
    this.arrowObj.className = this.arrowClassName;
  };
  this.setArrowClassNameOver = function(classNameOver) { // Public method
    this.arrowClassNameOver = classNameOver;
  };
  menuObj.menuObj.style.zIndex = this.parent.menuObj.level + 1;
  menuObj.menuObj.level = this.parent.menuObj.level + 1;
  arrowElm = null;
}

/*
Add a new menu item to the menu.
Argument:
menuItemObj        : Required. Menu item object that is going to be added to the menu object.
*/
function addMenuItem(menuItemObj) { // Public method
  if (menuItemObj.displayText == "-") {
    var hrElm = createElm("hr");
    var itemElm = createElm("div");
    itemElm.appendChild(hrElm);
    itemElm.id = menuItemObj.id;
    if (menuItemObj.className.length > 0) {
      itemElm.sepClassName = menuItemObj.className;
    }
    else {
      itemElm.sepClassName = menuItemObj.sepClassName;
    }
    itemElm.className = itemElm.sepClassName;
    this.menuObj.appendChild(itemElm);
    itemElm.parent = this;
    itemElm.setClassName = function(className) { // Public method
      this.sepClassName = className;
      this.className = this.sepClassName;
    };
    itemElm.onclick = function(e) { // Private method
      if (!e) {
        var e = window.event;
        e.cancelBubble = true;
      }
      if (e.stopPropagation) {
        e.stopPropagation();
      }
    };
    itemElm.onmouseover = menuItemOver;
    if (menuItemObj.itemName.length > 0) {
      this.items[menuItemObj.itemName] = itemElm;
    }
    else {
      this.items[this.items.length] = itemElm;
    }
    hrElm = null;
  }
  else {
    var itemElm = createElm("div");
    itemElm.id = menuItemObj.id;
    itemElm.actionOnClick = menuItemObj.actionOnClick;
    itemElm.enabled = menuItemObj.enabled;
    itemElm.itemClassName = menuItemObj.className;
    itemElm.itemClassNameOver = menuItemObj.classNameOver;
    itemElm.className = itemElm.itemClassName;
    itemElm.subMenu = null;
    itemElm.arrowClassName = arrowClassName;
    itemElm.arrowClassNameOver = arrowClassNameOver;
    //var textNode = document.createTextNode(menuItemObj.displayText);
    var textElm;
    if (typeof(itemElm.innerHTML) != "undefined") {
      textElm = createElm("span");
      textElm.innerHTML = menuItemObj.displayText;
    }
    else {
      textElm = document.createTextNode(menuItemObj.displayText);
    }
    itemElm.appendChild(textElm);
    //itemElm.appendChild(textNode);
    this.menuObj.appendChild(itemElm);
    itemElm.parent = this;
    itemElm.setClassName = function(className) { // Public method
      this.itemClassName = className;
      this.className = this.itemClassName;
    };
    itemElm.setClassNameOver = function(classNameOver) { // Public method
      this.itemClassNameOver = classNameOver;
    };
    itemElm.setDisplayText = function(text) { // Public method
      var index = this.childNodes[0].id.indexOf("Icon") > -1 ? 1 : 0;
      var node = this.childNodes[index];
      if (typeof(node.innerHTML != "undefined")) {
        node.innerHTML = text;
      }
      else {
        node.nodeValue = text;
      }
      /*
      if (this.childNodes[0].id.indexOf("Icon") > -1) {
        index = 1;
        //this.childNodes[1].nodeValue = text;
      }
      else {
        index = 0;
        //this.childNodes[0].nodeValue = text;
      }
      */
    };
    itemElm.setSubMenu = setSubMenu;
    itemElm.showIcon = showMenuItemIcon;
    itemElm.onmouseover = menuItemOver;
    itemElm.onclick = menuItemClick;
    itemElm.onmouseout = menuItemOut;
	
	if (isIE()) 
		itemElm.style.width =  this.menuObj.style.width;
		
    if (menuItemObj.itemName.length > 0) {
      this.items[menuItemObj.itemName] = itemElm;
    }
    else {
      this.items[this.items.length] = itemElm;
    }
    textElm = null;
  }
  itemElm = null;
}

/*
Create a new menu item object.
Arguments:
displayText        : Required. String that specifies the text to be displayed on the menu item. If 
                     displayText = "-", a menu separator will be created instead.
itemName           : Optional. String that specifies the name of the menu item. Defaults to "" (no 
                     name).
actionOnClick      : Optional. String that specifies the action to be done when the menu item is 
                     being clicked. Defaults to "" (no action).
enabled            : Optional. Boolean that specifies whether the menu item is enabled/disabled. 
                     Defaults to true.
className          : Optional. String that specifies the CSS class selector for the menu item. 
                     Defaults to "jsdomenuitem".
classNameOver      : Optional. String that specifies the CSS class selector for the menu item when 
                     the cursor is over it. Defaults to "jsdomenuitemover".
*/
function menuItem() { // Public method
  this.displayText = arguments[0];
  if (this.displayText == "-") {
    this.id = "menuSep" + (++sepCount);
    this.className = sepClassName;
  }
  else {
    this.id = "menuItem" + (++menuItemCount);
    this.className = menuItemClassName;
  }
  this.itemName = "";
  this.actionOnClick = "";
  this.enabled = true;
  this.classNameOver = menuItemClassNameOver;
  this.sepClassName = sepClassName;
  var len = arguments.length;
  if (len > 1 && arguments[1].length > 0) {
    this.itemName = arguments[1];
  }
  if (len > 2 && arguments[2].length > 0) {
    this.actionOnClick = arguments[2];
  }
  if (len > 3 && typeof(arguments[3]) == "boolean") {
    this.enabled = arguments[3];
  }
  if (len > 4 && arguments[4].length > 0) {
    if (arguments[4] == "-") {
      this.className = arguments[4];
      this.sepClassName = arguments[4];
    }
    else {
      this.className = arguments[4];
    }
  }
  if (len > 5 && arguments[5].length > 0) {
    this.classNameOver = arguments[5];
  }
}

/*
Create a new menu object.
Arguments:
width              : Required. Integer that specifies the width of the menu.
mode               : Optional. String that specifies the mode of the menu. Defaults to "cursor".
id                 : Optional, except when mode = "static". String that specifies the id of 
                     the element that will contain the menu. This argument is required when 
                     mode = "static".
alwaysVisible      : Optional. Boolean that specifies whether the menu is always visible. Defaults 
                     to false.
className          : Optional. String that specifies the CSS class selector for the menu. Defaults 
                     to "jsdomenudiv".
*/
function jsDOMenu() { // Public method
  this.items = new Array();
  var menuElm;
  var len = arguments.length;
  if (len > 2 && arguments[2].length > 0 && arguments[1] == "static") {
    menuElm = getElmId(arguments[2]);
    if (!menuElm) {
      return;
    }
    staticMenuId[staticMenuId.length] = arguments[2];
  }
  else {
    menuElm = createElm("div");
    menuElm.id = "DOMenu" + (++menuCount);
  }
  menuElm.level = 10;
  menuElm.previousItem = null;
  menuElm.allExceptFilter = allExceptFilter;
  menuElm.noneExceptFilter = noneExceptFilter;
  menuElm.className = menuClassName;
  menuElm.mode = menuMode;
  menuElm.alwaysVisible = false;
  menuElm.initialLeft = 0;
  menuElm.initialTop = 0;
  if (len > 1 && arguments[1].length > 0) {
    switch (arguments[1]) {
      case "cursor":
        menuElm.style.position = "absolute";
        menuElm.mode = "cursor";
        break;
      case "absolute":
        menuElm.style.position = "absolute";
        menuElm.mode = "absolute";
        break;
      case "fixed":
        if (ie) {
          menuElm.style.position = "absolute";
        }
        else {
          menuElm.style.position = "fixed";
        }
        menuElm.mode = "fixed";
        break;
      case "static":
        menuElm.style.position = "static";
        menuElm.mode = "static";
        break;
    }
  }
  if (len > 3 && typeof(arguments[3]) == "boolean") {
    menuElm.alwaysVisible = arguments[3];
  }
  if (len > 4 && arguments[4].length > 0) {
    menuElm.className = arguments[4];
  }
  menuElm.style.width = arguments[0] + px;
  menuElm.style.left = "0px";
  menuElm.style.top = "0px";
  if (menuElm.mode != "static") {
    document.body.appendChild(menuElm);
  }
  if (!getPropVal(menuElm, blw)) {
    menuElm.style.borderWidth = menuBorderWidth + px;
  }
  this.menuObj = menuElm;
  this.menuObj.parent = this;
  this.addMenuItem = addMenuItem;
  this.setClassName = function(className) { // Public method
    this.menuObj.className = className;
  };
  this.setMode = function(mode) { // Public method
    switch (mode) {
      case "cursor":
        this.menuObj.style.position = "absolute";
        this.menuObj.mode = "cursor";
        break;
      case "absolute":
        this.menuObj.style.position = "absolute";
        this.menuObj.mode = "absolute";
        this.menuObj.initialLeft = parseInt(this.menuObj.style.left);
        this.menuObj.initialTop = parseInt(this.menuObj.style.top);
        break;
      case "fixed":
        if (ie) {
          this.menuObj.style.position = "absolute";
          this.menuObj.initialLeft = parseInt(this.menuObj.style.left);
          this.menuObj.initialTop = parseInt(this.menuObj.style.top);
        }
        else {
          this.menuObj.style.position = "fixed";
        }
        this.menuObj.mode = "fixed";
        break;
    }
  };
  this.setAlwaysVisible = function(alwaysVisible) { // Public method
    if (typeof(alwaysVisible) == "boolean") {
      this.menuObj.alwaysVisible = alwaysVisible;
    }
  };
  this.show = function() { // Public method
    this.menuObj.style.visibility = "visible";
  };
  this.hide = function() { // Public method
    this.menuObj.style.visibility = "hidden";
    if (this.menuObj.mode == "cursor") {
      this.menuObj.style.left = "0px";
      this.menuObj.style.top = "0px";
      this.menuObj.initialLeft = 0;
      this.menuObj.initialTop = 0;
    }
  };
  this.setX = function(x) { // Public method
    this.menuObj.initialLeft = x;
    this.menuObj.style.left = x + px;
  };
  this.setY = function(y) { // Public method
    this.menuObj.initialTop = y;
    this.menuObj.style.top = y + px;
  };
  this.moveTo = function(x, y) { // Public method
    this.menuObj.initialLeft = x;
    this.menuObj.initialTop = y;
    this.menuObj.style.left = x + px;
    this.menuObj.style.top = y + px;
  };
  this.moveBy = function(x, y) { // Public method
    var left = parseInt(this.menuObj.style.left);
    var top = parseInt(this.menuObj.style.top);
    this.menuObj.initialLeft = left + x;
    this.menuObj.initialTop = top + y;
    this.menuObj.style.left = (left + x) + px;
    this.menuObj.style.top = (top + y) + px;
  };
  this.setAllExceptFilter = function(filter) { // Public method
    this.menuObj.allExceptFilter = filter;
    this.menuObj.noneExceptFilter = new Array();
  };
  this.setNoneExceptFilter = function(filter) { // Public method
    this.menuObj.noneExceptFilter = filter;
    this.menuObj.allExceptFilter = new Array();
  };
  this.setBorderWidth = function(width) { // Public method
    this.menuObj.style.borderWidth = width + px;
  };
  menuElm = null;
}

/*
Specifies how the pop-up menu shows/hide.
Arguments:
showValue          : Required. Integer that specifies how the menu shows.
hideValue          : Optional. Integer that specifies how the menu hides. If not specified, the 
                     menu shows/hides in the same manner.

0: Shows/Hides the menu by left click only.
1: Shows/Hides the menu by right click only.
2: Shows/Hides the menu by left or right click.
*/
function activatePopUpMenuBy() { // Public method
  showValue = typeof(arguments[0]) == "number" && arguments[0] > -1 ? arguments[0] : 0;
  if (arguments.length > 1) {
    hideValue = typeof(arguments[1]) == "number" && arguments[1] > -1 ? arguments[1] : 0;
  }
  else {
    hideValue = showValue;
  }
  if (showValue == 1 || showValue == 2 || hideValue == 1 || hideValue == 2) {
    document.oncontextmenu = rightClickHandler;
  }
}

/*
Hide all menus, except those with alwaysVisible = true.
*/
function hideAllMenus() { // Public method
  var i = menuCount;
  do {
  //for (var i = 1; i <= menuCount; i++) {
    var menuObj = getElmId("DOMenu" + i);
    if (!menuObj.alwaysVisible) {
      if (menuObj.style.position == "fixed") {
        menuObj.style.position == "absolute";
        menuObj.style.visibility = "hidden";
        menuObj.style.position == "fixed";
      }
      else {
        menuObj.style.visibility = "hidden";
        if (menuObj.mode == "cursor") {
          menuObj.style.left = "0px";
          menuObj.style.top = "0px";
          menuObj.initialLeft = 0;
          menuObj.initialTop = 0;
        }
      }
    }
    deactivateMenuItems(menuObj);
  } while (--i);
  i = staticMenuId.length - 1;
  if (i > -1) {
    do {
    //for (var i = 0, len = staticMenuId.length; i < len; i++) {
      deactivateMenuItems(getElmId(staticMenuId[i]));
    } while (i--);
  }
  if (typeof(staticMenuBarId) == "object") {
    i = staticMenuBarId.length - 1;
    if (i > -1) {
      do {
      //for (var i = 0, len = staticMenuBarId.length; i < len; i++) {
        deactivateMenuBarItems(getElmId(staticMenuBarId[i]));
      } while (i--);
    }
  }
}

/*
Hide all menus with mode = "cursor", except those with alwaysVisible = true.
*/
function hideCursorMenus() { // Public method
  var i = menuCount;
  if (i > 0) {
    do {
    //for (var i = 1; i <= menuCount; i++) {
      var menuObj = getElmId("DOMenu" + i);
      if (menuObj.mode == "cursor" && !menuObj.alwaysVisible) {
        menuObj.style.visibility = "hidden";
        menuObj.style.left = "0px";
        menuObj.style.top = "0px";
        menuObj.initialLeft = 0;
        menuObj.initialTop = 0;
      }
      if (menuObj.mode == "cursor") {
        deactivateMenuItems(menuObj);
      }
    } while (--i);
  }
}

/*
Hide all menus with mode = "absolute" or mode = "fixed" or mode = "static", except those with 
alwaysVisible = true.
*/
function hideVisibleMenus() { // Public method
  var i = menuCount;
  if (i > 0) {
    do {
    //for (var i = 1; i <= menuCount; i++) {
      var menuObj = getElmId("DOMenu" + i);
      if ((menuObj.mode == "absolute" || menuObj.mode == "fixed") && !menuObj.alwaysVisible) {
        if (menuObj.style.position == "fixed") {
          menuObj.style.position = "absolute";
          menuObj.style.visibility = "hidden";
          menuObj.style.position = "fixed";
        }
        else {
          menuObj.style.visibility = "hidden";
          menuObj.style.left = "0px";
          menuObj.style.top = "0px";
          menuObj.initialLeft = 0;
          menuObj.initialTop = 0;
        }
      }
      if (menuObj.mode == "absolute" || menuObj.mode == "fixed") {
        deactivateMenuItems(menuObj);
      }
    } while (--i);
  }
  i = staticMenuId.length - 1;
  if (i > -1) {
    do {
    //for (var i = 0, len = staticMenuId.length; i < len; i++) {
      deactivateMenuItems(getElmId(staticMenuId[i]));
    } while (i--);
  }
  if (typeof(staticMenuBarId) == "object") {
    i = staticMenuBarId.length - 1;
    if (i > -1) {
      do {
      //for (var i = 0, len = staticMenuBarId.length; i < len; i++) {
        deactivateMenuBarItems(getElmId(staticMenuBarId[i]));
      } while (i--);
    }
  }
}

/*
Hide the menu and all its submenus.
Argument:
menuObj            : Required. Menu object that specifies the menu and all its submenus to 
                     be hidden.
*/
function hideMenus(menuObj) { // Public method
  deactivateMenuItems(menuObj);
  var i = menuObj.childNodes.length - 1;
  if (i > -1) {
    do {
    //for (var i = 0, len = menuObj.childNodes.length; i < len; i++) {
      if (menuObj.childNodes[i].enabled && menuObj.childNodes[i].subMenu) {
        hideMenus(menuObj.childNodes[i].subMenu.menuObj);
      }
    } while (i--);
  }
  if (menuObj.style.position == "fixed") {
    menuObj.style.position = "absolute";
    menuObj.style.visibility = "hidden";
    menuObj.style.position = "fixed";
  }
  else {
    menuObj.style.visibility = "hidden";
    menuObj.style.left = "0px";
    menuObj.style.top = "0px";
    menuObj.initialLeft = 0;
    menuObj.initialTop = 0;
  }
}

/*
Set the menu object to be the pop-up menu.
Argument:
menuObj            : Required. Menu object that specifies the pop-up menu.
*/
function setPopUpMenu(menuObj) { // Public method
  popUpMenuObj = menuObj;
}

/*
Check browser compatibility and create the menus.
*/
function initjsDOMenu() { // Public method
  if (document.createElement && document.getElementById) {
    createjsDOMenu();
  }
}

if (typeof(allExceptFilter) == "undefined") {
  var allExceptFilter = new Array("A.*", 
                                  "BUTTON.*", 
                                  "IMG.*", 
                                  "INPUT.*", 
                                  "OBJECT.*", 
                                  "OPTION.*", 
                                  "SELECT.*", 
                                  "TEXTAREA.*"); // Public field
}

if (typeof(noneExceptFilter) == "undefined") {
  var noneExceptFilter = new Array(); // Public field
}

if (typeof(menuClassName) == "undefined") {
  var menuClassName = "jsdomenudiv"; // Public field
}

if (typeof(menuItemClassName) == "undefined") {
  var menuItemClassName = "jsdomenuitem"; // Public field
}

if (typeof(menuItemClassNameOver) == "undefined") {
  var menuItemClassNameOver = "jsdomenuitemover"; // Public field
}

if (typeof(sepClassName) == "undefined") {
  var sepClassName = "jsdomenusep"; // Public field
}

if (typeof(arrowClassName) == "undefined") {
  var arrowClassName = "jsdomenuarrow"; // Public field
}

if (typeof(arrowClassNameOver) == "undefined") {
  var arrowClassNameOver = "jsdomenuarrowover"; // Public field
}

if (typeof(menuMode == "undefined")) {
  var menuMode = "cursor"; // Public field
}

if (typeof(menuBorderWidth) == "undefined") {
  var menuBorderWidth = 2; // Public field
}

if (typeof(autoHideTimeLimit) == "undefined") {
  var autoHideTimeLimit = 100000; // Public field
}

var ie50 = isIE50(); // Private field
var ie55 = isIE55(); // Private field
var ie5 = isIE5(); // Private field
var ie6 = isIE6(); // Private field
var ie = isIE(); // Private field
var opera = isOpera(); // Private field
var safari = isSafari(); // Private field
var pageMode = getPageMode(); // Private field
var px = "px"; // Private field
var btw = "border-top-width"; // Private field
var bbw = "border-bottom-width"; // Private field
var blw = "border-left-width"; // Private field
var brw = "border-right-width"; // Private field
var menuCount = 0; // Private field
var menuItemCount = 0; // Private field
var sepCount = 0; // Private field
var popUpMenuObj = null; // Private field
var showValue = 0; // Private field
var hideValue = 0; // Private field
var staticMenuId = new Array(); // Private field
var intervalId = null; // Private field
document.onclick = leftClickHandler;
if (ie) {
  window.onscroll = scrollHandler;
}
window.onunload = releaseMemory;


















//-----------------------------------------------------------------------------------------------------

/*

  jsDOMenuBar Version 1.2 BETA
  Copyright (C) 2004 - 2005 Toh Zhiqiang
  Released on ??? 2005
  jsDOMenuBar is distributed under the terms of the GNU GPL license
  Refer to license.txt for more informatiom
  
  Brady Clifford's adjustments
  Line 271: Brady Clifford - Allows the menuBarItem to have an action
  
  		if (this.actionOnClick) {
		
			var action = this.actionOnClick;
			
			if (action.indexOf("link:") == 0) {
				location.href = action.substr(5);
			}
			else {
				if (action.indexOf("code:") == 0) {
					eval(action.substr(5));
				}
			  	else {
					location.href = action;
			  	}
			}
		}
		
	Line 1945: Entire function taken out because an error showed up in Internet Explorer

*/

/*
Get the left position of the menu bar menu.
*/
function getMainMenuBarMenuLeftPos(menuBarObj, menuBarItemObj, menuObj, x) { // Private method
  if (x + menuObj.offsetWidth <= getClientWidth()) {
    return x;
  }
  else {
    var pos = x + menuBarItemObj.offsetWidth - menuObj.offsetWidth + getPropIntVal(menuObj, blw) + getPropIntVal(menuObj, brw);
    return pos < 0 ? 0 : pos;
  }
}

/*
Get the top position of the menu bar menu.
*/
function getMainMenuBarMenuTopPos(menuBarObj, menuBarItemObj, menuObj, y) { // Private method
  if (y + menuObj.offsetHeight <= getClientHeight()) {
    return y;
  }
  else {
    /*
    if ((ie55 || ie6) && menuBarObj.mode == "static" && pageMode == 0) {
      y = menuBarObj.offsetTop + menuBarObj.offsetHeight - getScrollTop();
    }
    */
    var pos = y - menuObj.offsetHeight - menuBarObj.offsetHeight;
    return pos < 0 ? 0 : pos;
    /*
    if ((ie55 || ie6) && menuBarObj.mode == "static" && pageMode == 1) {
      
      return menuBarItemObj.offsetTop 
           - menuObj.offsetHeight 
           - getPropIntVal(menuBarObj, pt) 
           + getPropIntVal(menuBarItemObj, pt) 
           + getPropIntVal(menuBarItemObj, btw) 
           - getScrollTop();
      
      return y - menuObj.offsetHeight - menuBarObj.offsetHeight;
    }
    else {
      return y - menuObj.offsetHeight - menuBarObj.offsetHeight;
    }
    */
  }
}

/*
Pop up the menu bar menu.
*/
function popUpMenuBarMenu(menuBarObj, menuBarItemObj, menuObj) { // Private method
  var x;
  var y;
  if (menuBarObj.style.position == "fixed") {
    x = menuBarObj.offsetLeft + menuBarItemObj.offsetLeft + getPropIntVal(menuBarObj, blw) - getPropIntVal(menuObj, blw);
    y = menuBarObj.offsetTop + menuBarObj.offsetHeight;
    if (opera || safari) {
      x -= getPropIntVal(menuBarObj, blw);
    }
    menuObj.style.position = "absolute";
    menuObj.style.left = getMainMenuBarMenuLeftPos(menuBarObj, menuBarItemObj, menuObj, x) + px;
    menuObj.style.top = getMainMenuBarMenuTopPos(menuBarObj, menuBarItemObj, menuObj, y) + px;
    menuObj.style.position = "fixed";
  }
  else {
    if (menuBarObj.mode == "static") {
        x = getLeft(menuBarItemObj) - getPropIntVal(menuObj, blw) - getScrollLeft();
        y = getTop(menuBarObj) + menuBarObj.offsetHeight - getScrollTop();
      if (ie55 || ie6) {
        //x = getLeft(menuBarItemObj) + getPropIntVal(menuBarObj, blw) - getPropIntVal(menuObj, blw) - getScrollLeft();  //TODO
        x += getPropIntVal(menuBarObj, blw);
        y = getTop(menuBarItemObj) + menuBarItemObj.offsetHeight + getPropIntVal(menuBarObj, btw) + getPropIntVal(menuBarObj, bbw) - getScrollTop();
      }
      /*
      else {
        x = getLeft(menuBarItemObj) - getPropIntVal(menuObj, blw) - getScrollLeft();
        //x -= getPropIntVal(menuBarObj, blw);
        y = getTop(menuBarObj) + menuBarObj.offsetHeight - getScrollTop();
        //y -= getPropIntVal(menuBarObj, btw) + getPropIntVal(menuBarObj, bbw);
      }
      */
      //alert(y);
      //+ menuBarObj.offsetHeight
      //alert(menuBarItemObj.offsetHeight);
      /*  menuBarItemObj.offsetHeight +    + 
      x = menuBarItemObj.offsetLeft - getPropIntVal(menuObj, blw) - getScrollLeft();
      y = menuBarObj.offsetTop + menuBarObj.offsetHeight - getScrollTop();
      if (ie55 || ie6) {
        x += getPropIntVal(menuBarObj, blw);
        y = menuBarItemObj.offsetTop + menuBarItemObj.offsetHeight 
          + getPropIntVal(menuBarObj, bbw) 
          + getPropIntVal(menuBarObj, pb) 
          - getPropIntVal(menuBarItemObj, bbw) 
          - getScrollTop();
      }
      if (safari) {
        x += 8;
        y += 13;
      }
      */
      menuObj.style.left = (getMainMenuBarMenuLeftPos(menuBarObj, menuBarItemObj, menuObj, x) + getScrollLeft()) + px;
      menuObj.style.top = (getMainMenuBarMenuTopPos(menuBarObj, menuBarItemObj, menuObj, y) + getScrollTop()) + px;
    }
    else {
      x = menuBarObj.offsetLeft + menuBarItemObj.offsetLeft + getPropIntVal(menuBarObj, blw) - getPropIntVal(menuObj, blw) - getScrollLeft();
      y = menuBarObj.offsetTop + menuBarObj.offsetHeight - getScrollTop();
      if (opera || safari) {
        x -= getPropIntVal(menuBarObj, blw);
      }
      menuObj.style.left = (getMainMenuBarMenuLeftPos(menuBarObj, menuBarItemObj, menuObj, x) + getScrollLeft()) + px;
      menuObj.style.top = (getMainMenuBarMenuTopPos(menuBarObj, menuBarItemObj, menuObj, y) + getScrollTop()) + px;
    }
  }
  if (ie && menuObj.mode == "fixed") {
    menuObj.initialLeft = parseInt(menuObj.style.left) - getScrollLeft();
    menuObj.initialTop = parseInt(menuObj.style.top) - getScrollTop();
  }
  //alert(menuObj.style.left + ":" + menuObj.style.top);
  menuObj.style.visibility = "visible";
}

/*
Deactivate the menu bar items.
*/
function deactivateMenuBarItems(menuBarObj) { // Private method
  var i = menuBarObj.childNodes.length - 1;
  if (i > -1) {
    do {
    //for (var i = 0, len = menuBarObj.childNodes.length; i < len; i++) {
      if (menuBarObj.childNodes[i].enabled && menuBarObj.childNodes[i].clicked) {
        menuBarObj.childNodes[i].className = menuBarObj.childNodes[i].itemClassName;
        if (menuBarObj.childNodes[i].iconObj) {
          menuBarObj.childNodes[i].iconObj.className = menuBarObj.childNodes[i].iconClassName;
        }
        menuBarObj.childNodes[i].clicked = false;
        if (menuBarObj.childNodes[i].menu) {
          hideMenus(menuBarObj.childNodes[i].menu.menuObj);
        }
        break;
      }
    } while (i--);
  }
  menuBarObj.activated = false;
}

/*
Event handler that handles onmouseover event of the menu bar item.
*/
function menuBarItemOver(e) { // Private method
  if (intervalId) {
    clearTimeout(intervalId);
  }
  if (this.parent.menuBarObj.activated) {
    if (!this.clicked) {
      var menuBarObj = this.parent.menuBarObj;
      var i = menuBarObj.childNodes.length - 1;
      if (i > -1) {
        do {
        //for (var i = 0, len = menuBarObj.childNodes.length; i < len; i++) {
          if (menuBarObj.childNodes[i].enabled && menuBarObj.childNodes[i].clicked) {
            menuBarObj.childNodes[i].className = menuBarObj.childNodes[i].itemClassName;
            if (menuBarObj.childNodes[i].iconObj) {
              menuBarObj.childNodes[i].iconObj.className = menuBarObj.childNodes[i].iconClassName;
            }
            menuBarObj.childNodes[i].clicked = false;
            if (menuBarObj.childNodes[i].menu) {
              hideMenus(menuBarObj.childNodes[i].menu.menuObj);
            }
            break;
          }
        } while (i--);
      }
      if (this.enabled) {
        if (this.menu) {
          this.onclick(e);
        }
        else {
          if (this.actionOnClick) {
            this.className = this.itemClassNameClick;
            if (this.iconObj && this.iconClassNameClick) {
              this.iconObj.className = this.iconClassNameClick;
            }
            this.clicked = true;
          }
        }
      }
    }
  }
  else {
    var menuBarObj = this.parent.menuBarObj;
    var i = menuBarObj.childNodes.length - 1;
    if (i > -1) {
      do {
      //for (var i = 0, len = menuBarObj.childNodes.length; i < len; i++) {
        if (menuBarObj.childNodes[i].enabled) {
          menuBarObj.childNodes[i].className = menuBarObj.childNodes[i].itemClassName;
          if (menuBarObj.childNodes[i].iconObj) {
            menuBarObj.childNodes[i].iconObj.className = menuBarObj.childNodes[i].iconClassName;
          }
        }
      } while (i--);
    }
    if (this.enabled && (this.menu || this.actionOnClick)) {
      switch (menuBarObj.activateMode) {
        case "click":
          this.className = this.itemClassNameOver;
          break;
        case "over":
          if (this.menu) {
            this.onclick(e);
          }
          else {
            this.className = this.itemClassNameOver;
          }
          break;
      }
      if (this.iconObj && this.iconClassNameOver) {
        this.iconObj.className = this.iconClassNameOver;
      }
    }
  }
}

/*
Event handler that handles onclick event of the menu bar item.
*/
function menuBarItemClick(e) { // Private method
  if (this.enabled) {
    if (this.menu) {
      if (this.clicked) {
        this.className = this.itemClassNameOver;
        if (this.iconObj) {
          this.iconObj.className = this.iconClassNameOver;
        }
        hideMenus(this.menu.menuObj);
        this.clicked = false;
        this.parent.menuBarObj.activated = false;
		
		//Brady Clifford - Allows the menuBarItem to have an action
		
		if (this.actionOnClick) {
		
			var action = this.actionOnClick;
			
			if (action.indexOf("link:") == 0) {
				location.href = action.substr(5);
			}
			else {
				if (action.indexOf("code:") == 0) {
					eval(action.substr(5));
				}
			  	else {
					location.href = action;
			  	}
			}
		}
		
		//------------------------
		
      }
      else {
        this.className = this.itemClassNameClick;
        if (this.iconObj && this.iconClassNameClick) {
          this.iconObj.className = this.iconClassNameClick;
        }
        popUpMenuBarMenu(this.parent.menuBarObj, this, this.menu.menuObj);
        this.clicked = true;
        this.parent.menuBarObj.activated = true;
      }
    }
    else {
      if (this.actionOnClick) {
        var action = this.actionOnClick;
        if (action.indexOf("link:") == 0) {
          location.href = action.substr(5);
        }
        else {
          if (action.indexOf("code:") == 0) {
            eval(action.substr(5));
          }
          else {
            location.href = action;
          }
        }
        this.className = this.itemClassName;
        if (this.iconObj) {
          this.iconObj.className = this.iconClassName;
        }
        this.clicked = false;
        this.parent.menuBarObj.activated = false;
      }
    }
  }
  if (!e) {
    var e = window.event;
    e.cancelBubble = true;
  }
  if (e.stopPropagation) {
    e.stopPropagation();
  }
}

/*
Event handler that handles onmouseout event of the menu bar item.
*/
function menuBarItemOut() { // Private method
  intervalId = setTimeout("deactivate()", autoHideTimeLimit);
  if (!this.parent.menuBarObj.activated) {
    this.className = this.itemClassName;
    if (this.iconObj) {
      this.iconObj.className = this.iconClassName;
    }
  }
}

/*
Event handler that handles onmousedown event of the menu bar.
*/
function menuBarDown(e) { // Private method
  draggingObj = this.parent.menuBarObj;
  var menuBarObj = this.parent.menuBarObj;
  menuBarObj.differenceLeft = getX(e) - menuBarObj.offsetLeft;
  menuBarObj.differenceTop = getY(e) - menuBarObj.offsetTop;
  hideMenuBarMenus();
  document.onmousemove = mouseMoveHandler;
}

/*
Event handler that handles onmouseup event of the menu bar.
*/
function menuBarUp() { // Private method
  draggingObj = null;
  var menuBarObj = this.parent.menuBarObj;
  menuBarObj.differenceLeft = 0;
  menuBarObj.differenceTop = 0;
  menuBarObj.initialLeft = menuBarObj.offsetLeft - getScrollLeft();
  menuBarObj.initialTop = menuBarObj.offsetTop - getScrollTop();
  document.onmousemove = null;
}

/*
Event handler that handles mouse move event.
*/
function mouseMoveHandler(e) { // Private method
  if (draggingObj) {
    draggingObj.style.left = (getX(e) - draggingObj.differenceLeft) + px;
    draggingObj.style.top = (getY(e) - draggingObj.differenceTop) + px;
  }
}

/*
Event handler that handles scroll event.
*/
function menuBarScrollHandler() { // Private method

	//Taken out by Brady Clifford because an error showed up in Internet Explorer
	
  /*var i = menuBarCount;
  do {
  //for (var i = 1; i <= menuBarCount; i++) {
    var menuBarObj = getElmId("DOMenuBar" + i);
    if (menuBarObj.mode == "fixed") {		
      menuBarObj.style.left = (menuBarObj.initialLeft + getScrollLeft()) + px;
      menuBarObj.style.top = (menuBarObj.initialTop + getScrollTop()) + px;
    }
  } while (--i);*/
}

/*
Remove all menu bars events.
*/
function removeMenuBarEvents(menuBarObj) { // Private method
  var fields = new Array("setMode", 
                         "setActivateMode", 
                         "setDraggable", 
                         "setClassName", 
                         "setDragClassName", 
                         "show", 
                         "hide", 
                         "setX", 
                         "setY", 
                         "moveTo", 
                         "moveBy", 
                         "setBorderWidth");
  var i = fields.length - 1;
  do {
    menuBarObj[fields[i]] = null;
    //_i++; // TODO
  } while (i--);
}

/*
Release the memory to minimize memory leak.
*/
function menuBarReleaseMemory() { // Private method
  var i = menuBarCount;
  var menuBarObj;
  if (i > 0) {
    do {
      menuBarObj = getElmId("DOMenuBar" + i);
      removeMenuBarEvents(menuBarObj.parent);
      removeItemEvents(menuBarObj);
      menuBarObj.parent.dragObj.parent = null;
      menuBarObj.parent = null;
      menuBarObj.onclick = null;
      document.body.removeChild(menuBarObj);
    } while (--i);
  }
  i = staticMenuBarId.length - 1;
  if (i > -1) {
    do {
      menuBarObj = getElmId(staticMenuBarId[i]);
      removeMenuBarEvents(menuBarObj.parent);
      removeItemEvents(menuBarObj);
      menuBarObj.parent.dragObj.parent = null;
      menuBarObj.parent = null;
      menuBarObj.onclick = null;
    } while (i--);
  }
}

/*
Hide all menu bar menus.
*/
function hideMenuBarMenus() { // Public method
  var i = menuBarCount;
  if (i > 0) {
    do {
    //for (var i = 1; i <= menuBarCount; i++) {
      deactivateMenuBarItems(getElmId("DOMenuBar" + i));
    } while (--i);
  }
}

/*
Show the icon before the display text.
Arguments:
className          : Required. String that specifies the CSS class selector for the icon.
classNameOver      : Optional. String that specifies the CSS class selector for the icon when 
                     the cursor is over the menu bar item.
classNameClick     : Optional. String that specifies the CSS class selector for the icon when 
                     the cursor is clicked on the menu bar item.
*/
function showMenuBarItemIcon() { // Public method
  var iconElm = createElm("span");
  var textNode = document.createTextNode("");
  iconElm.appendChild(textNode);
  iconElm.id = this.id + "Icon";
  iconElm.className = arguments[0];
  this.insertBefore(iconElm, this.firstChild);
  var height;
  var offsetHeight;
  var menuBarObj = this.parent.menuBarObj;
  var offset = getPropIntVal(menuBarObj, btw) 
             + getPropIntVal(this, pt) 
             - getPropIntVal(menuBarObj, pb) 
             - getPropIntVal(menuBarObj, bbw) 
             - getPropIntVal(this, pb);
  //height = iconElm.offsetHeight;
  //offsetHeight = this.offsetHeight;
  /*
  if (ie55 || ie6) {
    height = getPropIntVal(iconElm, "height");
    offsetHeight = (menuBarObj.mode == "static") ? menuBarObj.offsetHeight + offset : this.offsetHeight + getPropIntVal(this, pt) - getPropIntVal(this, pb);
  }
  else {
    height = iconElm.offsetHeight;
    offsetHeight = this.offsetHeight;
  }
  */
  //iconElm.style.top = Math.floor((offsetHeight - height) / 2) + px;
  iconElm.style.top = Math.floor((this.offsetHeight - iconElm.offsetHeight) / 2) + px;
  if (opera && this.parent.menuBarObj.mode != "static") {
    iconElm.style.display = "none";
  }
  this.iconClassName = iconElm.className;
  var len = arguments.length;
  if (len > 1 && arguments[1].length > 0) {
    this.iconClassNameOver = arguments[1];
  }
  if (len > 2 && arguments[2].length > 0) {
    this.iconClassNameClick = arguments[2];
  }
  this.iconObj = iconElm;
  this.setIconClassName = function(className) { // Public method
    if (opera && this.parent.menuBarObj.mode != "static") {
      return;
    }
    this.iconClassName = className;
    this.iconObj.className = this.iconClassName;
  };
  this.setIconClassNameOver = function(classNameOver) { // Public method
    if (opera && this.parent.menuBarObj.mode != "static") {
      return;
    }
    this.iconClassNameOver = classNameOver;
  };
  this.setIconClassNameClick = function(classNameClick) { // Public method
    if (opera && this.parent.menuBarObj.mode != "static") {
      return;
    }
    this.iconClassNameClick = classNameClick;
  };
  iconElm = null;
}

/*
Add a new menu bar item to the menu bar.
Argument:
menuBarItemObj     : Required. Menu bar item object that is going to be added to the menu bar 
                     object.
*/
function addMenuBarItem(menuBarItemObj) { // Public method
  var itemElm = createElm("span");
  itemElm.id = menuBarItemObj.id;
  itemElm.menu = menuBarItemObj.menu;
  itemElm.enabled = menuBarItemObj.enabled;
  itemElm.clicked = false;
  itemElm.actionOnClick = menuBarItemObj.actionOnClick;
  itemElm.itemClassName = menuBarItemObj.className;
  itemElm.itemClassNameOver = menuBarItemObj.classNameOver;
  itemElm.itemClassNameClick = menuBarItemObj.classNameClick;
  itemElm.className = itemElm.itemClassName;
  if (ie50) {
    itemElm.style.height = "1%";
  }
  if (ie55) {
    itemElm.style.width = "auto";
  }
  var textElm;
  if (typeof(itemElm.innerHTML) != "undefined") {
    textElm = createElm("span");
    textElm.innerHTML = menuBarItemObj.displayText;
  }
  else {
    textElm = document.createTextNode(menubarItemObj.displayText);
  }
  
  //var textNode = document.createTextNode(menuBarItemObj.displayText);
  //itemElm.appendChild(textNode);
  itemElm.appendChild(textElm);
  this.menuBarObj.appendChild(itemElm);
  itemElm.parent = this;
  itemElm.setClassName = function(className) { // Public method
    this.itemClassName = className;
    this.className = this.itemClassName;
  };
  itemElm.setClassNameOver = function(classNameOver) { // Public method
    this.itemClassNameOver = classNameOver;
  };
  itemElm.setClassNameClick = function(classNameClick) { // Public method
    this.itemClassNameClick = classNameClick;
  };
  itemElm.setDisplayText = function(text) { // Public method
    var index = this.childNodes[0].id.indexOf("Icon") > -1 ? 1 : 0;
    var node = this.childNodes[index];
    if (typeof(node.innerHTML != "undefined")) {
      node.innerHTML = text;
    }
    else {
      node.nodeValue = text;
    }
      /*
    if (this.childNodes[0].nodeType == 3) {
      this.childNodes[0].nodeValue = text;
    }
    else {
      this.childNodes[1].nodeValue = text;
    }
    */
  };
  itemElm.setMenu = function(menu) { // Public method
    this.menu = menu;
  };
  itemElm.showIcon = showMenuBarItemIcon;
  itemElm.onmouseover = menuBarItemOver;
  itemElm.onclick = menuBarItemClick;
  itemElm.onmouseout = menuBarItemOut;
  if (menuBarItemObj.itemName.length > 0) {
    this.items[menuBarItemObj.itemName] = itemElm;
  }
  else {
    this.items[this.items.length] = itemElm;
  }
  var len = 0;
  for (var x in this.items) {
    ++len;
  }
  if (len == 1 && opera && pageMode == 0) {
    this.dragObj.style.height = (this.dragObj.offsetTop - itemElm.offsetTop) + px;
  }
  textElm = null;
  itemElm = null;
}

/*
Create a new menu bar item object.
Arguments:
displayText        : Required. String that specifies the text to be displayed on the menu bar item.
menuObj            : Optional. Menu object that is going to be the main menu for the menu bar item. 
                     Defaults to null (no menu).
itemName           : Optional. String that specifies the name of the menu bar item. Defaults to "" 
                     (no name).
enabled            : Optional. Boolean that specifies whether the menu bar item is enabled/disabled. 
                     Defaults to true.
actionOnClick      : Optional. String that specifies the action to be done when the menu item is 
                     being clicked if no main menu has been set for the menu bar item. Defaults to 
                     "" (no action).
className          : Optional. String that specifies the CSS class selector for the menu bar item. 
                     Defaults to "jsdomenubaritem".
classNameOver      : Optional. String that specifies the CSS class selector for the menu item when 
                     the cursor is over it. Defaults to "jsdomenubaritemover".
classNameClick     : Optional. String that specifies the CSS class selector for the menu item when 
                     the cursor is clicked on it. Defaults to "jsdomenubaritemclick".
*/
function menuBarItem() { // Public method
  this.displayText = arguments[0];
  this.id = "menuBarItem" + (++menuBarItemCount);
  this.itemName = "";
  this.menu = null;
  this.enabled = true;
  this.actionOnClick = "";
  this.className = menuBarItemClassName;
  this.classNameOver = menuBarItemClassNameOver;
  this.classNameClick = menuBarItemClassNameClick;
  var len = arguments.length;
  if (len > 1 && typeof(arguments[1]) == "object") {
    this.menu = arguments[1];
  }
  if (len > 2 && arguments[2].length > 0) {
    this.itemName = arguments[2];
  }
  if (len > 3 && typeof(arguments[3]) == "boolean") {
    this.enabled = arguments[3];
  }
  if (len > 4 && arguments[4].length > 0) {
    this.actionOnClick = arguments[4];
  }
  if (len > 5 && arguments[5].length > 0) {
    this.className = arguments[5];
  }
  if (len > 6 && arguments[6].length > 0) {
    this.classNameOver = arguments[6];
  }
  if (len > 7 && arguments[7].length > 0) {
    this.classNameClick = arguments[7];
  }
}

/*
Create a new menu bar object.
Arguments:
mode               : Optional. String that specifies the mode of the menu bar. Defaults to "absolute".
id                 : Optional, except when mode = "static". String that specifies the id of 
                     the element that will contain the menu bar. This argument is required when 
                     mode = "static".
draggable          : Optional. Boolean that specifies whether the menu bar is draggable. Defaults to 
                     false.
className          : Optional. String that specifies the CSS class selector for the menu bar. Defaults 
                     to "jsdomenubardiv".
width              : Optional. Integer that specifies the width of the menu bar. Defaults to "auto".
height             : Optional. Integer that specifies the height of the menu bar. Defaults to "auto".
*/
function jsDOMenuBar() { // Public method
  this.items = new Array();
  var dragElm = createElm("span");
  dragElm.className = menuBarDragClassName;
  var textNode = document.createTextNode("");
  dragElm.appendChild(textNode);
  var menuBarElm;
  var len = arguments.length;
  if (len > 1 && arguments[1].length > 0 && arguments[0] == "static") {
    menuBarElm = getElmId(arguments[1]);
    if (!menuBarElm) {
      return;
    }
    staticMenuBarId[staticMenuBarId.length] = arguments[1];
    menuBarElm.appendChild(dragElm);
  }
  else {
    menuBarElm = createElm("div");
    menuBarElm.appendChild(dragElm);
    menuBarElm.id = "DOMenuBar" + (++menuBarCount);
  }
  menuBarElm.mode = menuBarMode;
  menuBarElm.activateMode = menuBarActivateMode;
  menuBarElm.draggable = false;
  menuBarElm.className = menuBarClassName;
  menuBarElm.activated = false;
  menuBarElm.initialLeft = 0;
  menuBarElm.initialTop = 0;
  menuBarElm.differenceLeft = 0;
  menuBarElm.differenceTop = 0;
  if (len > 0 && arguments[0].length > 0) {
    switch (arguments[0]) {
      case "absolute":
        menuBarElm.style.position = "absolute";
        menuBarElm.mode = "absolute";
        break;
      case "fixed":
        if (ie) {
          menuBarElm.style.position = "absolute";
        }
        else {
          menuBarElm.style.position = "fixed";
        }
        menuBarElm.mode = "fixed";
        break;
      case "static":
        menuBarElm.style.position = "static";
        menuBarElm.mode = "static";
        break;
    }
  }
  if (len > 2 && typeof(arguments[2]) == "boolean") {
    menuBarElm.draggable = arguments[2];
    if (menuBarElm.draggable) {
      dragElm.style.visibility = "visible";
    }
    else {
      dragElm.style.visibility = "hidden";
    }
  }
  if (len > 3 && arguments[3].length > 0) {
    menuBarElm.className = arguments[3];
  }
  if (len > 4 && typeof(arguments[4]) == "number" && arguments[4] > 0) {
    menuBarElm.style.width = arguments[4] + px;
  }
  if (len > 5 && typeof(arguments[5]) == "number" && arguments[5] > 0) {
    menuBarElm.style.height = arguments[5] + px;
  }
  menuBarElm.style.left = "0px";
  menuBarElm.style.top = "0px";
  if (ie50) {
    menuBarElm.style.height = "1%";
  }
  if (menuBarElm.mode != "static") {
    document.body.appendChild(menuBarElm);
  }
  else {
    if (ie) {
      menuBarElm.style.height = "1%";
    }
  }
  if (!getPropVal(menuBarElm, blw)) {
    menuBarElm.style.borderWidth = menuBarBorderWidth + px;
  }
  this.menuBarObj = menuBarElm;
  this.menuBarObj.parent = this;
  this.dragObj = dragElm;
  this.dragObj.parent = this;
  this.addMenuBarItem = addMenuBarItem;
  this.menuBarObj.onclick = function(e) { // Private method
    if (!e) {
      var e = window.event;
      e.cancelBubble = true;
    }
    if (e.stopPropagation) {
      e.stopPropagation();
    }
  };
  dragElm.onmousedown = menuBarDown;
  dragElm.onmouseup = menuBarUp;
  this.setMode = function(mode) { // Public method
    switch (mode) {
      case "absolute":
        this.menuBarObj.style.position = "absolute";
        this.menuBarObj.mode = "absolute";
        this.menuBarObj.initialLeft = parseInt(this.menuBarObj.style.left);
        this.menuBarObj.initialTop = parseInt(this.menuBarObj.style.top);
        break;
      case "fixed":
        if (ie) {
          this.menuBarObj.style.position = "absolute";
          this.menuBarObj.initialLeft = parseInt(this.menuBarObj.style.left);
          this.menuBarObj.initialTop = parseInt(this.menuBarObj.style.top);
        }
        else {
          this.menuBarObj.style.position = "fixed";
        }
        this.menuBarObj.mode = "fixed";
        break;
    }
  };
  this.setActivateMode = function(activateMode) { // Public method
    this.menuBarObj.activateMode = activateMode;
  };
  this.setDraggable = function(draggable) { // Public method
    if (typeof(draggable) == "boolean" && this.menuBarObj.mode != "static") {
      this.menuBarObj.draggable = draggable;
      if (this.menuBarObj.draggable) {
        this.dragObj.style.visibility = "visible";
      }
      else {
        this.dragObj.style.visibility = "hidden";
      }
    }
  };
  this.setClassName = function(className) { // Public method
    this.menuBarObj.className = className;
  };
  this.setDragClassName = function(className) { // Public method
    this.dragObj.className = className;
  };
  this.show = function() { // Public method
    this.menuBarObj.style.visibility = "visible";
  };
  this.hide = function() { // Public method
    this.menuBarObj.style.visibility = "hidden";
  };
  this.setX = function(x) { // Public method
    this.menuBarObj.initialLeft = x;
    this.menuBarObj.style.left = x + px;
  };
  this.setY = function(y) { // Public method
    this.menuBarObj.initialTop = y;
    this.menuBarObj.style.top = y + px;
  };
  this.moveTo = function(x, y) { // Public method
    this.menuBarObj.initialLeft = x;
    this.menuBarObj.initialTop = y;
    this.menuBarObj.style.left = x + px;
    this.menuBarObj.style.top = y + px;
  };
  this.moveBy = function(x, y) { // Public method
    var left = parseInt(this.menuBarObj.style.left);
    var top = parseInt(this.menuBarObj.style.top);
    this.menuBarObj.initialLeft = left + x;
    this.menuBarObj.initialTop = top + y;
    this.menuBarObj.style.left = (left + x) + px;
    this.menuBarObj.style.top = (top + y) + px;
  };
  this.setBorderWidth = function(width) { // Public method
    this.menuBarObj.style.borderWidth = width + px;
  };
  menuBarElm = null;
  dragElm = null;
}

if (typeof(menuBarClassName) == "undefined") {
  var menuBarClassName = "jsdomenubardiv"; // Public field
}

if (typeof(menuBarItemClassName) == "undefined") {
  var menuBarItemClassName = "jsdomenubaritem"; // Public field
}

if (typeof(menuBarItemClassNameOver) == "undefined") {
  var menuBarItemClassNameOver = "jsdomenubaritemover"; // Public field
}

if (typeof(menuBarItemClassNameClick) == "undefined") {
  var menuBarItemClassNameClick = "jsdomenubaritemclick"; // Public field
}

if (typeof(menuBarDragClassName) == "undefined") {
  var menuBarDragClassName = "jsdomenubardragdiv"; // Public field
}

if (typeof(menuBarMode) == "undefined") {
  var menuBarMode = "absolute"; // Public field
}

if (typeof(menuBarActivateMode) == "undefined") {
  var menuBarActivateMode = "click"; // Public field
}

if (typeof(menuBarBorderWidth) == "undefined") {
  var menuBarBorderWidth = 2; // Public field
}

var pt = "padding-top"; // Private field
var pb = "padding-bottom"; // Private field
var menuBarCount = 0; // Private field
var menuBarItemCount = 0; // Private field
var draggingObj = null; // Private field
var staticMenuBarId = new Array(); // Private field