//--------------------------------------------------------
// globals variables
//--------------------------------------------------------
var m_lTimerId = 0;
var m_aDisplayed = new Array();
var m_aMenu = new Array();
var m_iAlignment = 0;
var m_iTopMenuWidth = 0;
var m_sVersion = '1.07';
var m_iColsPerRow = 9999;
//var m_iColsPerRow = 3;
var m_iMenuRowSpacing = 5;
var m_sSecFunctionList = "";

// browser identification variables
var m_bDOM = false; 
var m_bIE4 = false; 
var m_bExplorer = false; 
var m_bNS4 = false; 
var m_bDyn = false; 

m_bExplorer = (document.all ? true : false);
m_bDOM = (document.getElementById ? true : false); 
m_bIE4 = ((document.all && !m_bDOM) ? true : false);
m_bNS4 = (document.layers ? true : false);
m_bDyn = (m_bExplorer || m_bNS4 || m_bDOM);


//--------------------------------------------------------
// StyleProperty()
//--------------------------------------------------------
function StyleProperty(sId)
{
  var obj;
  if (m_bDOM) obj = document.getElementById(sId);
  if (m_bIE4) obj = document.all[sId];
  if (m_bNS4) obj = document.layers[sId];
  return (m_bNS4 ? obj : obj.style);
} 


//--------------------------------------------------------
// ShowMenu()
//--------------------------------------------------------
function ShowMenu(iMenu, iMenuItem)
{
  var iTargetMenu;
  var x1;
  var y1;
  
  clearTimeout(m_lTimerId);

  HideAllMenus(iMenu);

  m_aDisplayed = GetMenuParents(iMenu, iMenuItem);
  SetItemBackground(true);

  iTargetMenu = m_aMenu[iMenu][iMenuItem].iChildMenu;
  if (iTargetMenu > 0) {
    x1 = parseInt(m_aMenu[iMenu][0].ItemStyle.left) + parseInt(m_aMenu[iMenu][iMenuItem].ItemStyle.left);
    y1 = parseInt(m_aMenu[iMenu][0].ItemStyle.top) + parseInt(m_aMenu[iMenu][iMenuItem].ItemStyle.top);
    m_aMenu[iTargetMenu][0].ItemStyle.left = x1 + m_aMenu[iTargetMenu][0].x;
    m_aMenu[iTargetMenu][0].ItemStyle.top = y1 + m_aMenu[iTargetMenu][0].y;
    m_aMenu[iTargetMenu][0].ItemStyle.visibility = 'visible';
  }
}


//--------------------------------------------------------
// HideMenu()
// ** Commented out for subs to persist
//--------------------------------------------------------
function HideMenu(iMenu, iMenuItem)
{
 if ((iMenu == 0) && !m_aMenu[iMenu][iMenuItem].iChildMenu) 
    HideAllMenus(0);
  else 
    m_lTimerId = setTimeout('HideAllMenus(0)', 500);
}


//--------------------------------------------------------
// ClickMenuItem()
//--------------------------------------------------------
function ClickMenuItem(iMenu, iMenuItem)
{
  HideAllMenus(0);
  if (m_aMenu[iMenu][iMenuItem].sLink) 
    window.location.href = m_aMenu[iMenu][iMenuItem].sLink;
}


//--------------------------------------------------------
// GetMenuParents()
//--------------------------------------------------------
function GetMenuParents(iMenu, iMenuItem)
{
  itemArray = new Array(m_aMenu.length);

  while(1) {
    itemArray[iMenu] = iMenuItem;
    if (iMenu == 0) 
      return itemArray;
    iMenuItem = m_aMenu[iMenu][0].ParentItem;
    iMenu = m_aMenu[iMenu][0].ParentMenu;
  }
}


//--------------------------------------------------------
// SetItemBackground()
//--------------------------------------------------------
function SetItemBackground(isOver)
{
  var clrBack;
  var clrText;
  
  for (count = 0; count < m_aDisplayed.length; count++) {
    
    if (m_aDisplayed[count]) {

      with (m_aMenu[count][0]) with (m_aMenu[count][m_aDisplayed[count]]) {
        clrBack = isOver ? sBackColourOver : sBackColour;
        clrText = isOver ? sTextColourOver : sTextColour;
        if (m_bNS4) {
          ItemStyle.bgColor = clrBack;
          ItemStyle.color = clrText;
        } else {
          ItemStyle.backgroundColor = clrBack;
          ItemStyle.color = clrText;
        }
      }
    }
  }
}


