//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//

// Script begins

var isIE4 = false;
var isNN4 = false;

var flagMenu = "M";
var flagLink = "L";
var flagCommand = "C";
var flagSeparator = "S";

var charWidth = 7; // character width
var charHeight = 15; // character height
var colorNormal = "#cccccc"; // menu pad color
var colorHighlighted = "#ffffff"; // menu highlighted item color
var colorTopLine = "#999999"; // separator upper line color
var colorBottomLine = "#ffffff"; // separator lower line color

var borderSize = 2;
var marginSize = 4;
var marginString = "&nbsp;&nbsp;";
var subMenuFlagSize = 4;

var menuShown = -1;
var itemOn = false;
var nnWidth = 0, nnHeight = 0;

var menuItemCount = -1;
var menuItem = new Array();
var menuFolderCount = -1;
var menuFolder = new Array();
var menuFolderSwitch = new Array();
var menuWidth = new Array();
var itemLayer = new Array();
var menuLayer = new Array();
var menuHolder = new Array();
var menuDone = new Array();

var focusIt = 0;

function launchCommand(commandString) {
  eval(commandString);
}

function launchPage(pageURL) {
  document.location.assign(pageURL);
}

function getLayer(layerID) {
  return (isIE4)?document.all[layerID]:document.layers[layerID];
}

function clickMenu(menuNum,itemIndex) {
  var menuIndex = menuItem[menuNum][itemIndex].myFolder;
  var folderIndex = menuItem[menuNum][itemIndex].folder;
  var itemX = menuItem[menuNum][itemIndex].x;
  var itemY = menuItem[menuNum][itemIndex].y;

  var menuID = getMenu(menuNum,menuIndex,0,0);
  var theLayer = getLayer(menuID);

  if (menuItem[menuNum][itemIndex].type == flagMenu) {
    if (menuFolderSwitch[menuNum][folderIndex])
      hideMenu(menuNum,folderIndex)
    else
      showMenu(menuNum,folderIndex,itemX + menuWidth[menuNum][menuIndex] * charWidth + subMenuFlagSize,itemY, theLayer.seDimX,theLayer.seDimY, ++focusIt);
  }
  else if (menuItem[menuNum][itemIndex].type == flagLink) {
    closeMenu(menuNum);
    launchPage(menuItem[menuNum][itemIndex].url);
  }
  else if (menuItem[menuNum][itemIndex].type == flagCommand) {
    closeMenu(menuNum);
    launchCommand(menuItem[menuNum][itemIndex].command);
  }
}

function mouseOver() {
  var menuNum = this.menuNum;
  var itemIndex = this.itemIndex;
  var menuIndex = menuItem[menuNum][itemIndex].myFolder;
  var menuLength = menuFolder[menuNum][menuIndex].length;
  var folderIndex = menuItem[menuNum][itemIndex].folder;
  var itemX = menuItem[menuNum][itemIndex].x;
  var itemY = menuItem[menuNum][itemIndex].y;
  var thisFolder = 0;
  var thisItem = 0;

  var menuID = getMenu(menuNum,menuIndex,0,0);
  var theLayer = getLayer(menuID);

  itemOn = true;

  if (menuItem[menuNum][itemIndex].type != flagSeparator) {
    if (isIE4) {
      this.style.backgroundColor = colorHighlighted;
    }
    else if (isNN4) {
      this.document.bgColor = colorHighlighted;
    }
  }

  for (var i = 0; i < menuLength; i++) {
    thisItem = menuFolder[menuNum][menuIndex][i];
    
    if (thisItem != itemIndex)
      if (menuItem[menuNum][thisItem].type == flagMenu) {
        thisFolder = menuItem[menuNum][thisItem].folder;

        if (menuFolderSwitch[menuNum][thisFolder])
          hideMenu(menuNum,thisFolder);
      }
  }

  if (menuItem[menuNum][itemIndex].type == flagMenu)
    if (!menuFolderSwitch[menuNum][folderIndex])
      showMenu(menuNum,folderIndex,itemX + menuWidth[menuNum][menuIndex] * charWidth + subMenuFlagSize,itemY, theLayer.seDimX,theLayer.seDimY, ++focusIt);

  window.status = menuItem[menuNum][itemIndex].description;  
  return true;
}

