/*********************************************************************************************\
*       COPYRIGHT © 2010 ENVISION INFORMATION TECHNOLOGIES, LLC.    ALL RIGHTS RESERVED       *
*       DISTRIBUTION, UNAUTHORIZED USE AND MODIFICATION IS STRICTLY PROHIBITED                *
*       ENVISION IT, MADISON, WI    http://www.envisionitllc.com   info@envisionitllc.com     *
\*********************************************************************************************/

var EITMenuIs_IE = ((navigator.userAgent.toLowerCase().indexOf('msie') != -1) && (navigator.userAgent.toLowerCase().indexOf('opera') == -1));
var EITMenuIs_IE6 = ((navigator.userAgent.toLowerCase().indexOf('msie 6') != -1) && (navigator.userAgent.toLowerCase().indexOf('opera') == -1));
var EITMenuIs_IE7 = ((navigator.userAgent.toLowerCase().indexOf('msie 7') != -1) && (navigator.userAgent.toLowerCase().indexOf('opera') == -1));
var EITMenuIs_IE8 = ((navigator.userAgent.toLowerCase().indexOf('msie 8') != -1) && (navigator.userAgent.toLowerCase().indexOf('opera') == -1));
var EITMenuIs_Opera = (navigator.userAgent.toLowerCase().indexOf('opera') != -1);

function EITMenu_PropertyToInt(property_value)
{
  var test = parseInt(property_value);
  if (isNaN(test))
    return 0;
  return test;
}

// helper function to get the top of a menu item or container
function EITMenu_GetTop(srcObject)
{
  var topPosition = srcObject.offsetTop;
  var objectReference = srcObject;
  
  while (objectReference = objectReference.offsetParent)
  {
    // margin gets counted in the offsetParent.offsetTop, padding in the child.offsetTop, border doesn't get counted except in IE8 or Opera
    if (!EITMenuIs_IE8 && !EITMenuIs_Opera)
      topPosition += EITMenu_PropertyToInt(((EITMenuIs_IE)?(objectReference.currentStyle):(window.getComputedStyle(objectReference,''))).borderTopWidth);
    topPosition += objectReference.offsetTop;
  };
  
  return topPosition;
}; // end getTop

// helper function to get the left of a menu item or container
function EITMenu_GetLeft(srcObject)
{
  var leftPosition = srcObject.offsetLeft;
  var objectReference = srcObject;
  
  while (objectReference = objectReference.offsetParent)
  {
    // margin gets counted in the offsetParent.offsetLeft, padding in the child.offsetLeft, border doesn't get counted except in IE8 or Opera
    if (!EITMenuIs_IE8 && !EITMenuIs_Opera)
      leftPosition += EITMenu_PropertyToInt(((EITMenuIs_IE)?(objectReference.currentStyle):(window.getComputedStyle(objectReference,''))).borderLeftWidth);
    leftPosition += objectReference.offsetLeft;
  };
  
  return leftPosition;
}; // end getLeft

function EITMenu_OnMouseOut(EITMenu)
{
  if (EITMenu.EITtype == 'EITMenu') // This check to make sure the menu item has been initialized
  {
    // only change the class if the submenu is not visible
    if (EITMenu.EITisPopupSubMenuVisible != true || EITMenu.EIThasSlidingSubMenu)
    {
      EITMenu.EITisOver = false;
      EITMenu_UpdateClass(EITMenu);
    };
    
    // hide the menuElement if needed
    if (EITMenu.EITisPopupSubMenuVisible == true && EITMenu.EITtimerSubMenuID == undefined)
      EITMenu.EITtimerSubMenuID = setTimeout('EITMenu_HideSubMenu(\"' + EITMenu.id + '\")', EITMenu.EITmenuContainer.EITMenuHideMenuTimeout);
  };
};

function EITMenu_UpdateClass(EITMenu)
{
  // first, change the class as needed for the menuElement item
  var update_class = EITMenu.EITclassNormal;
  
  if (EITMenu.EITisOver)
  {
    update_class = update_class + ' ' + EITMenu.EITclassOver;
    if (EITMenu.EITisActiveLink)
      update_class = update_class + ' ' + EITMenu.EITclassOverActive;
  }
  else
  {
    if (EITMenu.EITisActiveLink)
      update_class = update_class + ' ' + EITMenu.EITclassActive;
  };
  
  EITMenu.className = update_class;
};

function EITMenu_OnMouseOver(EITMenu)
{
  if (EITMenu.EITtype == 'EITMenu') // This check to make sure the menu item has been initialized
  {
    EITMenu.EITisOver = true;
    EITMenu_UpdateClass(EITMenu);
    
    // next, show the submenu container if needed
    if (EITMenu.EIThasSubMenu && !EITMenu.EIThasSlidingSubMenu && EITMenu.EITisPopupSubMenuVisible == false)
      EITMenu_ShowSubMenu(EITMenu);
    
    // cancel the hide menuElement timer if set
    if (EITMenu.EITtimerSubMenuID != undefined)
    {
      window.clearTimeout(EITMenu.EITtimerSubMenuID);
      EITMenu.EITtimerSubMenuID = undefined;
    };
  };
};