//--------------------------------------------------------
// HideAllMenus()
//--------------------------------------------------------
function HideAllMenus(iMenu)
{
  var keepMenus = GetMenuParents(iMenu, 1);

  for (count = 0; count < m_aMenu.length; count++)
    if (!keepMenus[count] && m_aMenu[count]) 
      m_aMenu[count][0].ItemStyle.visibility = 'hidden';

  SetItemBackground(false);
}


//--------------------------------------------------------
// AddMenu()
//--------------------------------------------------------
function AddMenu(iMenuNumber, bVertical, sPopoutChar, x, y, iWidth, iMargin, 
                  sBorderClass, sTextClass,
                  sBackColour, sTextColour, sBackColourOver, sTextColourOver) 
{
  var m = m_aMenu.length;

  if (iMenuNumber != m)
    alert("AddMenu(): iMenuNumber should be " + m);
  
  m_aMenu[m] = new Array();
  m_aMenu[m][0] = new Object;
  
  m_aMenu[m][0].bVertical = bVertical;
  m_aMenu[m][0].sPopoutChar = sPopoutChar
  m_aMenu[m][0].x = x;
  m_aMenu[m][0].y = y;
  m_aMenu[m][0].iWidth = iWidth;
  m_aMenu[m][0].iMargin = iMargin;
  
  m_aMenu[m][0].sBackColour = sBackColour;
  m_aMenu[m][0].sTextColour = sTextColour;
  m_aMenu[m][0].sBackColourOver = sBackColourOver;
  m_aMenu[m][0].sTextColourOver = sTextColourOver;
  
  m_aMenu[m][0].sBorderClass = sBorderClass;
  m_aMenu[m][0].sTextClass = sTextClass;

  m_aMenu[m][0].ParentMenu = null;
  m_aMenu[m][0].ParentItem = null;
  m_aMenu[m][0].ItemStyle = null;
}


//--------------------------------------------------------
// AddMenuItem()
//--------------------------------------------------------
function AddMenuItem(sCaption, sLink, iSize, iSpacing, iChildMenu, sSecFunctionId) 
{
  var m = m_aMenu.length - 1;
  var i = m_aMenu[m].length;
  var s;
  
  // check if user has access
  if (m_sSecFunctionList != "*") {
    s = "," + m_sSecFunctionList + ",";
    if (s.indexOf("," + sSecFunctionId + ",") < 0)
      return;
  }
  
  m_aMenu[m][i] = new Object;
  m_aMenu[m][i].sCaption = '&nbsp;' + sCaption + '&nbsp;';
  m_aMenu[m][i].sLink = sLink;
  m_aMenu[m][i].iSize = iSize;
  m_aMenu[m][i].iSpacing = iSpacing;
  m_aMenu[m][i].iChildMenu = iChildMenu;
  m_aMenu[m][i].ItemStyle = null;
}


//--------------------------------------------------------
// ResizeMenus()
//--------------------------------------------------------
function ResizeMenus()
{
  var w;
  var iScrollbarW = 0;
  
  // If no menus have been created, nothing to do here...
  if (!m_aMenu[0][0].ItemStyle) 
    return;

  w = (m_bExplorer ? document.body.clientWidth : window.innerWidth)
  switch (m_iAlignment) {
    case 0: //left
      //m_aMenu[0][0].ItemStyle.left = 0;
      break;
    case 1: //center
      m_aMenu[0][0].ItemStyle.left = ((w-iScrollbarW) - m_iTopMenuWidth) / 2;
      break;
    case 2: //right
      m_aMenu[0][0].ItemStyle.left = (w-iScrollbarW) - m_iTopMenuWidth;
      break;
  }
}