function mouseOut() {
  itemOn = false;

  if (isIE4)
    this.style.backgroundColor = colorNormal
  else if (isNN4)
    this.document.bgColor = colorNormal;

  window.status = "";
  return true;
}

function menuItemUnit() {
  this.type = "";
  this.name = "";
  this.description = "";
  this.url = "";
  this.command = "";
  this.menu = "";
  this.folder = -1;
  this.myFolder = -1;
  this.x = -1;
  this.y = -1;
}

function readMenu(menuNum,menuName) {
  var menu = eval(menuName);
  var menuLength = menu.length
  var thisFolder = ++menuFolderCount;

  menuFolder[menuNum][thisFolder] = new Array();
  menuFolderSwitch[menuNum][thisFolder] = false;
  menuWidth[menuNum][thisFolder] = 0;
  menuLayer[menuNum][thisFolder] = false;
  menuDone[menuNum][thisFolder] = false;

  for (var i = 0; i < menuLength; i++) {
    menuFolder[menuNum][thisFolder][i] = ++menuItemCount;
    itemLayer[menuNum][menuItemCount] = false;

    menuItem[menuNum][menuItemCount] = new menuItemUnit();
    menuItem[menuNum][menuItemCount].myFolder = thisFolder;
    menuItem[menuNum][menuItemCount].type = menu[i][0];
    menuItem[menuNum][menuItemCount].name = menu[i][1];
    menuItem[menuNum][menuItemCount].description = menu[i][2];

    if (menuWidth[menuNum][thisFolder] < (menuItem[menuNum][menuItemCount].name.length + marginSize))
      menuWidth[menuNum][thisFolder] = menuItem[menuNum][menuItemCount].name.length + marginSize;

    if (menuItem[menuNum][menuItemCount].type == flagMenu) {
      menuItem[menuNum][menuItemCount].menu = menu[i][3];
      menuItem[menuNum][menuItemCount].folder = menuFolderCount + 1;
      readMenu(menuNum,menuItem[menuNum][menuItemCount].menu);
    }
    else if (menuItem[menuNum][menuItemCount].type == flagLink) {
      menuItem[menuNum][menuItemCount].url = menu[i][3];
    }
    else if (menuItem[menuNum][menuItemCount].type == flagCommand) {
      menuItem[menuNum][menuItemCount].command = menu[i][3];
    }
    else if (menuItem[menuNum][menuItemCount].type != flagSeparator) {
      alert("Error found in " + menuName);
    }
  }
}

function getItem(menuNum,itemIndex,itemDimX,itemDimY,menuIndex) {
  var thisItem = null;
  var subMenuFlag = (menuItem[menuNum][itemIndex].type == flagMenu)?"subMenu.gif":"onePixel.gif";
  var singleQuote = "'";
  var itemID = "m" + menuNum + "i" + itemIndex + "";
  var layerString = '<div id="' + itemID + '" style="position:absolute; width:' + itemDimX + '; background-color:' + colorNormal + '; visibility:hidden;"></div>';
  var htmlString = (menuItem[menuNum][itemIndex].type == flagSeparator)?('<table width=' + itemDimX +' height=2 cellpadding=0 cellspacing=0 border=0><tr align=left valign=bottom><td bgcolor=' + colorTopLine + '><img src="onePixel.gif" width=1 height=1 border=0></td></tr><tr align=left valign=top><td bgcolor=' + colorBottomLine + '><img src="onePixel.gif" width=1 height=1 border=0></td></tr></table>'):('<table width=' + itemDimX +' height=' + itemDimY + ' cellpadding=0 cellspacing=0 border=0><tr align=left valign=middle><td nowrap><span id="menuText"><a class="menu" href="javascript:clickMenu(' + menuNum + ',' + itemIndex + ')" onMouseOver="window.status=' + singleQuote + menuItem[menuNum][itemIndex].description + singleQuote + ';return true;">' + marginString + menuItem[menuNum][itemIndex].name + marginString + '</a></span></td><td><img src="' + subMenuFlag + '" width=4 height=7 border=0 align=right></td></tr></table>');

  if (!itemLayer[menuNum][itemIndex]) {
    itemLayer[menuNum][itemIndex] = true;

    if (isIE4) {
      document.all[menuHolder[menuNum]].insertAdjacentHTML("BeforeEnd",layerString);
      thisItem = document.all[itemID];

      thisItem.innerHTML = htmlString;
      thisItem.style.zIndex = menuIndex * 2 + 1;

      thisItem.onmouseover = mouseOver;
      if (menuItem[menuNum][itemIndex].type != flagSeparator)
        thisItem.onmouseout = mouseOut;
    }
    else if (isNN4) {
      document.layers[itemID] = new Layer(itemDimX,document.layers[menuHolder[menuNum]]);
      thisItem = document.layers[itemID];

      thisItem.visibility = "hidden";
      thisItem.document.open();
      thisItem.document.writeln(htmlString);
      thisItem.document.close();
      thisItem.document.bgColor = colorNormal;
      thisItem.zIndex = menuIndex * 2 + 1;

      thisItem.onmouseover = mouseOver;
      if (menuItem[menuNum][itemIndex].type != flagSeparator)
        thisItem.onmouseout = mouseOut;
    }

    thisItem.itemIndex = itemIndex;
    thisItem.menuNum = menuNum;
  }
  
  return itemID;
}