// This function is called to show a submenu container
function EITMenu_ShowSubMenu(EITMenu)
{
  EITMenu_PositionSubMenu(EITMenu);
  EITMenu.EITsubMenuContainer.style.position = 'absolute';
  EITMenu.EITsubMenuContainer.style.visibility = 'visible';
  EITMenu.EITisPopupSubMenuVisible = true;
  
  if (EITMenu.EITtimerFadeID != undefined)
    window.clearInterval(EITMenu.EITtimerFadeID);
  
  // Hide any other submenus of siblings of this menu item
  if (EITMenu.EITisASubMenu) // has parent menus
  {
    for (var a=0; a < EITMenu.EITparentMenu.EITsubMenuContainer.childNodes.length; a++)
    {
      if ((EITMenu.EITparentMenu.EITsubMenuContainer.childNodes[a].EITisPopupSubMenuVisible) && (EITMenu.EITparentMenu.EITsubMenuContainer.childNodes[a] != EITMenu))
        EITMenu_HideSubMenu(EITMenu.EITparentMenu.EITsubMenuContainer.childNodes[a].id);
    };
  }
  else // is the root menu
  {
    for (var a=0; a < EITMenu.EITmenuContainer.childNodes.length; a++)
    {
      if ((EITMenu.EITmenuContainer.childNodes[a].EITisPopupSubMenuVisible) && (EITMenu.EITmenuContainer.childNodes[a] != EITMenu))
        EITMenu_HideSubMenu(EITMenu.EITmenuContainer.childNodes[a].id);
    };
  };
  
  if (EITMenu.EITmenuContainer.EITuseAlpha)
    EITMenu.EITtimerFadeID = setInterval('EITMenu_FadeSubMenuIn("' + EITMenu.id + '")', EITMenu.EITmenuContainer.EITMenuFadeInterval);
  
  if (EITMenu.EITsubMenuShowJS != undefined)
    EITMenu.EITsubMenuShowJS();
};