//--------------------------------------------------------
// GenDiv1()
// Create the border div which contains
// the caption div
//--------------------------------------------------------
function GenDiv1(sItemId, x1, y1, w, h, sBackColour, sTextColour, sBorderClass, iMenu, iItem)
{
  var sOut = '';

  if (m_bDOM || m_bIE4) {
    sOut += '<div id="' + sItemId + '" style="position: absolute; z-index: 100; left: ' + x1 +
          '; top: ' + y1 + 
          '; width: ' + w + 
          '; height: ' + h + 
          '; visibility: inherit; ';
    if (sBackColour) 
      sOut += 'background-color: ' + sBackColour + '; ';
    if (sTextColour) 
      sOut += 'color: ' + sTextColour + '; ';
    sOut += '" ';
  }
  if (m_bNS4) {
    sOut += '<layer id="' + sItemId + '" left="' + x1 + '" top="' + y1 + '" width="' + 
          w + '" height="' + h + '" visibility="inherit" ';
    if (sBackColour) 
      sOut += 'bgcolor="' + sBackColour + '" ';
    if (sTextColour) 
      sOut += 'color="' + sTextColour + '" ';
  }
  if (sBorderClass) 
    sOut += 'class="' + sBorderClass + '" ';
  
  // Add mouseover and click handlers and finish div/layer.
  sOut += 'onMouseOver="ShowMenu(' + iMenu + ',' + iItem + ')" onMouseOut="HideMenu(' +
          iMenu + ',' + iItem + ')" onClick="ClickMenuItem(' + iMenu + ',' + iItem + ')">\n';

  return sOut;
}


//--------------------------------------------------------
// GenDiv2()
// Flyout div
//--------------------------------------------------------
function GenDiv2(sTextClass, w, sPopoutChar, iMargin)
{
  var sOut = '';

  if (m_bNS4) {
    sOut += '<layer class="' + sTextClass + '" left="'+ (w - 15) + '" top="' +
          iMargin + '">' + sPopoutChar + '</layer>';
  } else {
    sOut += '<div class="' + sTextClass + '" style="position: absolute; left: ' + (w - 15) +
          '; top: ' + iMargin + '">' + sPopoutChar + '</div>\n';
    /*
    sOut += '<div class="' + sTextClass + '" style="position: absolute; left: ' + (w - 15) +
          '; top: ' + iMargin + '"><img src="flyout.gif"></div>\n';
    */
  }
  return sOut;
}


//--------------------------------------------------------
// GenDiv3()
// Create the caption div which is contained
// within the border div
//--------------------------------------------------------
function GenDiv3(sBorderClass, sTextClass, w, h, sPopoutChar, iMargin, iMenu, iItem, sCaption)
{
  var sOut = '';

  if (m_bNS4) {
    
    if (sBorderClass)
      sOut += '<spacer type="block" width="' + (w - 8) + '" height="' + (h - 8) + '">';
    sOut += '<layer left="' + iMargin + '" top="' + iMargin + '" width="' + (w - (2 * iMargin)) + '" height="' +
            (h - (2 * iMargin)) + '"><a class="' + sTextClass + '" href="#" ' +
            'onClick="ClickMenuItem(' + iMenu + ',' + iItem + '); return false" ' +
            'onMouseOver="status=\'\'; return true;">' + sCaption + '</a></layer>';
  } else {
    sOut += '<div class="' + sTextClass + '" style="position: absolute; left: ' + iMargin +
            '; top: ' + iMargin + '; width: ' + (w - (2 * iMargin)) + '; height: ' + (h - (2 * iMargin)) +
            '">' + sCaption + '</div>';
  }
    
  // Finish off item.
  sOut += (m_bNS4 ? '</layer>' : '</div>\n\n');

  return sOut;
}


//--------------------------------------------------------
// WriteDiv()
//--------------------------------------------------------
function WriteDiv(sOut, iMenu)
{
  var DivObject;
  var s;
  
  if (m_bExplorer) {

    s = '<div id="menu' + iMenu + 'div" ' +
      'style="position: absolute; width: 3; height: 3; visibility: hidden; z-index: 100;">' +
      sOut + '</div>';
    document.body.insertAdjacentHTML('beforeEnd', s);
    m_aMenu[iMenu][0].ItemStyle = StyleProperty('menu' + iMenu + 'div');
    //document.frmLog.txtLog.value += s;

  } else if (m_bDOM) {

    DivObject = document.createElement('div');
    document.body.appendChild(DivObject);
    DivObject.innerHTML = sOut;
    m_aMenu[iMenu][0].ItemStyle = DivObject.style;
    m_aMenu[iMenu][0].ItemStyle.position = 'absolute';
    m_aMenu[iMenu][0].ItemStyle.visibility = 'hidden';
    //document.frmLog.txtLog.value += sOut;

  } else if (m_bNS4) {

    m_aMenu[iMenu][0].ItemStyle = new Layer(0);
    m_aMenu[iMenu][0].ItemStyle.document.write(sOut);
    m_aMenu[iMenu][0].ItemStyle.document.close();
    //document.frmLog.txtLog.value += sOut;
  }

  m_aMenu[iMenu][0].ItemStyle.left = m_aMenu[iMenu][0].x;
  m_aMenu[iMenu][0].ItemStyle.top = m_aMenu[iMenu][0].y;
  if (!m_bNS4) 
    m_aMenu[iMenu][0].ItemStyle.cursor = (m_bExplorer ? 'hand' : 'pointer');
  if (!m_bExplorer) 
    m_aMenu[iMenu][0].ItemStyle.zIndex = 1000;

}