function getMenu(menuNum,menuIndex,menuDimX,menuDimY) {
  var menuID = "m" + menuNum + "f" + menuIndex + "";
  var menuPadX = menuDimX + borderSize * 2;
  var menuPadY = menuDimY + borderSize * 2;
  var layerString = '<div id="' + menuID + '" style="position:absolute; width:' + menuPadX + '; visibility:hidden;"></div>';
  var htmlString = '<table width=' + menuPadX +' height=' + menuPadY + ' cellpadding=0 cellspacing=0 border=' + borderSize + '><tr align=left valign=middle><td></td></tr></table>';
  var theLayer = null;

  if (!menuLayer[menuNum][menuIndex]) {
    menuLayer[menuNum][menuIndex] = true;

    if (isIE4) {
      document.all[menuHolder[menuNum]].insertAdjacentHTML("BeforeEnd",layerString);
      theLayer = document.all[menuID];

      theLayer.innerHTML = htmlString;
      theLayer.style.zIndex = menuIndex * 2;
    }
    else if (isNN4) {
      document.layers[menuID] = new Layer(menuPadX,document.layers[menuHolder[menuNum]]);
      theLayer = document.layers[menuID];

      theLayer.visibility = "hidden";
      theLayer.zIndex = menuIndex * 2;
      theLayer.document.open();
      theLayer.document.writeln(htmlString);
      theLayer.document.close();
    }

    theLayer.padWidth = menuPadX;
    theLayer.padHeight = menuPadY;
    theLayer.paDimX = 0; theLayer.paDimY = 0; theLayer.seDimX = 0; theLayer.seDimY = 0;
  }
  
  return menuID;
}

function showLayer(layerID) {
  if (isIE4)
    document.all[layerID].style.visibility = "visible"
  else if (isNN4)
    document.layers[layerID].visibility = "show";
}

function hideLayer(layerID) {
  if (isIE4)
    document.all[layerID].style.visibility = "hidden"
  else if (isNN4)
    document.layers[layerID].visibility = "hidden";
}

function moveLayerTo(layerID,x,y) {
  if (isIE4) {
    document.all[layerID].style.pixelLeft = x;
    document.all[layerID].style.pixelTop = y;
  }
  else if (isNN4) {
    document.layers[layerID].left = x;
    document.layers[layerID].top = y;
  }
}

function hideMenu(menuNum,menuIndex) {
  var menuLength = menuFolder[menuNum][menuIndex].length;
  var menuID = getMenu(menuNum,menuIndex,0,0);
  var itemID = "";
  var itemIndex = 0;

  var theLayer = getLayer(menuID);

  for (var i = 0; i < menuLength; i++) {
    itemIndex = menuFolder[menuNum][menuIndex][i];

    if (menuItem[menuNum][itemIndex].type == flagMenu)
      if (menuFolderSwitch[menuNum][menuItem[menuNum][itemIndex].folder])
        hideMenu(menuNum,menuItem[menuNum][itemIndex].folder);

    itemID = getItem(menuNum,itemIndex,0,0,0);
    hideLayer(itemID);
  }

  hideLayer(menuID);

  if (isNN4) { setMenuSize(menuHolder[menuNum],theLayer.paDimX,theLayer.paDimY); }

  menuFolderSwitch[menuNum][menuIndex] = false;
}