// Set the position of the submenu
function EITMenu_PositionSubMenu(EITMenu)
{
  // Set main display, which side of the menu item does the submenu appear
  switch (EITMenu.EITsubMenuDisplay)
  {
    case 'top':
      var top = EITMenu_GetTop(EITMenu);
      top -= EITMenu.EITsubMenuContainer.offsetHeight;
      top -= EITMenu_PropertyToInt(((EITMenuIs_IE)?(EITMenu.EITsubMenuContainer.currentStyle):(window.getComputedStyle(EITMenu.EITsubMenuContainer,''))).marginTop);
      top -= EITMenu_PropertyToInt(((EITMenuIs_IE)?(EITMenu.EITsubMenuContainer.currentStyle):(window.getComputedStyle(EITMenu.EITsubMenuContainer,''))).marginBottom);
      EITMenu.EITsubMenuContainer.style.top = top + 'px';
      break;
      
    case 'left':
      if (EITMenu.EITisASubMenu == true)
      {
        var left = EITMenu_GetLeft(EITMenu.EITparentMenu.EITsubMenuContainer);
        // Assuming margins are set the same for both containers, and we only want to apply them once
        //left -= EITMenu_PropertyToInt(((EITMenuIs_IE)?(EITMenu.EITparentMenu.EITsubMenuContainer.currentStyle):(window.getComputedStyle(EITMenu.EITparentMenu.EITsubMenuContainer,''))).marginLeft);
        left -= EITMenu.EITsubMenuContainer.offsetWidth;
        left -= EITMenu_PropertyToInt(((EITMenuIs_IE)?(EITMenu.EITsubMenuContainer.currentStyle):(window.getComputedStyle(EITMenu.EITsubMenuContainer,''))).marginLeft);
        left -= EITMenu_PropertyToInt(((EITMenuIs_IE)?(EITMenu.EITsubMenuContainer.currentStyle):(window.getComputedStyle(EITMenu.EITsubMenuContainer,''))).marginRight);
        EITMenu.EITsubMenuContainer.style.left = left + 'px';
      }
      else
      {
        var left = EITMenu_GetLeft(EITMenu);
        left -= EITMenu.EITsubMenuContainer.offsetWidth;
        left -= EITMenu_PropertyToInt(((EITMenuIs_IE)?(EITMenu.EITsubMenuContainer.currentStyle):(window.getComputedStyle(EITMenu.EITsubMenuContainer,''))).marginLeft);
        left -= EITMenu_PropertyToInt(((EITMenuIs_IE)?(EITMenu.EITsubMenuContainer.currentStyle):(window.getComputedStyle(EITMenu.EITsubMenuContainer,''))).marginRight);
        EITMenu.EITsubMenuContainer.style.left = left + 'px';
      }
      break;
      
    case 'right':
      if (EITMenu.EITisASubMenu == true)
        EITMenu.EITsubMenuContainer.style.left = (EITMenu_GetLeft(EITMenu.EITparentMenu.EITsubMenuContainer) + EITMenu.EITparentMenu.EITsubMenuContainer.offsetWidth) + "px";
      else
        EITMenu.EITsubMenuContainer.style.left = (EITMenu_GetLeft(EITMenu) + EITMenu.offsetWidth) + "px";
      break;
      
    case 'bottom':
      var top = EITMenu_GetTop(EITMenu);
      top += EITMenu.offsetHeight;
      EITMenu.EITsubMenuContainer.style.top = top + 'px';
      break;
      
  };
  
  // Set alignment, which edge of the menu does the submenu align with
  switch (EITMenu.EITsubMenuAlign)
  {
    case 'left':
      var left = EITMenu_GetLeft(EITMenu);
      left -= EITMenu_PropertyToInt(((EITMenuIs_IE)?(EITMenu.EITsubMenuContainer.currentStyle):(window.getComputedStyle(EITMenu.EITsubMenuContainer,''))).marginLeft);
      left -= EITMenu_PropertyToInt(((EITMenuIs_IE)?(EITMenu.EITsubMenuContainer.currentStyle):(window.getComputedStyle(EITMenu.EITsubMenuContainer,''))).borderLeftWidth);
      left -= EITMenu_PropertyToInt(((EITMenuIs_IE)?(EITMenu.EITsubMenuContainer.currentStyle):(window.getComputedStyle(EITMenu.EITsubMenuContainer,''))).paddingLeft);
      EITMenu.EITsubMenuContainer.style.left = left + 'px';
      break;
      
    case 'right':
      var left = EITMenu_GetLeft(EITMenu);
      left += EITMenu.offsetWidth;
      left -= EITMenu.EITsubMenuContainer.offsetWidth;
      left -= EITMenu_PropertyToInt(((EITMenuIs_IE)?(EITMenu.EITsubMenuContainer.currentStyle):(window.getComputedStyle(EITMenu.EITsubMenuContainer,''))).marginLeft);
      // Move the left back to line up the edge of the inner elements with the parent, note not adding (above) and subtracting (below) marginRight
      left += EITMenu_PropertyToInt(((EITMenuIs_IE)?(EITMenu.EITsubMenuContainer.currentStyle):(window.getComputedStyle(EITMenu.EITsubMenuContainer,''))).borderRightWidth);
      left += EITMenu_PropertyToInt(((EITMenuIs_IE)?(EITMenu.EITsubMenuContainer.currentStyle):(window.getComputedStyle(EITMenu.EITsubMenuContainer,''))).paddingRight);
      if (left < 0)
        left = 0;
      EITMenu.EITsubMenuContainer.style.left = left + 'px';
      break;
      
    case 'top':
      var top = EITMenu_GetTop(EITMenu);
      top -= EITMenu_PropertyToInt(((EITMenuIs_IE)?(EITMenu.EITsubMenuContainer.currentStyle):(window.getComputedStyle(EITMenu.EITsubMenuContainer,''))).marginTop);
      top -= EITMenu_PropertyToInt(((EITMenuIs_IE)?(EITMenu.EITsubMenuContainer.currentStyle):(window.getComputedStyle(EITMenu.EITsubMenuContainer,''))).borderTopWidth);
      top -= EITMenu_PropertyToInt(((EITMenuIs_IE)?(EITMenu.EITsubMenuContainer.currentStyle):(window.getComputedStyle(EITMenu.EITsubMenuContainer,''))).paddingTop);
      EITMenu.EITsubMenuContainer.style.top = top + 'px';
      break;
      
    case 'bottom':
      var top = EITMenu_GetTop(EITMenu);
      top += EITMenu.offsetHeight;
      top -= EITMenu.EITsubMenuContainer.offsetHeight;
      top -= EITMenu_PropertyToInt(((EITMenuIs_IE)?(EITMenu.EITsubMenuContainer.currentStyle):(window.getComputedStyle(EITMenu.EITsubMenuContainer,''))).marginTop);
      top += EITMenu_PropertyToInt(((EITMenuIs_IE)?(EITMenu.EITsubMenuContainer.currentStyle):(window.getComputedStyle(EITMenu.EITsubMenuContainer,''))).borderBottomWidth);
      top += EITMenu_PropertyToInt(((EITMenuIs_IE)?(EITMenu.EITsubMenuContainer.currentStyle):(window.getComputedStyle(EITMenu.EITsubMenuContainer,''))).paddingBottom);
      if (top < 0)
        top = 0;
      EITMenu.EITsubMenuContainer.style.top = top + 'px';
      break;
    
  };
}