//--------------------------------------------------------
// LinkMenus()
//--------------------------------------------------------
function LinkMenus(iMenu)
{
  var iItem;
  var sId;
  
  for (iItem = 1; iItem < m_aMenu[iMenu].length; iItem++) {
    sId = 'menu' + iMenu + 'item' + iItem;
    if (m_bDOM || m_bIE4) 
      m_aMenu[iMenu][iItem].ItemStyle = StyleProperty(sId);
    if (m_bNS4) {
      m_aMenu[iMenu][iItem].ItemStyle = m_aMenu[iMenu][0].ItemStyle.document[sId];
      with (m_aMenu[iMenu][0].ItemStyle.document[sId]) {
        document.captureEvents(Event.CLICK);
        document.onclick = new Function('ClickMenuItem(' + iMenu + ', ' + iItem + ')');
      }
    }
  }
}


//--------------------------------------------------------
// GenerateMenus()
//--------------------------------------------------------
function GenerateMenus()
{
  var iReduce;
  var w;
  var h;
  var sOut;
  var x1;
  var y1;
  var iCol = 0;
  var iRow = 0;
    
  if (!m_bDyn) 
    return;

  m_iTopMenuWidth = 0;
  
  for (iMenu = 0; iMenu < m_aMenu.length; iMenu++) {
  
    //if (m_aMenu[iMenu]) with (m_aMenu[iMenu][0]) {
    if (m_aMenu[iMenu]) {
  
      sOut = '';
      x1 = 0;
      y1 = 0;

      if (m_bNS4) 
        m_aMenu[iMenu][0].iMargin++;

      for (iItem = 1; iItem < m_aMenu[iMenu].length; iItem++) with (m_aMenu[iMenu][iItem]) {
        
        //alert(m_aMenu[iMenu][iItem].sCaption + ' - ' + y1);
        
        sItemId = 'menu' + iMenu + 'item' + iItem;
        iReduce = (m_aMenu[iMenu][0].sBorderClass && m_bDOM && !m_bExplorer ? 2 : 0)
        w = (m_aMenu[iMenu][0].bVertical ? m_aMenu[iMenu][0].iWidth : iSize) - iReduce;
        h = (m_aMenu[iMenu][0].bVertical ? iSize : m_aMenu[iMenu][0].iWidth) - iReduce;
        sOut += GenDiv1(sItemId, x1, y1, w, h, m_aMenu[iMenu][0].sBackColour, m_aMenu[iMenu][0].sTextColour, m_aMenu[iMenu][0].sBorderClass, iMenu, iItem);
        
        if (iChildMenu > 0) {
          m_aMenu[iChildMenu][0].ParentMenu = iMenu;
          m_aMenu[iChildMenu][0].ParentItem = iItem;
          if (m_aMenu[iMenu][0].sPopoutChar) {
            sOut += GenDiv2(sTextClass, w, m_aMenu[iMenu][0].sPopoutChar, iMargin);
          }
        }

        sOut += GenDiv3(m_aMenu[iMenu][0].sBorderClass, m_aMenu[iMenu][0].sTextClass, w, h, m_aMenu[iMenu][0].sPopoutChar, m_aMenu[iMenu][0].iMargin, iMenu, iItem, sCaption);
        if (m_aMenu[iMenu][0].bVertical) 
          y1 += iSize + iSpacing - 1;
        else 
          x1 += iSize + iSpacing - 1;

        if (iMenu == 0) {

          if (iRow == 0) {
            m_iTopMenuWidth += (w-1);
            if (iCol+1 != m_iColsPerRow)
              m_iTopMenuWidth += iSpacing;
          }

          iCol++;
          if (iCol == m_iColsPerRow) {
            x1 = 0;
            y1 += iWidth + m_iMenuRowSpacing;
            iCol = 0;
            iRow++;
          }
        }

      }

      WriteDiv(sOut, iMenu);
      
      LinkMenus(iMenu);
    }
  }
  
  ResizeMenus();

  m_aMenu[0][0].ItemStyle.visibility = 'visible';
}