function _getLeft(_holder) {
  return (_holder.offsetParent.tagName=="BODY")?(_holder.offsetLeft):(_holder.offsetLeft+_getLeft(_holder.offsetParent));
}

function _getTop(_holder) {
  return (_holder.offsetParent.tagName=="BODY")?(_holder.offsetTop):(_holder.offsetTop+_getTop(_holder.offsetParent));
}

function getLeft(_holder) {
  return (isIE4)?_getLeft(_holder):_holder.pageX;
}

function getTop(_holder) {
  return (isIE4)?_getTop(_holder):_holder.pageY;
}

function showX(menuNum,menuIndex,menuX,menuY,dimX,dimY,fCount) {
  var menuLength = menuFolder[menuNum][menuIndex].length;
  var menuDimX = menuWidth[menuNum][menuIndex] * charWidth + subMenuFlagSize;
  var menuID = "";
  var itemID = "";
  var itemIndex = 0;
  var itemDimY = menuY;

  if (fCount == focusIt || fCount < 0) {
    for (var i = 0; i < menuLength; i++) {
       itemID = getItem(menuNum,menuFolder[menuNum][menuIndex][i],0,0,0);

       itemIndex = menuFolder[menuNum][menuIndex][i];
       menuItem[menuNum][itemIndex].x = menuX;
       menuItem[menuNum][itemIndex].y = itemDimY;
       itemDimY +=  (menuItem[menuNum][itemIndex].type != flagSeparator)?charHeight:2;
       moveLayerTo(itemID,menuItem[menuNum][itemIndex].x,menuItem[menuNum][itemIndex].y);

       showLayer(itemID);
     }

    menuID = getMenu(menuNum,menuIndex,0,0);
    moveLayerTo(menuID,menuX-borderSize,menuY-borderSize);

    if (isNN4) {
      var theLayer = document.layers[menuID];
      theLayer.paDimX = dimX; theLayer.paDimY = dimY;
      theLayer.seDimX = (dimX < menuX + borderSize + menuDimX)?(menuX + borderSize + menuDimX):dimX;
      theLayer.seDimY = (dimY < itemDimY + borderSize)?(itemDimY + borderSize):dimY;
      setMenuSize(menuHolder[menuNum],theLayer.seDimX,theLayer.seDimY);
    }

    showLayer(menuID);
    
    menuFolderSwitch[menuNum][menuIndex] = true;
  }
}

function showSubMenu(menuNum,menuIndex,menuX,menuY,dimX,dimY,fCount) {
  var menuLength = menuFolder[menuNum][menuIndex].length;
  var menuDimX = menuWidth[menuNum][menuIndex] * charWidth + subMenuFlagSize;
  var menuID = "";
  var itemID = "";
  var theLayer = null;
  var itemIndex = 0;
  var dy=0,dx=0;

  var frameWidth,frameHeight,contentWidth,contentHeight,scrollX,scrollY;

  if (isNN4) {
    frameWidth=window.innerWidth; frameHeight=window.innerHeight;
    contentWidth=(frameHeight<window.document.height)?(frameWidth-20):frameWidth;
    contentHeight=(frameWidth<window.document.width)?(frameHeight-20):frameHeight;
    scrollX=window.pageXOffset;
    scrollY=window.pageYOffset;
  }
  else {
    contentWidth=window.document.body.clientWidth;
    contentHeight=window.document.body.clientHeight;
    scrollX=window.document.body.scrollLeft;
    scrollY=window.document.body.scrollTop;
  }

  menuID = getMenu(menuNum,menuIndex,0,0);
  theLayer = getLayer(menuID);

  var padLeft=getLeft(theLayer);
  var padRight=padLeft+theLayer.padWidth;
  var padTop=getTop(theLayer);
  var padBottom=padTop+theLayer.padHeight;

  if (padBottom-scrollY>contentHeight) {
    dy=contentHeight+scrollY-padBottom;
    if (padTop+dy<scrollY) { dy=scrollY-padTop; }
  }

  if (padRight-scrollX>contentWidth) {
    dx=contentWidth+scrollX-padRight;
    if (padLeft+dx<scrollX) { dx=scrollX-padLeft; }
  }

  if (dy != 0 || dx != 0) {
    menuX += dx; menuY += dy;
    if (menuX < borderSize) { menuX = borderSize; }
    if (menuY < borderSize) { menuY = borderSize; }
  }

  showX(menuNum,menuIndex,menuX,menuY,dimX,dimY,fCount);
}