// Step by Step fade in
function EITMenu_FadeSubMenuIn(EITMenuID)
{
  var EITMenu = document.getElementById(EITMenuID);
  
  if (EITMenuIs_IE)
  {
    if (EITMenu.EITsubMenuContainer.filters['alpha'] == undefined || EITMenu.EITsubMenuContainer.filters['alpha'].opacity >= EITMenu.EITsubMenuAlpha)
    {
      clearInterval(EITMenu.EITtimerFadeID);
      return;
    };
    
    // The adjusted amount to actually fade each step
    var fadeAmount = EITMenu.EITmenuContainer.EITMenuFadeDelta * (EITMenu.EITsubMenuAlpha / 100);
    
    var alpha = ((EITMenu.EITsubMenuContainer.filters['alpha'].opacity + fadeAmount) > EITMenu.EITsubMenuAlpha)?(EITMenu.EITsubMenuAlpha):(EITMenu.EITsubMenuContainer.filters['alpha'].opacity + fadeAmount);
    
    EITMenu.EITsubMenuContainer.style.filter = 'alpha(opacity=' + alpha + ')';
  }
  else // for mozilla
  {
    // Perhaps this is supposed to be >= 1 at the end - this looked like a bug though, so I changed it to what I feel it should be the submenualpha / 100
    if (EITMenu.EITsubMenuContainer.style.opacity == '' || parseFloat(EITMenu.EITsubMenuContainer.style.opacity) >= (EITMenu.EITsubMenuAlpha/100))
    {
      clearInterval(EITMenu.EITtimerFadeID);
      return;
    };
    
    // The adjusted amount to actually fade each step
    var fadeAmount = (EITMenu.EITmenuContainer.EITMenuFadeDelta/100) * (EITMenu.EITsubMenuAlpha / 100);
    
    var alpha = ((parseFloat(EITMenu.EITsubMenuContainer.style.opacity) + fadeAmount) > (EITMenu.EITsubMenuAlpha / 100))?((EITMenu.EITsubMenuAlpha/100)):(parseFloat(EITMenu.EITsubMenuContainer.style.opacity) + fadeAmount);
    
    EITMenu.EITsubMenuContainer.style.opacity = alpha;
  };
};

function EITMenu_HideSubMenu(EITMenuID)
{
  var EITMenu = document.getElementById(EITMenuID);
  
  // check each submenu of this menu and hide any visible
  if (EITMenu.EIThasSubMenu)
  {
    for (var a = 0; a < EITMenu.EITsubMenuContainer.childNodes.length; a++) 
    {
      if (EITMenu.EITsubMenuContainer.childNodes[a].EITisPopupSubMenuVisible) 
      {
        EITMenu_HideSubMenu(EITMenu.EITsubMenuContainer.childNodes[a].id);
      };
    };
  };
  
  EITMenu.EITtimerSubMenuID = undefined;
  EITMenu.EITisPopupSubMenuVisible = false;
  EITMenu.EITsubMenuContainer.style.visibility = 'hidden';
  EITMenu.EITisOver = false;
  EITMenu_UpdateClass(EITMenu);
  
  if (EITMenu.EITmenuContainer.EITuseAlpha == true)
  {
    if (EITMenu.EITtimerFadeID != undefined)
      window.clearInterval(EITMenu.EITtimerFadeID);
    
    if (EITMenuIs_IE)
      EITMenu.EITsubMenuContainer.style.filter = 'alpha(opacity=0)';
    else // for mozilla
      EITMenu.EITsubMenuContainer.style.opacity = 0;
  }
  
  if (EITMenu.EITsubMenuHideJS != undefined)
    EITMenu.EITsubMenuHideJS();
};

function EITMenu_PopupSubMenuOnMouseOut(EITSubMenu)
{
  var parentMenu = EITSubMenu.EITparentMenu;
  
  if (parentMenu.EITtype == 'EITMenu') // This check to make sure the menu item has been initialized
  {
    while (parentMenu != undefined)
    {
      if (parentMenu.EITisPopupSubMenuVisible && parentMenu.EITtimerSubMenuID == undefined)
        parentMenu.EITtimerSubMenuID = setTimeout('EITMenu_HideSubMenu(\"' + parentMenu.id + '\")', parentMenu.EITmenuContainer.EITMenuHideMenuTimeout);
      
      parentMenu = parentMenu.EITparentMenu;
    };
  };
};

// the mouse moves over the subMenuContainer - this is used to clear the timer to hide the subMenuContainer
function EITMenu_PopupSubMenuOnMouseOver(EITSubMenu)
{
  var parentMenu = EITSubMenu.EITparentMenu;
  
  if (parentMenu.EITtype == 'EITMenu') // This check to make sure the menu item has been initialized
  {
    while (parentMenu != undefined)
    {
      if (parentMenu.EITtimerSubMenuID != undefined)
      {
        window.clearTimeout(parentMenu.EITtimerSubMenuID);
        parentMenu.EITtimerSubMenuID = undefined;
      };
      
      parentMenu = parentMenu.EITparentMenu;
    };
  };
};

