//+------------------------------------------------------------------+
//| yx_menu                         Version 4                        |
//| Copyright 1999  Xin Yang        yangxin@iname.com                |
//| Created 11/04/1999              Last Modified 11/29/1999         |
//| Web Site:                       http://yx.webprovider.com        |
//+------------------------------------------------------------------+
//| Copyright 1999  Xin Yang        All Rights Reserved.             |
//|                                                                  |
//| yx_menu-v4.js may be used and hosted free of charge by anyone    |
//| for personal purpose so long as this copyright notice remain     |
//| intact.                                                          |
//|                                                                  |
//| Obtain permission before selling the code for this program or    |
//| hosting this software on a commercial web or redistributing this |
//| software over the Internet or in any other medium. In all cases  |
//| copyright must remain intact.                                    |
//+------------------------------------------------------------------+

// Script begins

var isIE4 = false;
var isNN4 = false;

var flagMenu = "M";
var flagLink = "L";
var flagCommand = "C";
var flagSeparator = "S";

var charWidth = 5; // character width

var charHeight = 16; // character height
var colorNormal = "#FFFFFF"; // menu pad color
var colorHighlighted = "#0066FF"; // menu highlighted item color
var colorTopLine = "#0066FF"; // separator upper line color
var colorBottomLine = "#000000"; // separator lower line color

var borderSize = 1;
var marginSize = 3; // jp 4
var marginString = "&nbsp;";
var subMenuFlagSize = 50; // jp 56

var menuShown = -1;
var itemOn = false;

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();



function mClick(url)
{
   if(event.srcElement.tagName=='TD')
   {
      cell.all.tags("A")[0].click();
   }
}


function launchCommand(commandString) {
 eval(commandString);
 // alert(commandString);
}

function launchPage(pageURL) {
self.location.assign(pageURL);
 //alert(pageURL);
}

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;

  if (menuItem[menuNum][itemIndex].type == flagMenu) {
    if (menuFolderSwitch[menuNum][folderIndex])
      hideMenu(menuNum,folderIndex)
    else
      showMenu(menuNum,folderIndex,itemX + menuWidth[menuNum][menuIndex] * charWidth + subMenuFlagSize,itemY);
  }
  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;

  itemOn = true;

  if (menuItem[menuNum][itemIndex].type != flagSeparator) {
    if (isIE4) {
      //this.style.backgroundColor = colorHighlighted;
      //this.style.cursor = 'e-resize';
      //this.style.linkColor = '#FFFFFF';
	  this.className = 'poiMenuHigh'
    }
    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);

  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;
   this.className = 'poiMenuNormal'


  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":"blank.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>';
if (isIE4) {  
  		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="images/blank.gif" width=1 height=1 border=0></td></tr><tr align=left valign=top><td bgcolor=' + colorBottomLine + '><img src="images/blank.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 class="poiMenuNormal" onclick="javascript:clickMenu(' + menuNum + ',' + itemIndex + ')\;" onmouseover=" className=\'poiMenuHigh\'\;" onmouseout="className=\'poiMenuNormal\'\;"><td nowrap><span id="menutext">' + marginString + menuItem[menuNum][itemIndex].name + marginString + '</span></td><td><img src="images/' + subMenuFlag + '" width=4 height=7 border=0 align=right></td></tr></table>');
		 }
else if (isNN4) {
  		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="images/blank.gif" width=1 height=1 border=0></td></tr><tr align=left valign=top><td bgcolor=' + colorBottomLine + '><img src="images/blank.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="menu4" 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="images/' + 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 + "";
  
  if (isIE4) {
  
  var menuPadX = menuDimX + borderSize * 2;
  	}
  
  else if (isNN4) {
  
    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 noshade bordercolor=#000000 border=' + borderSize + '><tr align=left valign=middle><td></td></tr></table>';

  if (!menuLayer[menuNum][menuIndex]) {
    menuLayer[menuNum][menuIndex] = true;

    if (isIE4) {
      document.all[menuHolder[menuNum]].insertAdjacentHTML("BeforeEnd",layerString);

      document.all[menuID].innerHTML = htmlString;
      document.all[menuID].style.zIndex = menuIndex * 2;
    }
    else if (isNN4) {
      document.layers[menuID] = new Layer(menuPadX,document.layers[menuHolder[menuNum]]);

      document.layers[menuID].visibility = "hidden";
      document.layers[menuID].zIndex = menuIndex * 2;
      document.layers[menuID].document.open();
      document.layers[menuID].document.writeln(htmlString);
      document.layers[menuID].document.close();
    }
  }
  
  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;

  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);

  menuFolderSwitch[menuNum][menuIndex] = false;
}