function showMenu(menuNum,menuIndex,menuX,menuY,dimX,dimY,fCount) {
  var itemDimY = menuY;
  var menuLength = menuFolder[menuNum][menuIndex].length;
  var menuDimX = menuWidth[menuNum][menuIndex] * charWidth + subMenuFlagSize;
  var menuID = "";
  var itemID = "";
  var itemIndex = 0;

  if (menuShown != -1 && menuShown != menuNum)
    hideMenu(menuShown,0);

  menuShown = menuNum;

  if (!menuDone[menuNum][menuIndex]) {
    menuDone[menuNum][menuIndex] = true;

    for (var i = 0; i < menuLength; i++) {
      itemIndex = menuFolder[menuNum][menuIndex][i];
      itemDimY +=  (menuItem[menuNum][itemIndex].type != flagSeparator)?charHeight:2;
      itemID = getItem(menuNum,itemIndex,menuDimX,charHeight,menuIndex);
    }
    menuID = getMenu(menuNum,menuIndex,menuDimX,itemDimY-menuY);
  }

  if (menuIndex != 0) {
    menuID = getMenu(menuNum,menuIndex,0,0);
    moveLayerTo(menuID,menuX-borderSize,menuY-borderSize);
    setTimeout(("showSubMenu("+menuNum+","+menuIndex+","+menuX+","+menuY+","+dimX+","+dimY+","+fCount+")"),0);
    return;
  }
  else {
    showX(menuNum,menuIndex,menuX,menuY,dimX,dimY,fCount);
  }
}

function setMenuSize(menuHolderID,menuDimX,menuDimY) {
  document.layers[menuHolderID].clip.width=menuDimX;
  document.layers[menuHolderID].clip.height=menuDimY;
}

function buildMenu(menuArrayName) {
  isIE4 = document.all;
  isNN4 = document.layers;

  var menuArray = eval(menuArrayName);
  var menuCount = menuArray.length;
  var menuSizeX = 0;
  var menuSizeY = 0;

  if (isIE4 || isNN4) {
    for (var i = 0; i < menuCount; i++) {
      menuItemCount = -1;
      menuFolderCount = -1;

      menuItem[i] = new Array();
      menuFolder[i] = new Array();
      menuFolderSwitch[i] = new Array();
      menuWidth[i] = new Array();

      itemLayer[i] = new Array();
      menuLayer[i] = new Array();
      menuDone[i] = new Array();

      menuHolder[i] = menuArray[i][1];

      readMenu(i,menuArray[i][0]);
    }

    if (isNN4) {
      nnWidth = window.innerWidth;
      nnHeight = window.innerHeight;
      window.onResize = reloadMenu;
    }

    captureClick();
  }
}

function switchMenu() {
  if (!itemOn)
    if (menuShown != -1)
      closeMenu(menuShown);

  return true;
}

function captureClick() {
  if (isIE4)
    document.onclick = switchMenu;
  else {
    document.onClick = switchMenu;
    document.captureEvents(Event.CLICK);
  }
}

function reloadMenu() {
  if (nnWidth != window.innerWidth || nnHeight != window.innerHeight)
    document.location.reload();
}

function overMenu(menuNum) {
  itemOn = true;

  if (menuShown != -1 && menuShown != menuNum)
    openMenu(menuNum);
}

function outMenu(menuNum) {
  itemOn = false;
}

function openMenu(menuNum) {
  if (menuShown == menuNum)
    closeMenu(menuNum)
  else
    showMenu(menuNum,0,borderSize,borderSize,0,0, -1);
}

function closeMenu(menuNum) {
  menuShown = -1;
  hideMenu(menuNum,0);
}

// Script ends