function EITMenu_SlidingMenuClicked(EITMenu)
{
  switch (EITMenu.EITSlidingSubMenuState)
  {
    case '0': // Closed
      if (EITMenu.EITmenuContainer.EITMenuOnlyAllowOneSliderOpen)
        CloseAllSiblings(EITMenu);
      EITMenu.EITsubMenuContainer.style.height = '0';
      EITMenu.EITsubMenuContainer.style.display = 'block';
      EITMenu.EITSlidingSubMenuState = '2';
      EITMenu.EITtimerSlideID = setInterval('EITMenu_SlideOpen("' + EITMenu.id + '")', EITMenu.EITmenuContainer.EITMenuSlideInterval);
      break;
    case '1': // Closing
      if (EITMenu.EITmenuContainer.EITMenuOnlyAllowOneSliderOpen)
        CloseAllSiblings(EITMenu);
      clearInterval(EITMenu.EITtimerSlideID);
      EITMenu.EITtimerSlideID = undefined;
      EITMenu.EITSlidingSubMenuState = '2';
      EITMenu.EITtimerSlideID = setInterval('EITMenu_SlideOpen("' + EITMenu.id + '")', EITMenu.EITmenuContainer.EITMenuSlideInterval);
      break;
    case '2': // Opening
      if (EITMenu.EITmenuContainer.EITMenuAllowSlideClickClose)
      {
        clearInterval(EITMenu.EITtimerSlideID);
        EITMenu.EITtimerSlideID = undefined;
        EITMenu.EITSlidingSubMenuState = '1';
        EITMenu.EITtimerSlideID = setInterval('EITMenu_SlideClose("' + EITMenu.id + '")', EITMenu.EITmenuContainer.EITMenuSlideInterval);
      };
      break;
    case '3': // Open
      if (EITMenu.EITmenuContainer.EITMenuAllowSlideClickClose)
      {
        EITMenu.EITSlidingSubMenuState = '1';
        EITMenu.EITtimerSlideID = setInterval('EITMenu_SlideClose("' + EITMenu.id + '")', EITMenu.EITmenuContainer.EITMenuSlideInterval);
      };
      break;
  };
};

function CloseAllSiblings(EITMenu)
{
  if (EITMenu.EITisASubMenu) // has parent menus
  {
    for (var a=0; a < EITMenu.EITparentMenu.EITsubMenuContainer.childNodes.length; a++)
    {
      if ((EITMenu.EITparentMenu.EITsubMenuContainer.childNodes[a].EIThasSlidingSubMenu) && (EITMenu.EITparentMenu.EITsubMenuContainer.childNodes[a].EITSlidingSubMenuState != '0') && (EITMenu.EITparentMenu.EITsubMenuContainer.childNodes[a].EITSlidingSubMenuState != '1'))
      {
        if (EITMenu.EITparentMenu.EITsubMenuContainer.childNodes[a].EITtimerSlideID != undefined)
        {
          clearInterval(EITMenu.EITparentMenu.EITsubMenuContainer.childNodes[a].EITtimerSlideID);
          EITMenu.EITparentMenu.EITsubMenuContainer.childNodes[a].EITtimerSlideID = undefined;
        }
        EITMenu.EITparentMenu.EITsubMenuContainer.childNodes[a].EITSlidingSubMenuState = '1';
        EITMenu.EITparentMenu.EITsubMenuContainer.childNodes[a].EITtimerSlideID = setInterval('EITMenu_SlideClose("' + EITMenu.EITparentMenu.EITsubMenuContainer.childNodes[a].id + '")', EITMenu.EITmenuContainer.EITMenuSlideInterval);
      };
    };
  }
  else // is the root menu
  {
    for (var a=0; a < EITMenu.EITmenuContainer.childNodes.length; a++)
    {
      if ((EITMenu.EITmenuContainer.childNodes[a].EIThasSlidingSubMenu) && (EITMenu.EITmenuContainer.childNodes[a].EITSlidingSubMenuState != '0') && (EITMenu.EITmenuContainer.childNodes[a].EITSlidingSubMenuState != '1'))
      {
        if (EITMenu.EITmenuContainer.childNodes[a].EITtimerSlideID != undefined)
        {
          clearInterval(EITMenu.EITmenuContainer.childNodes[a].EITtimerSlideID);
          EITMenu.EITmenuContainer.childNodes[a].EITtimerSlideID = undefined;
        }
        EITMenu.EITmenuContainer.childNodes[a].EITSlidingSubMenuState = '1';
        EITMenu.EITmenuContainer.childNodes[a].EITtimerSlideID = setInterval('EITMenu_SlideClose("' + EITMenu.EITmenuContainer.childNodes[a].id + '")', EITMenu.EITmenuContainer.EITMenuSlideInterval);
      };
    };
  };
}