function showMenu(menuNum,menuIndex,menuX,menuY) {
  var itemDimY = menuY;
  var menuLength = menuFolder[menuNum][menuIndex].length;
  var menuDimX = menuWidth[menuNum][menuIndex] * charWidth + subMenuFlagSize;
  // var menuDimX = 175 // 210 jp changed
  var menuID = "";
  var itemID = "";
  var itemIndex = 0;

  if (menuShown != -1 && menuShown != menuNum)
    hideMenu(menuShown,0);

  menuShown = menuNum;

  if (!menuDone[menuNum][menuIndex]) {
    for (var i = 0; i < menuLength; i++) {
      itemIndex = menuFolder[menuNum][menuIndex][i];

      menuItem[menuNum][itemIndex].x = menuX;
      menuItem[menuNum][itemIndex].y = itemDimY;
      itemDimY +=  (menuItem[menuNum][itemIndex].type != flagSeparator)?charHeight:2;

      itemID = getItem(menuNum,itemIndex,menuDimX,charHeight,menuIndex);

      moveLayerTo(itemID,menuItem[menuNum][itemIndex].x,menuItem[menuNum][itemIndex].y);
    }

    menuID = getMenu(menuNum,menuIndex,menuDimX,itemDimY-menuY);
    moveLayerTo(menuID,menuX-borderSize,menuY-borderSize);

    menuDone[menuNum][menuIndex] = true;
  }

  for (var i = 0; i < menuLength; i++)
    showLayer(getItem(menuNum,menuFolder[menuNum][menuIndex][i],0,0,0));

  showLayer(getMenu(menuNum,menuIndex,0,0));
  
  menuFolderSwitch[menuNum][menuIndex] = true;
}

function getMenuSizeX(menuNum,menuIndex) {
  var menuLength = menuFolder[menuNum][menuIndex].length;
  var itemIndex = 0;
  var thisMenuDimX = menuWidth[menuNum][menuIndex] * charWidth + subMenuFlagSize;
  var menuDimX = thisMenuDimX;
  var subMenuDimX = 0;

  for (var i = 0; i < menuLength; i++) {
    itemIndex = menuFolder[menuNum][menuIndex][i];
    
    if (menuItem[menuNum][itemIndex].type == flagMenu) {
      subMenuDimX = getMenuSizeX(menuNum,menuItem[menuNum][itemIndex].folder);

      if (menuDimX < (thisMenuDimX + subMenuDimX))
        menuDimX = thisMenuDimX + subMenuDimX;
    }
  }

  return menuDimX;
}

function getMenuSizeY(menuNum,menuIndex) {
  var menuLength = menuFolder[menuNum][menuIndex].length;
  var itemIndex = 0;
  var menuDimY = 0;
  var subMenuDimY = 0;
  var maxSubMenuDimY = 0;

  for (var i = 0; i < menuLength; i++) {
    itemIndex = menuFolder[menuNum][menuIndex][i];
    
    if (menuItem[menuNum][itemIndex].type == flagMenu) {
      subMenuDimY = getMenuSizeY(menuNum,menuItem[menuNum][itemIndex].folder);

      if (maxSubMenuDimY < (menuDimY + subMenuDimY))
        maxSubMenuDimY = menuDimY + subMenuDimY;
        
      menuDimY += charHeight;
    }
    else if (menuItem[menuNum][itemIndex].type == flagSeparator)
      menuDimY += 2
    else
      menuDimY += charHeight;
  }

  if (menuDimY < maxSubMenuDimY)
    return maxSubMenuDimY
  else
    return menuDimY;
}



function setMenuSize(menuHolderID,menuDimX,menuDimY) {
  document.layers[menuHolderID].document.open();
  document.layers[menuHolderID].document.writeln("<table width=" + menuDimX + " height=" + menuDimY + " cellpadding=0 cellspacing=0 border=0 class=\"menuback\"><tr><td></td></tr></table>");
  document.layers[menuHolderID].document.close();
}

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) {
        menuSizeX = getMenuSizeX(i,0) + borderSize * 2;
        menuSizeY = getMenuSizeY(i,0) + borderSize * 2;
        setMenuSize(menuHolder[i],menuSizeX,menuSizeY);
      }
    }

    if (isNN4)
      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() {
  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);
}

function closeMenu(menuNum) {
  menuShown = -1;
  hideMenu(menuNum,0);
}

// Script ends