function EITMenu_SlideOpen(EITMenuID)
{
  var EITMenu = document.getElementById(EITMenuID);
  if ((EITMenu.EITsubMenuContainer.offsetHeight + EITMenu.EITmenuContainer.EITMenuSlideDelta) >= EITMenu.EITsubMenuContainer.scrollHeight)
  {
    // Done opening
    EITMenu.EITsubMenuContainer.style.height = 'auto';
    EITMenu.EITSlidingSubMenuState = '3';
    clearInterval(EITMenu.EITtimerSlideID);
    EITMenu.EITtimerSlideID = undefined;
  }
  else
  {
    var height = EITMenu.EITsubMenuContainer.offsetHeight;
    height -= EITMenu_PropertyToInt(((EITMenuIs_IE)?(EITMenu.EITsubMenuContainer.currentStyle):(window.getComputedStyle(EITMenu.EITsubMenuContainer,''))).borderTopWidth);
    height -= EITMenu_PropertyToInt(((EITMenuIs_IE)?(EITMenu.EITsubMenuContainer.currentStyle):(window.getComputedStyle(EITMenu.EITsubMenuContainer,''))).borderBottomWidth);
    height -= EITMenu_PropertyToInt(((EITMenuIs_IE)?(EITMenu.EITsubMenuContainer.currentStyle):(window.getComputedStyle(EITMenu.EITsubMenuContainer,''))).paddingTop);
    height -= EITMenu_PropertyToInt(((EITMenuIs_IE)?(EITMenu.EITsubMenuContainer.currentStyle):(window.getComputedStyle(EITMenu.EITsubMenuContainer,''))).paddingBottom);
    height += EITMenu.EITmenuContainer.EITMenuSlideDelta;
    EITMenu.EITsubMenuContainer.style.height = height + 'px';
  };
};

function EITMenu_SlideClose(EITMenuID)
{
  var EITMenu = document.getElementById(EITMenuID);
  var height = EITMenu.EITsubMenuContainer.offsetHeight;
  height -= EITMenu_PropertyToInt(((EITMenuIs_IE)?(EITMenu.EITsubMenuContainer.currentStyle):(window.getComputedStyle(EITMenu.EITsubMenuContainer,''))).borderTopWidth);
  height -= EITMenu_PropertyToInt(((EITMenuIs_IE)?(EITMenu.EITsubMenuContainer.currentStyle):(window.getComputedStyle(EITMenu.EITsubMenuContainer,''))).borderBottomWidth);
  height -= EITMenu_PropertyToInt(((EITMenuIs_IE)?(EITMenu.EITsubMenuContainer.currentStyle):(window.getComputedStyle(EITMenu.EITsubMenuContainer,''))).paddingTop);
  height -= EITMenu_PropertyToInt(((EITMenuIs_IE)?(EITMenu.EITsubMenuContainer.currentStyle):(window.getComputedStyle(EITMenu.EITsubMenuContainer,''))).paddingBottom);
  height -= EITMenu.EITmenuContainer.EITMenuSlideDelta;
  if (height <= 0)
  {
    // Done closing
    height = 0;
    EITMenu.EITsubMenuContainer.style.display = 'none';
    EITMenu.EITSlidingSubMenuState = '0';
    clearInterval(EITMenu.EITtimerSlideID);
    EITMenu.EITtimerSlideID = undefined;
    EITMenu_SetAllSlidingChildrenToClose(EITMenu);
  };
  EITMenu.EITsubMenuContainer.style.height = height + 'px';
};

function EITMenu_SetAllSlidingChildrenToClose(EITMenu)
{
  for (var a=0; a < EITMenu.EITsubMenuContainer.childNodes.length; a++)
  {
    if (EITMenu.EITsubMenuContainer.childNodes[a].EIThasSlidingSubMenu && EITMenu.EITsubMenuContainer.childNodes[a].EITSlidingSubMenuState != '0')
    {
      EITMenu.EITsubMenuContainer.childNodes[a].EITsubMenuContainer.style.height = '0px';
      EITMenu.EITsubMenuContainer.childNodes[a].EITsubMenuContainer.style.display = 'none';
      EITMenu.EITsubMenuContainer.childNodes[a].EITSlidingSubMenuState = '0';
      if (EITMenu.EITsubMenuContainer.childNodes[a].EITtimerSlideID != undefined)
      {
        clearInterval(EITMenu.EITsubMenuContainer.childNodes[a].EITtimerSlideID);
        EITMenu.EITsubMenuContainer.childNodes[a].EITtimerSlideID = undefined;
      };
      EITMenu_SetAllSlidingChildrenToClose(EITMenu.EITsubMenuContainer.childNodes[a]);
    };
  };
};

function EITMenu_ContainerInitialize(EITMenuContainer, EITSubMenuContainer, useAlpha, menuHideMenuTimeout, menuFadeInterval, menuFadeDelta, menuOnlyAllowOneSliderOpen, menuAllowSlideClickClose, menuSlideInterval, menuSlideDelta) 
{
  EITMenuContainer.EITuseAlpha = useAlpha;
  EITMenuContainer.EITMenuHideMenuTimeout = menuHideMenuTimeout;
  EITMenuContainer.EITMenuFadeInterval = menuFadeInterval;
  EITMenuContainer.EITMenuFadeDelta = menuFadeDelta;
  EITMenuContainer.EITMenuOnlyAllowOneSliderOpen = menuOnlyAllowOneSliderOpen;
  EITMenuContainer.EITMenuAllowSlideClickClose = menuAllowSlideClickClose;
  EITMenuContainer.EITMenuSlideInterval = menuSlideInterval;
  EITMenuContainer.EITMenuSlideDelta = menuSlideDelta;
  EITMenuContainer.EITSubMenuContainer = EITSubMenuContainer;
  
  if (EITMenuContainer.EITSubMenuContainer != undefined)
  {
    var oldonload = window.onload;
    if (typeof window.onload != 'function') {
      window.onload = function() {
        EITMenuContainer.removeChild(EITMenuContainer.EITSubMenuContainer);
        document.body.appendChild(EITMenuContainer.EITSubMenuContainer);
      }
    }
    else {
      window.onload = function() {
        oldonload();
        EITMenuContainer.removeChild(EITMenuContainer.EITSubMenuContainer);
        document.body.appendChild(EITMenuContainer.EITSubMenuContainer);
      }
    }
  };
  
  EITMenuContainer.EITtype = 'EITMenuContainer'; // If this is set it is also initialized
};

function EITMenu_Initialize(EITMenu, menuContainer, parentMenu, hasSlidingSubMenu, slidingSubMenuOpen, subMenuContainer, subMenuDisplay, subMenuAlign, isActiveLink, classNormal, classActive, classOver, classOverActive)
{
  EITMenu.EITmenuContainer = menuContainer;
  EITMenu.EITparentMenu = parentMenu;
  
  // Submenu specific items
  EITMenu.EITisPopupSubMenuVisible = false;
  EITMenu.EITtimerSubMenuID = undefined;
  if (subMenuContainer != undefined)
  {
    EITMenu.EIThasSubMenu = true;
    EITMenu.EIThasSlidingSubMenu = hasSlidingSubMenu;
    EITMenu.EITtimerSlideID = undefined;
    if (slidingSubMenuOpen)
      EITMenu.EITSlidingSubMenuState = '3'; // Open
    else
      EITMenu.EITSlidingSubMenuState = '0'; // closed
    EITMenu.EITsubMenuContainer = subMenuContainer;
    EITMenu.EITsubMenuContainer.EITtype = 'EITsubMenu';
    EITMenu.EITsubMenuContainer.EITparentMenu = EITMenu;
    EITMenu.EITsubMenuDisplay = (subMenuDisplay != undefined) ? subMenuDisplay : 'bottom';
    switch (EITMenu.EITsubMenuDisplay)
    {
      case 'top':
      case 'bottom':
        EITMenu.EITsubMenuAlign = (subMenuAlign == 'right') ? subMenuAlign : 'left';
        break;
      case 'left':
      case 'right':
        EITMenu.EITsubMenuAlign = (subMenuAlign == 'bottom') ? subMenuAlign : 'top';
        break;
    };
    
    if (menuContainer.EITuseAlpha) // If using fade in, save the container alpha and initialize submenus to transparent
    {
      if (EITMenuIs_IE)
      {
        if (EITMenu.EITsubMenuContainer.filters['alpha'] == undefined)
          EITMenu.EITsubMenuAlpha = 100;
        else
          EITMenu.EITsubMenuAlpha = EITMenu.EITsubMenuContainer.filters['alpha'].opacity;
        if (EITMenu.EITsubMenuAlpha == undefined)
          EITMenu.EITsubMenuAlpha = 100;
        EITMenu.EITsubMenuContainer.style.filter = 'alpha(opacity=0)';
      }
      else // for mozilla
      {
        if (EITMenu.EITsubMenuContainer.style.opacity == '')
          EITMenu.EITsubMenuAlpha = 100;
        else
          EITMenu.EITsubMenuAlpha = Number(Math.round(parseFloat(EITMenu.EITsubMenuContainer.style.opacity) * 100));
        EITMenu.EITsubMenuContainer.style.opacity = 0;
      }
      EITMenu.EITtimerFadeID = undefined;
    }
  };
  
  // Setting the style width to the computed width is required for IE6
  // otherwise the mouseover of the menu item will only occur for the text
  if (EITMenuIs_IE6) {
    if ((EITMenu.EITparentMenu == undefined) || !EITMenu.EITparentMenu.EIThasSlidingSubMenu)
    {
      var width = EITMenu.offsetWidth;
      EITMenu.EITInitializeOffsetWidth = width; // Do not comment out, used by sliding menus
      width -= EITMenu_PropertyToInt(EITMenu.currentStyle.borderLeftWidth);
      width -= EITMenu_PropertyToInt(EITMenu.currentStyle.borderRightWidth);
      width -= EITMenu_PropertyToInt(EITMenu.currentStyle.paddingLeft);
      width -= EITMenu_PropertyToInt(EITMenu.currentStyle.paddingRight);
      // EITMenu.EITComputedWidth = width;
      EITMenu.style.width = width + 'px';
      for(index = 0; index < EITMenu.childNodes.length; index++) {
        if (EITMenu.childNodes[index].nodeName.toLowerCase() == 'a') {
          width -= EITMenu_PropertyToInt(EITMenu.childNodes[index].currentStyle.borderLeftWidth);
          width -= EITMenu_PropertyToInt(EITMenu.childNodes[index].currentStyle.borderRightWidth);
          width -= EITMenu_PropertyToInt(EITMenu.childNodes[index].currentStyle.paddingLeft);
          width -= EITMenu_PropertyToInt(EITMenu.childNodes[index].currentStyle.paddingRight);
          width -= EITMenu_PropertyToInt(EITMenu.childNodes[index].currentStyle.marginLeft);
          width -= EITMenu_PropertyToInt(EITMenu.childNodes[index].currentStyle.marginRight);
          // EITMenu.childNodes[index].EITComputedWidth = width;
          EITMenu.childNodes[index].style.width = width + 'px';
        };
      };
    }
    else // This is a sliding submenu, need to set width differently
    {
      // Get width this item's parent takes up in it's container
      var width = EITMenu.EITparentMenu.EITInitializeOffsetWidth;
      // EITMenu.EITParentOffsetWidth = width;
      width += EITMenu_PropertyToInt(EITMenu.EITparentMenu.currentStyle.marginLeft);
      width += EITMenu_PropertyToInt(EITMenu.EITparentMenu.currentStyle.marginRight);
      // This sliding item's container = EITMenu.EITparentMenu.EITsubMenuContainer
      width -= EITMenu_PropertyToInt(EITMenu.EITparentMenu.EITsubMenuContainer.currentStyle.marginLeft);
      width -= EITMenu_PropertyToInt(EITMenu.EITparentMenu.EITsubMenuContainer.currentStyle.marginRight);
      width -= EITMenu_PropertyToInt(EITMenu.EITparentMenu.EITsubMenuContainer.currentStyle.borderLeftWidth);
      width -= EITMenu_PropertyToInt(EITMenu.EITparentMenu.EITsubMenuContainer.currentStyle.borderRightWidth);
      width -= EITMenu_PropertyToInt(EITMenu.EITparentMenu.EITsubMenuContainer.currentStyle.paddingLeft);
      width -= EITMenu_PropertyToInt(EITMenu.EITparentMenu.EITsubMenuContainer.currentStyle.paddingRight);
      // This item
      width -= EITMenu_PropertyToInt(EITMenu.currentStyle.marginLeft);
      width -= EITMenu_PropertyToInt(EITMenu.currentStyle.marginRight);
      EITMenu.EITInitializeOffsetWidth = width; // Do not comment out, used by sliding menus
      width -= EITMenu_PropertyToInt(EITMenu.currentStyle.borderLeftWidth);
      width -= EITMenu_PropertyToInt(EITMenu.currentStyle.borderRightWidth);
      width -= EITMenu_PropertyToInt(EITMenu.currentStyle.paddingLeft);
      width -= EITMenu_PropertyToInt(EITMenu.currentStyle.paddingRight);
      // EITMenu.EITComputedWidth = width;
      EITMenu.style.width = width + 'px';
      for(index = 0; index < EITMenu.childNodes.length; index++) {
        if (EITMenu.childNodes[index].nodeName.toLowerCase() == 'a') {
          width -= EITMenu_PropertyToInt(EITMenu.childNodes[index].currentStyle.borderLeftWidth);
          width -= EITMenu_PropertyToInt(EITMenu.childNodes[index].currentStyle.borderRightWidth);
          width -= EITMenu_PropertyToInt(EITMenu.childNodes[index].currentStyle.paddingLeft);
          width -= EITMenu_PropertyToInt(EITMenu.childNodes[index].currentStyle.paddingRight);
          width -= EITMenu_PropertyToInt(EITMenu.childNodes[index].currentStyle.marginLeft);
          width -= EITMenu_PropertyToInt(EITMenu.childNodes[index].currentStyle.marginRight);
          // EITMenu.childNodes[index].EITComputedWidth = width;
          EITMenu.childNodes[index].style.width = width + 'px';
        };
      };
    };
  };
  
  EITMenu.EITisOver = false;
  EITMenu.EITisActiveLink = isActiveLink;
  EITMenu.EITisASubMenu = (parentMenu == undefined) ? false : true;
  
  // Classes
  EITMenu.EITclassNormal = classNormal;
  EITMenu.EITclassActive = classActive;
  EITMenu.EITclassOver = classOver;
  EITMenu.EITclassOverActive = classOverActive;
  
  EITMenu.EITtype = 'EITMenu'; // If this is set it is also initialized
};
