// JavaScript Document

/*
  The CrumbClass contains the methods for searching through an array of pages and returning the page's base url and name.
  It assumes that the array you use is set up the same way as the one in the function BreadCrumbs ( "00.00.00.00, page url, page name" )
  It does some amount of error-checking, but it won't stop all possible data-entry errors.
*/

function CrumbClass(page_array)
{
  // var PageSource = "search.html";
  var PageSource = document.location.href.substr(document.location.href.lastIndexOf("\/") + 1);  // the source file name, no URL
  if (PageSource.indexOf("#") != -1) PageSource = PageSource.split("#")[0];  // in case the URL contains a local anchor.
  if (PageSource == "") PageSource = "index.html"; //if the location does not have an href, you must be on the index page
  var searchString =  new String();
  var searchArray = new Array();
  this.search_method = function(search_term)
  {
    for (var i=0; i<page_array.length; i++)
    {
      if (page_array[i].indexOf(search_term) != -1) this.resultString = page_array[i];
    }
    return this.resultString.split("|");
  }
  this.search_results = this.search_method(PageSource);  //this.search_results array contains the three elements of the current page's entry in the ArrPages array
  this.section_array = this.search_results[0].split(".");  //therefore this.section_array contains the four section elements of the current page
  this.url_array = this.search_results[1].split(".");  //split the text of the url from the .shtml
  this.base_url = this.url_array[0];  //store it for output in the printer-friendly link
  this.name = this.search_results[2];  //the name of the current page is the third element in the results array when you search through the array for any attribute of the current page
  this.homePage_array = this.search_method('00.00.00.00');  //use the search method about to find the metadata about the home page
  this.homePage_url = this.homePage_array[1];  //put the home page url into a variable
  this.homePage_name = this.homePage_array[2];  //put the home page name into a variable

  this.crumb_constructor = function()//this is the function that builds the breadcrumb, using the data from above and data it finds
  {
    if (this.homePage_name != this.name)//check to make sure the instance is not running on the home page
    {
      this.crumbString = "<a href=\"" + this.homePage_url + "\">" + this.homePage_name + "<\/a> > ";
      for (var i=0; i<3; i++)
      {
        switch(i)
        {
          case 0:
            if (this.section_array[i+1] != "00" )//if there is a second level page number, go find the first level page and add its url and name to crumbString
            {
            searchString =  this.section_array[i] +".00.00.00";
            searchArray = this.search_method(searchString);

              if (searchArray[1] != this.homePage_url)//errorcheck
              {
                this.level1_url = searchArray[1];
                this.level1_name  = searchArray[2];
                this.crumbString += "<a href=\"" + this.level1_url + "\" style=\"color:#000000\">" + this.level1_name + "<\/a> > "; //add the level 1 page name and url to the breadcrumb
              }
              else this.crumbString += "Error: Missing Entry in page list > ";
            }
            break;
          case 1:
            if (this.section_array[i+1] != "00" )//if there is a third level page number, go find the second level page and add its url and name to crumbString
            {
              searchString =  this.section_array[i-1] + "." + this.section_array[i] +".00.00";
              searchArray = this.search_method(searchString);
                if (searchArray[1] != this.level1_url)
                {
                  this.level2_url = searchArray[1];
                  this.level2_name  = searchArray[2];
                  this.crumbString += "<a href=\"" + this.level2_url + "\" style=\"color:#000000\">" + this.level2_name + "<\/a> > ";
                }
                else this.crumbString += "Error: Missing Entry in page list > ";
             }
             break;
           case 2:
             if (this.section_array[i+1] != "00" )//if there is a fourth level page number, go find the third level page and add its url and name to crumbString
             {
               searchString = this.section_array[i-2] + "." + this.section_array[i-1] + "." + this.section_array[i] + ".00";
               searchArray = this.search_method(searchString);
               if (searchArray[1] != this.level2_url)
               {
                 this.level3_url = searchArray[1];
                 this.level3_name  = searchArray[2];
                 this.crumbString += "<a href=\"" + this.level3_url + "\" style=\"color:#000000\">" + this.level3_name + "<\/a> > " ;
               }
               else this.crumbString += "Error: Missing Entry in page list > ";
              }
              break;//if there is not a fourth level page number, don't add
            }
        }
    this.crumbString += this.name;
    }//end homepage check if
    else this.crumbString = this.name;
  }//end crumb_constructor

  this.outputCrumb = function()
  {
   var x =  this.crumb_constructor();//fire up the crumb constructor
   document.write(this.crumbString);//output the resulting crumbString
  }

}//end CrumbClass


// Using a separate CrumbClass class instance, the correct breadcrumb for each page is output.

function Breadcrumbs()
{
  var Crumb = new CrumbClass(ArrPages);//instantiate CrumbClass

  // Don't output breadcrumbs on the home page.

  if(Crumb.search_results[1] != Crumb.homePage_array[1])
  {
    var strOut = Crumb.outputCrumb();//this method calls the function that creates the breadcrumb and writes it out to the page
  }
}

function CrumbCategory()
{
  // A crumb has a standard search_results property, which is the array of metadata
  //  for this page. If there's a fourth element, [3], then the page has a "category"
  //  that should be displayed in the header of the page.

  var Crumb = new CrumbClass(ArrPages);
  if (Crumb.search_results[3])
  {
    var strOut = ":&nbsp;" + Crumb.search_results[3];
    document.write(strOut);
  }
  else {return;}
}

/* CUSTOM INTERFACES to MM JUMP MENUS
   These interface to macromedia generated code for flyout navigation menus.
   The purposes are to
     a) auto generate site "navigation bars" and "flyout menus" based on the "crumbs" metadata,
     b) hardwire certain menu settings that dreamweaver normally makes customizable,
     c) avoid modifying the MM menu code directly. */

function makeMenu(strCellID)
{
  var arrArg = strCellID.split("_");       // If the row and cell are id'd properly, "menu_01_c1" would become [menu, 01, c1]
  var objRow = suit.getObject(strCellID);  // Use the argument to get the object of the same name.

    // this gets the chapter number of the navigation node id. i.e. "01" becomes "01.00.00.00"

  var Crumb = new CrumbClass(ArrPages);
  var arrMeta = Crumb.search_method(arrArg[1] + ".00.00.00"); // get the metadata for the first page of this nav node's chapter

  if (arrMeta[1] == "mit_monthly_calendar.html")
  {
    var StrSystem = suit.systemName("template_module");
    if (StrSystem = "template_module") StrSystem = "hurricane.mit.edu";
    else StrSystem = "informit.mit.edu";
    arrMeta[1] = "http://events.mit.edu/scripts/monthly_ext.pl?groupid=" + CalendarGroupID + "&location=http://" + StrSystem + "/template_module/";
  }

    // Different routine depending on whether output is for the first cell
    // or the second cell of a menu-table entry.

  switch(arrArg[2]) // There are two formmatted table cells for the nav bar.
  {
    case "c1":
      var strChapterLink = "<div><a class=\"MenuLink\" href=\"" + arrMeta[1] + "\">" + arrMeta[2] + "</a></div>";

        // If the current page is part of the nav for this chapter, append sub-section links.

      if(arrArg[1] == Crumb.section_array[0]) // see CrumbClass for what the second value means
      {
        objRow.style.backgroundColor = g_css_secondary_color; // get the global setting for the background color, see custom.js
        for(var i=0; i<ArrPages.length; i++)  // loop through meta data for all pages in the site
        {
          var arrThisMeta = ArrPages[i].split("|");
          var arrSection = arrThisMeta[0].split(".");
          if ( arrSection[0]==arrArg[1] && arrSection[1]!="00" && arrSection[2]=="00" && arrSection[3]=="00") // chapter num matches, direct children in the form XX.XX.00.00
          {
            strChapterLink += "<div class=\"MenuItemIndent\"><a class=\"MenuLink\" href=\"" + arrThisMeta[1] + "\">" + arrThisMeta[2] + "</a></div>";
          }
        }
      }

      document.write(strChapterLink);
      break;

    case "c2":
      var strFlyoutHTML = new String();
        /*
          If the page's chapter _doesn't_ match the chapter of the given menu item,
          output the arrow and flyout menu from javascript library.
        */

      if(arrArg[1] != Crumb.section_array[0]) // see CrumbClass for what the second value means
      {
        strFlyoutHTML += "<a class=\"menu_image\" href=\"javascript:;\" onMouseOver=\"showMenu(window.menu_" + arrArg[1] + ",event.clientX+6,event.clientY-12,\'" + arrArg[1] + "\')\" onMouseOut=\"startTimeout()\">";
        strFlyoutHTML += "<img id=\"" + arrArg[1] + "\" src=\"images/greyarrow.gif\" width=\"7\" height=\"11\" border=\"0\"></a>";
      }
      else
      {
        objRow.style.backgroundColor = g_css_secondary_color;
        strFlyoutHTML = "&nbsp;";
      }

      document.write(strFlyoutHTML);
      break;
  }
}

function LoadMenus_Helper(strChapter, intWidth)
{
  if (!window.menu_default) // build a default menu object if one does not exist
  {
    l_cellWidth_default = 100;  // cell width
    window.menu_default = new Menu("root",l_cellWidth_default,g_cellHeight,g_fontFamily,g_fontSize,g_fontColor,g_fontColorHilite,g_bgColor,g_menuHiliteBgColor,g_alignHorizontal,g_alignVertical,g_padHorizontal,g_spaceVertical,g_timeout,g_subXoffset,g_subYoffset,g_posRelative,g_bgOpaque,g_verticalList,g_indent);
    menu_default.addMenuItem("Home Page","location='index.shtml'");
    menu_default.fontWeight = g_fontWeight;
    menu_default.hideOnMouseOut = true;
    menu_default.menuBorder = g_menuBorder;
    menu_default.bgColor = g_menuContainerBgColor;
    menu_default.menuLiteBgColor = g_menuContainerBgColor;
    menu_default.menuBorderBgColor = g_menuBorderBgColor;
  }

  /* Here I'm dynamically generating the name of a new Menu object and then
       the object itself. In JS, a dynamically named object can only happen
       via the eval() operator. I don't like burying a function call in a
       string operation, but that makes it go. */

  var strMenuName = "menu_" + strChapter;
  eval("window." + strMenuName + " = new Menu(\"root\",intWidth,g_cellHeight,g_fontFamily,g_fontSize,g_fontColor,g_fontColorHilite,g_bgColor,g_menuHiliteBgColor,g_alignHorizontal,g_alignVertical,g_padHorizontal,g_spaceVertical,g_timeout,g_subXoffset,g_subYoffset,g_posRelative,g_bgOpaque,g_verticalList,g_indent)");

  // Derive menu entries from ArrPages[] in "custom.js"

  for (var i = 0; i < ArrPages.length; i++)
  {
    if(ArrPages[i].substr(0,2) == strChapter)
    {
      ArrMeta = ArrPages[i].split("|");
      ArrTOC = ArrMeta[0].split(".");
      if (ArrTOC[1] != "00" && ArrTOC[2] == "00" && ArrTOC[3] == "00")
      {
        // Replace spaces and dashes with the unicode equivalent
	tmpString = ArrMeta[2];
        ArrMeta[2] = tmpString.replace(/ /g,"&#160;");
        tmpString = ArrMeta[2];
        ArrMeta[2] = tmpString.replace(/-/g,"&#45;");
        eval(strMenuName + ".addMenuItem(\"" + ArrMeta[2] + "\",\"location='" + ArrMeta[1] + "'\")");
        strMenuName.fontWeight = g_fontWeight;
        strMenuName.hideOnMouseOut = true;
        strMenuName.menuBorder = g_menuBorder;
        strMenuName.bgColor = g_menuContainerBgColor;
        strMenuName.menuLiteBgColor = g_menuContainerBgColor;
        strMenuName.menuBorderBgColor = g_menuBorderBgColor;
      }
    }
  }
}


//MM CODE FOR JUMP MENUS

// private scripts from here on

/**
 * mm_menu 20MAR2002 Version 6.0
 * Andy Finnell, March 2002
 * Copyright (c) 2000-2002 Macromedia, Inc.
 *
 * based on menu.js
 * by gary smith, July 1997
 * Copyright (c) 1997-1999 Netscape Communications Corp.
 *
 * Netscape grants you a royalty free license to use or modify this
 * software provided that this copyright notice appears on all copies.
 * This software is provided "AS IS," without a warranty of any kind.
 */
function Menu(label, mw, mh, fnt, fs, fclr, fhclr, bg, bgh, halgn, valgn, pad, space, to, sx, sy, srel, opq, vert, idt)
{
  this.version = "020320 [Menu; mm_menu.js]";
  this.type = "Menu";
  this.menuWidth = mw;
  this.menuItemHeight = mh;
  this.fontSize = fs;
  this.fontWeight = g_fontWeight;
  this.fontFamily = fnt;
  this.fontColor = fclr;
  this.fontColorHilite = fhclr;
  this.bgColor = g_bgColor;
  this.menuBorder = g_menuBorder;
  this.menuBgOpaque = opq;
  this.menuItemBorder = 0;
  this.menuItemIndent = idt;
  this.menuItemBgColor = bg;
  this.menuItemVAlign = valgn;
  this.menuItemHAlign = halgn;
  this.menuItemPadding = pad;
  this.menuItemSpacing = space;
  this.menuLiteBgColor = g_menuHiliteBgColor;
  this.menuBorderBgColor = g_menuBorderBgColor;
  this.menuHiliteBgColor = bgh;
  this.menuContainerBgColor = g_menuContainerBgColor;
  this.childMenuIcon = "arrows.gif";
  this.submenuXOffset = sx;
  this.submenuYOffset = sy;
  this.submenuRelativeToItem = srel;
  this.vertical = vert;
  this.items = new Array();
  this.actions = new Array();
  this.childMenus = new Array();
  this.hideOnMouseOut = true;
  this.hideTimeout = to;
  this.addMenuItem = addMenuItem;
  this.writeMenus = writeMenus;
  this.showMenu = showMenu;
  this.onMenuItemOver = onMenuItemOver;
  this.onMenuItemAction = onMenuItemAction;
  this.hideMenu = hideMenu;
  this.hideChildMenu = hideChildMenu;
  if (!window.menus) window.menus = new Array();
  this.label = " " + label;
  window.menus[this.label] = this;
  window.menus[window.menus.length] = this;
  if (!window.activeMenus) window.activeMenus = new Array();
}

function addMenuItem(label, action) {
  this.items[this.items.length] = label;
  this.actions[this.actions.length] = action;
}

function FIND(item) {
  if( window.mmIsOpera ) return(document.getElementById(item));
  if (document.all) return(document.all[item]);
  if (document.getElementById) return(document.getElementById(item));
  return(false);
}

function writeMenus(container) {
  if (window.triedToWriteMenus) return;
  var agt = navigator.userAgent.toLowerCase();
  window.mmIsOpera = agt.indexOf("opera") != -1;
  if (!container && document.layers) {
    window.delayWriteMenus = this.writeMenus;
    var timer = setTimeout('delayWriteMenus()', 500);
    container = new Layer(100);
    clearTimeout(timer);
  } else if (document.all || document.hasChildNodes || window.mmIsOpera) {
    document.writeln('<span id="menuContainer"></span>');
    container = FIND("menuContainer");
  }

  window.mmHideMenuTimer = null;
  if (!container) return;
  window.triedToWriteMenus = true;
  container.isContainer = true;
  container.menus = new Array();
  for (var i=0; i<window.menus.length; i++)
    container.menus[i] = window.menus[i];
  window.menus.length = 0;
  var countMenus = 0;
  var countItems = 0;
  var top = 0;
  var content = '';
  var lrs = false;
  var theStat = "";
  var tsc = 0;
  if (document.layers) lrs = true;
  for (var i=0; i<container.menus.length; i++, countMenus++) {
    var menu = container.menus[i];
    if (menu.bgImageUp || !menu.menuBgOpaque) {
      menu.menuBorder = 0;
      menu.menuItemBorder = 0;
    }
    if (lrs) {
      var menuLayer = new Layer(100, container);
      var lite = new Layer(100, menuLayer);
      lite.top = menu.menuBorder;
      lite.left = menu.menuBorder;
      var body = new Layer(100, lite);
      body.top = menu.menuBorder;
      body.left = menu.menuBorder;
    } else {
      content += ''+
      '<div id="menuLayer'+ countMenus +'" style="position:absolute;z-index:1;left:10px;top:'+ (i * 100) +'px;visibility:hidden;color:' +  menu.menuBorderBgColor + ';">\n'+
      '  <div id="menuLite'+ countMenus +'" style="position:absolute;z-index:1;left:'+ menu.menuBorder +'px;top:'+ menu.menuBorder +'px;visibility:hide;" onmouseout="mouseoutMenu();">\n'+
      '   <div id="menuFg'+ countMenus +'" style="position:absolute;left:'+ menu.menuBorder +'px;top:'+ menu.menuBorder +'px;visibility:hide;">\n'+
      '';
    }
    var x=i;
    for (var i=0; i<menu.items.length; i++) {
      var item = menu.items[i];
      var childMenu = false;
      var defaultHeight = menu.fontSize+2*menu.menuItemPadding;
      if (item.label) {
        item = item.label;
        childMenu = true;
      }
      menu.menuItemHeight = menu.menuItemHeight || defaultHeight;
      var itemProps = '';
      if( menu.fontFamily != '' ) itemProps += 'font-family:' + menu.fontFamily +';';
      itemProps += 'font-weight:' + menu.fontWeight + ';fontSize:' + menu.fontSize + 'px;';
      if (menu.fontStyle) itemProps += 'font-style:' + menu.fontStyle + ';';
      if (document.all || window.mmIsOpera)
        itemProps += 'font-size:' + menu.fontSize + 'px;" onmouseover="onMenuItemOver(null,this);" onclick="onMenuItemAction(null,this);';
      else if (!document.layers) {
        itemProps += 'font-size:' + menu.fontSize + 'px;';
      }
      var l;
      if (lrs) {
        var lw = menu.menuWidth;
        if( menu.menuItemHAlign == 'right' ) lw -= menu.menuItemPadding;
        l = new Layer(lw,body);
      }
      var itemLeft = 0;
      var itemTop = i*menu.menuItemHeight;
      if( !menu.vertical ) {
        itemLeft = i*menu.menuWidth;
        itemTop = 0;
      }
      var dTag = '<div id="menuItem'+ countItems +'" style="position:absolute;left:' + itemLeft + 'px;top:'+ itemTop +'px;'+ itemProps +'">';
      var dClose = '</div>'
      if (menu.bgImageUp) dTag = '<div id="menuItem'+ countItems +'" style="background:url('+menu.bgImageUp+');position:absolute;left:' + itemLeft + 'px;top:'+ itemTop +'px;'+ itemProps +'">';

      var left = 0, top = 0, right = 0, bottom = 0;
      left = 1 + menu.menuItemPadding + menu.menuItemIndent;
      right = left + menu.menuWidth - 2*menu.menuItemPadding - menu.menuItemIndent;
      if( menu.menuItemVAlign == 'top' ) top = menu.menuItemPadding;
      if( menu.menuItemVAlign == 'bottom' ) top = menu.menuItemHeight-menu.fontSize-1-menu.menuItemPadding;
      if( menu.menuItemVAlign == 'middle' ) top = ((menu.menuItemHeight/2)-(menu.fontSize/2)-1);
      bottom = menu.menuItemHeight - 2*menu.menuItemPadding;
      var textProps = 'position:absolute;left:' + left + 'px;top:' + top + 'px;';
      if (lrs) {
        textProps +=itemProps + 'right:' + right + ';bottom:' + bottom + ';';
        dTag = "";
        dClose = "";
      }

      if(document.all && !window.mmIsOpera) {
        item = '<div align="' + menu.menuItemHAlign + '">' + item + '</div>';
      } else if (lrs) {
        item = '<div style="text-align:' + menu.menuItemHAlign + ';">' + item + '</div>';
      } else {
        var hitem = null;
        if( menu.menuItemHAlign != 'left' ) {
          if(window.mmIsOpera) {
            var operaWidth = menu.menuItemHAlign == 'center' ? -(menu.menuWidth-2*menu.menuItemPadding) : (menu.menuWidth-6*menu.menuItemPadding);
            hitem = '<div id="menuItemHilite' + countItems + 'Shim" style="position:absolute;top:1px;left:' + menu.menuItemPadding + 'px;width:' + operaWidth + 'px;text-align:'
              + menu.menuItemHAlign + ';visibility:visible;">' + item + '</div>';
            item = '<div id="menuItemText' + countItems + 'Shim" style="position:absolute;top:1px;left:' + menu.menuItemPadding + 'px;width:' + operaWidth + 'px;text-align:'
              + menu.menuItemHAlign + ';visibility:visible;">' + item + '</div>';
          } else {
            hitem = '<div id="menuItemHilite' + countItems + 'Shim" style="position:absolute;top:1px;left:1px;right:-' + (left+menu.menuWidth-3*menu.menuItemPadding) + 'px;text-align:'
              + menu.menuItemHAlign + ';visibility:visible;">' + item + '</div>';
            item = '<div id="menuItemText' + countItems + 'Shim" style="position:absolute;top:1px;left:1px;right:-' + (left+menu.menuWidth-3*menu.menuItemPadding) + 'px;text-align:'
              + menu.menuItemHAlign + ';visibility:visible;">' + item + '</div>';
          }
        } else hitem = null;
      }
      if(document.all && !window.mmIsOpera) item = '<div id="menuItemShim' + countItems + '" style="position:absolute;left:0px;top:0px;">' + item + '</div>';
      var dText  = '<div id="menuItemText'+ countItems +'" style="' + textProps + 'color:'+ menu.fontColor +';">'+ item +'&nbsp</div>\n'
            + '<div id="menuItemHilite'+ countItems +'" style="' + textProps + 'color:'+ menu.fontColorHilite +';visibility:hidden;">'
            + (hitem||item) +'&nbsp</div>';
      if (childMenu) content += ( dTag + dText + '<div id="childMenu'+ countItems +'" style="position:absolute;left:0px;top:3px;"><img src="'+ menu.childMenuIcon +'"></div>\n' + dClose);
      else content += ( dTag + dText + dClose);
      if (lrs) {
        l.document.open("text/html");
        l.document.writeln(content);
        l.document.close();
        content = '';
        theStat += "-";
        tsc++;
        if (tsc > 50) {
          tsc = 0;
          theStat = "";
        }
        status = theStat;
      }
      countItems++;
    }
    if (lrs) {
      var focusItem = new Layer(100, body);
      focusItem.visiblity="hidden";
      focusItem.document.open("text/html");
      focusItem.document.writeln("&nbsp;");
      focusItem.document.close();
    } else {
      content += '    <div id="focusItem'+ countMenus +'" style="position:absolute;left:0px;top:0px;visibility:hide;" onclick="onMenuItemAction(null,this);">&nbsp;</div>\n';
      content += '   </div>\n  </div>\n</div>\n';
    }
    i=x;
  }
  if (document.layers) {
    container.clip.width = window.innerWidth;
    container.clip.height = window.innerHeight;
    container.onmouseout = mouseoutMenu;
    container.menuContainerBgColor = this.menuContainerBgColor;
    for (var i=0; i<container.document.layers.length; i++) {
      proto = container.menus[i];
      var menu = container.document.layers[i];
      container.menus[i].menuLayer = menu;
      container.menus[i].menuLayer.Menu = container.menus[i];
      container.menus[i].menuLayer.Menu.container = container;
      var body = menu.document.layers[0].document.layers[0];
      body.clip.width = proto.menuWidth || body.clip.width;
      body.clip.height = proto.menuHeight || body.clip.height;
      for (var n=0; n<body.document.layers.length-1; n++) {
        var l = body.document.layers[n];
        l.Menu = container.menus[i];
        l.menuHiliteBgColor = proto.menuHiliteBgColor;
        l.document.bgColor = proto.menuItemBgColor;
        l.saveColor = proto.menuItemBgColor;
        l.onmouseover = proto.onMenuItemOver;
        l.onclick = proto.onMenuItemAction;
        l.mmaction = container.menus[i].actions[n];
        l.focusItem = body.document.layers[body.document.layers.length-1];
        l.clip.width = proto.menuWidth || body.clip.width;
        l.clip.height = proto.menuItemHeight || l.clip.height;
        if (n>0) {
          if( l.Menu.vertical ) l.top = body.document.layers[n-1].top + body.document.layers[n-1].clip.height + proto.menuItemBorder + proto.menuItemSpacing;
          else l.left = body.document.layers[n-1].left + body.document.layers[n-1].clip.width + proto.menuItemBorder + proto.menuItemSpacing;
        }
        l.hilite = l.document.layers[1];
        if (proto.bgImageUp) l.background.src = proto.bgImageUp;
        l.document.layers[1].isHilite = true;
        if (l.document.layers.length > 2) {
          l.childMenu = container.menus[i].items[n].menuLayer;
          l.document.layers[2].left = l.clip.width -13;
          l.document.layers[2].top = (l.clip.height / 2) -4;
          l.document.layers[2].clip.left += 3;
          l.Menu.childMenus[l.Menu.childMenus.length] = l.childMenu;
        }
      }
      if( proto.menuBgOpaque ) body.document.bgColor = proto.bgColor;
      if( proto.vertical ) {
        body.clip.width  = l.clip.width +proto.menuBorder;
        body.clip.height = l.top + l.clip.height +proto.menuBorder;
      } else {
        body.clip.height  = l.clip.height +proto.menuBorder;
        body.clip.width = l.left + l.clip.width  +proto.menuBorder;
        if( body.clip.width > window.innerWidth ) body.clip.width = window.innerWidth;
      }
      var focusItem = body.document.layers[n];
      focusItem.clip.width = body.clip.width;
      focusItem.Menu = l.Menu;
      focusItem.top = -30;
            focusItem.captureEvents(Event.MOUSEDOWN);
            focusItem.onmousedown = onMenuItemDown;
      if( proto.menuBgOpaque ) menu.document.bgColor = proto.menuBorderBgColor;
      var lite = menu.document.layers[0];
      if( proto.menuBgOpaque ) lite.document.bgColor = proto.menuLiteBgColor;
      lite.clip.width = body.clip.width +1;
      lite.clip.height = body.clip.height +1;
      menu.clip.width = body.clip.width + (proto.menuBorder * 3) ;
      menu.clip.height = body.clip.height + (proto.menuBorder * 3);
    }
  } else {
    if ((!document.all) && (container.hasChildNodes) && !window.mmIsOpera) {
      container.innerHTML=content;
    } else {
      container.document.open("text/html");
      container.document.writeln(content);
      container.document.close();
    }
    if (!FIND("menuLayer0")) return;
    var menuCount = 0;
    for (var x=0; x<container.menus.length; x++) {
      var menuLayer = FIND("menuLayer" + x);
      container.menus[x].menuLayer = "menuLayer" + x;
      menuLayer.Menu = container.menus[x];
      menuLayer.Menu.container = "menuLayer" + x;
      menuLayer.style.zindex = 1;
        var s = menuLayer.style;
      s.pixeltop = -300;
      s.pixelleft = -300;
      s.top = '-300px';
      s.left = '-300px';

      var menu = container.menus[x];
      menu.menuItemWidth = menu.menuWidth || menu.menuIEWidth || 140;
      if( menu.menuBgOpaque ) menuLayer.style.backgroundColor = menu.menuBorderBgColor;
      var top = 0;
      var left = 0;
      menu.menuItemLayers = new Array();
      for (var i=0; i<container.menus[x].items.length; i++) {
        var l = FIND("menuItem" + menuCount);
        l.Menu = container.menus[x];
        l.Menu.menuItemLayers[l.Menu.menuItemLayers.length] = l;
        if (l.addEventListener || window.mmIsOpera) {
          l.style.width = menu.menuItemWidth + 'px';
          l.style.height = menu.menuItemHeight + 'px';
          l.style.pixelWidth = menu.menuItemWidth;
          l.style.pixelHeight = menu.menuItemHeight;
          l.style.top = top + 'px';
          l.style.left = left + 'px';
          if(l.addEventListener) {
            l.addEventListener("mouseover", onMenuItemOver, false);
            l.addEventListener("click", onMenuItemAction, false);
            l.addEventListener("mouseout", mouseoutMenu, false);
          }
          if( menu.menuItemHAlign != 'left' ) {
            l.hiliteShim = FIND("menuItemHilite" + menuCount + "Shim");
            l.hiliteShim.style.visibility = "inherit";
            l.textShim = FIND("menuItemText" + menuCount + "Shim");
            l.hiliteShim.style.pixelWidth = menu.menuItemWidth - 2*menu.menuItemPadding - menu.menuItemIndent;
            l.hiliteShim.style.width = l.hiliteShim.style.pixelWidth;
            l.textShim.style.pixelWidth = menu.menuItemWidth - 2*menu.menuItemPadding - menu.menuItemIndent;
            l.textShim.style.width = l.textShim.style.pixelWidth;
          }
        } else {
          l.style.pixelWidth = menu.menuItemWidth;
          l.style.pixelHeight = menu.menuItemHeight;
          l.style.pixelTop = top;
          l.style.pixelLeft = left;
          if( menu.menuItemHAlign != 'left' ) {
            var shim = FIND("menuItemShim" + menuCount);
            shim[0].style.pixelWidth = menu.menuItemWidth - 2*menu.menuItemPadding - menu.menuItemIndent;
            shim[1].style.pixelWidth = menu.menuItemWidth - 2*menu.menuItemPadding - menu.menuItemIndent;
            shim[0].style.width = shim[0].style.pixelWidth + 'px';
            shim[1].style.width = shim[1].style.pixelWidth + 'px';
          }
        }
        if( menu.vertical ) top = top + menu.menuItemHeight+menu.menuItemBorder+menu.menuItemSpacing;
        else left = left + menu.menuItemWidth+menu.menuItemBorder+menu.menuItemSpacing;
        l.style.fontSize = menu.fontSize + 'px';
        l.style.backgroundColor = menu.menuItemBgColor;
        l.style.visibility = "inherit";
        l.style.whiteSpace = "nowrap"; // this prevents the menu from wrappin in IE
        l.saveColor = menu.menuItemBgColor;
        l.menuHiliteBgColor = menu.menuHiliteBgColor;
        l.mmaction = container.menus[x].actions[i];
        l.hilite = FIND("menuItemHilite" + menuCount);
        l.focusItem = FIND("focusItem" + x);
        l.focusItem.style.pixelTop = -30;
        l.focusItem.style.top = '-30px';
        var childItem = FIND("childMenu" + menuCount);
        if (childItem) {
          l.childMenu = container.menus[x].items[i].menuLayer;
          childItem.style.pixelLeft = menu.menuItemWidth -11;
          childItem.style.left = childItem.style.pixelLeft + 'px';
          childItem.style.pixelTop = (menu.menuItemHeight /2) -4;
          childItem.style.top = childItem.style.pixelTop + 'px';
          l.Menu.childMenus[l.Menu.childMenus.length] = l.childMenu;
        }
        l.style.cursor = "hand";
        menuCount++;
      }
      if( menu.vertical ) {
        menu.menuHeight = top-1-menu.menuItemSpacing;
        menu.menuWidth = menu.menuItemWidth;
      } else {
        menu.menuHeight = menu.menuItemHeight;
        menu.menuWidth = left-1-menu.menuItemSpacing;
      }

      var lite = FIND("menuLite" + x);
      var s = lite.style;
      s.pixelHeight = menu.menuHeight +(menu.menuBorder * 2);
      s.height = s.pixelHeight + 'px';
      s.pixelWidth = menu.menuWidth + (menu.menuBorder * 2);
      s.width = s.pixelWidth + 'px';
      if( menu.menuBgOpaque ) s.backgroundColor = menu.menuLiteBgColor;

      var body = FIND("menuFg" + x);
      s = body.style;
      s.pixelHeight = menu.menuHeight + menu.menuBorder;
      s.height = s.pixelHeight + 'px';
      s.pixelWidth = menu.menuWidth + menu.menuBorder;
      s.width = s.pixelWidth + 'px';
      if( menu.menuBgOpaque ) s.backgroundColor = menu.bgColor;

      s = menuLayer.style;
      s.pixelWidth  = menu.menuWidth + (menu.menuBorder * 4);
      s.width = s.pixelWidth + 'px';
      s.pixelHeight  = menu.menuHeight+(menu.menuBorder*4);
      s.height = s.pixelHeight + 'px';
    }
  }
  if (document.captureEvents) document.captureEvents(Event.MOUSEUP);
  if (document.addEventListener) document.addEventListener("mouseup", onMenuItemOver, false);
  if (document.layers && window.innerWidth) {
    window.onresize = NS4resize;
    window.NS4sIW = window.innerWidth;
    window.NS4sIH = window.innerHeight;
    setTimeout("NS4resize()",500);
  }
  document.onmouseup = mouseupMenu;
  window.mmWroteMenu = true;
  status = "";
}

function NS4resize() {
  if (NS4sIW != window.innerWidth || NS4sIH != window.innerHeight) window.location.reload();
}

function onMenuItemOver(e, l) {
  MM_clearTimeout();
  l = l || this;
  a = window.ActiveMenuItem;
  if (document.layers) {
    if (a) {
      a.document.bgColor = a.saveColor;
      if (a.hilite) a.hilite.visibility = "hidden";
      if (a.Menu.bgImageOver) a.background.src = a.Menu.bgImageUp;
      a.focusItem.top = -100;
      a.clicked = false;
    }
    if (l.hilite) {
      l.document.bgColor = l.menuHiliteBgColor;
      l.zIndex = 1;
      l.hilite.visibility = "inherit";
      l.hilite.zIndex = 2;
      l.document.layers[1].zIndex = 1;
      l.focusItem.zIndex = this.zIndex +2;
    }
    if (l.Menu.bgImageOver) l.background.src = l.Menu.bgImageOver;
    l.focusItem.top = this.top;
    l.focusItem.left = this.left;
    l.focusItem.clip.width = l.clip.width;
    l.focusItem.clip.height = l.clip.height;
    l.Menu.hideChildMenu(l);
  } else if (l.style && l.Menu) {
    if (a) {
      a.style.backgroundColor = a.saveColor;
      if (a.hilite) a.hilite.style.visibility = "hidden";
      if (a.hiliteShim) a.hiliteShim.style.visibility = "inherit";
      if (a.Menu.bgImageUp) a.style.background = "url(" + a.Menu.bgImageUp +")";;
    }
    l.style.backgroundColor = l.menuHiliteBgColor;
    l.zIndex = 1;
    if (l.Menu.bgImageOver) l.style.background = "url(" + l.Menu.bgImageOver +")";
    if (l.hilite) {
      l.hilite.style.visibility = "inherit";
      if( l.hiliteShim ) l.hiliteShim.style.visibility = "visible";
    }
    l.focusItem.style.pixelTop = l.style.pixelTop;
    l.focusItem.style.top = l.focusItem.style.pixelTop + 'px';
    l.focusItem.style.pixelLeft = l.style.pixelLeft;
    l.focusItem.style.left = l.focusItem.style.pixelLeft + 'px';
    l.focusItem.style.zIndex = l.zIndex +1;
    l.Menu.hideChildMenu(l);
  } else return;
  window.ActiveMenuItem = l;
}

function onMenuItemAction(e, l) {
  l = window.ActiveMenuItem;
  if (!l) return;
  hideActiveMenus();
  if (l.mmaction) eval("" + l.mmaction);
  window.ActiveMenuItem = 0;
}

function MM_clearTimeout() {
  if (mmHideMenuTimer) clearTimeout(mmHideMenuTimer);
  mmHideMenuTimer = null;
  mmDHFlag = false;
}

function startTimeout() {
  if( window.ActiveMenu ) {
    mmStart = new Date();
    mmDHFlag = true;
    mmHideMenuTimer = setTimeout("mmDoHide()", window.ActiveMenu.Menu.hideTimeout);
  }
}

function mmDoHide() {
  if (!mmDHFlag || !window.ActiveMenu) return;
  var elapsed = new Date() - mmStart;
  var timeout = window.ActiveMenu.Menu.hideTimeout;
  if (elapsed < timeout) {
    mmHideMenuTimer = setTimeout("mmDoHide()", timeout+100-elapsed);
    return;
  }
  mmDHFlag = false;
  hideActiveMenus();
  window.ActiveMenuItem = 0;
}

/*
  showMenu(): Pass it the name of the specific menu object you want
    to display (see LoadMenus in custom.js), the x and y screen coordinates,
    and the ID of the image from which the event is fired. The image needs an ID!
  For dynamic screen coordinates, pass event.clientX or event.clientY instead
    of a hard integer.
  EXAMPLE:
  showMenu(window.menu_01,20,100,"01");
*/

function showMenu(menu, x, y, imgname)
{
  if (!window.mmWroteMenu) return;
  MM_clearTimeout();

  if (FIND("menuItem0"))
  {
    var l = menu.menuLayer || menu;
    hideActiveMenus();
    if (typeof(l) == "string") l = FIND(l);
    window.ActiveMenu = l;
    //var s = l.style;
    l.style.visibility = "inherit";
        // x and y coordinate assignment, compensate for scrolling.

     x = x + getScrollOffset("x");
     y = y + getScrollOffset("y");

    l.style.left = x + "px";
    l.style.top = y + "px";

    //l.Menu.xOffset = document.body.scrollLeft;
    //l.Menu.yOffset = document.body.scrollTop;
  }
  if (menu) window.activeMenus[window.activeMenus.length] = l;
  MM_clearTimeout();
}

function onMenuItemDown(e, l) {
  var a = window.ActiveMenuItem;
  if (document.layers && a)
  {
    a.eX = e.pageX;
    a.eY = e.pageY;
    a.clicked = true;
  }
}

function mouseupMenu(e) {
  hideMenu(true, e);
  hideActiveMenus();
  return true;
}

function getExplorerVersion() {
  var ieVers = parseFloat(navigator.appVersion);
  if( navigator.appName != 'Microsoft Internet Explorer' ) return ieVers;
  var tempVers = navigator.appVersion;
  var i = tempVers.indexOf( 'MSIE ' );
  if( i >= 0 ) {
    tempVers = tempVers.substring( i+5 );
    ieVers = parseFloat( tempVers );
  }
  return ieVers;
}

function mouseoutMenu() {
  if ((navigator.appName == "Microsoft Internet Explorer") && (getExplorerVersion() < 4.5))
    return true;
  hideMenu(false, false);
  return true;
}

function hideMenu(mouseup, e) {
  var a = window.ActiveMenuItem;
  if (a && document.layers) {
    a.document.bgColor = a.saveColor;
    a.focusItem.top = -30;
    if (a.hilite) a.hilite.visibility = "hidden";
    if (mouseup && a.mmaction && a.clicked && window.ActiveMenu) {
       if (a.eX <= e.pageX+15 && a.eX >= e.pageX-15 && a.eY <= e.pageY+10 && a.eY >= e.pageY-10) {
        setTimeout('window.ActiveMenu.Menu.onMenuItemAction();', 500);
      }
    }
    a.clicked = false;
    if (a.Menu.bgImageOver) a.background.src = a.Menu.bgImageUp;
  } else if (window.ActiveMenu && FIND("menuItem0")) {
    if (a) {
      a.style.backgroundColor = a.saveColor;
      if (a.hilite) a.hilite.style.visibility = "hidden";
      if (a.hiliteShim) a.hiliteShim.style.visibility = "inherit";
      if (a.Menu.bgImageUp) a.style.background = "url(" + a.Menu.bgImageUp +")";
    }
  }
  if (!mouseup && window.ActiveMenu) {
    if (window.ActiveMenu.Menu) {
      if (window.ActiveMenu.Menu.hideOnMouseOut) startTimeout();
      return(true);
    }
  }
  return(true);
}

function hideChildMenu(hcmLayer) {
  MM_clearTimeout();
  var l = hcmLayer;
  for (var i=0; i < l.Menu.childMenus.length; i++) {
    var theLayer = l.Menu.childMenus[i];
    if (document.layers) theLayer.visibility = "hidden";
    else {
      theLayer = FIND(theLayer);
      theLayer.style.visibility = "hidden";
      if( theLayer.Menu.menuItemHAlign != 'left' ) {
        for(var j = 0; j < theLayer.Menu.menuItemLayers.length; j++) {
          var itemLayer = theLayer.Menu.menuItemLayers[j];
          if(itemLayer.textShim) itemLayer.textShim.style.visibility = "inherit";
        }
      }
    }
    theLayer.Menu.hideChildMenu(theLayer);
  }
  if (l.childMenu) {
    var childMenu = l.childMenu;
    if (document.layers) {
      l.Menu.showMenu(null,null,null,childMenu.layers[0]);
      childMenu.zIndex = l.parentLayer.zIndex +1;
      childMenu.top = l.Menu.menuLayer.top + l.Menu.submenuYOffset;
      if( l.Menu.vertical ) {
        if( l.Menu.submenuRelativeToItem ) childMenu.top += l.top + l.parentLayer.top;
        childMenu.left = l.parentLayer.left + l.parentLayer.clip.width - (2*l.Menu.menuBorder) + l.Menu.menuLayer.left + l.Menu.submenuXOffset;
      } else {
        childMenu.top += l.top + l.parentLayer.top;
        if( l.Menu.submenuRelativeToItem ) childMenu.left = l.Menu.menuLayer.left + l.left + l.clip.width + (2*l.Menu.menuBorder) + l.Menu.submenuXOffset;
        else childMenu.left = l.parentLayer.left + l.parentLayer.clip.width - (2*l.Menu.menuBorder) + l.Menu.menuLayer.left + l.Menu.submenuXOffset;
      }
      if( childMenu.left < l.Menu.container.clip.left ) l.Menu.container.clip.left = childMenu.left;
      var w = childMenu.clip.width+childMenu.left-l.Menu.container.clip.left;
      if (w > l.Menu.container.clip.width)  l.Menu.container.clip.width = w;
      var h = childMenu.clip.height+childMenu.top-l.Menu.container.clip.top;
      if (h > l.Menu.container.clip.height) l.Menu.container.clip.height = h;
      l.document.layers[1].zIndex = 0;
      childMenu.visibility = "inherit";
    } else if (FIND("menuItem0")) {
      childMenu = FIND(l.childMenu);
      var menuLayer = FIND(l.Menu.menuLayer);
      var s = childMenu.style;
      s.zIndex = menuLayer.style.zIndex+1;
      if (document.all || window.mmIsOpera) {
        s.pixelTop = menuLayer.style.pixelTop + l.Menu.submenuYOffset;
        if( l.Menu.vertical ) {
          if( l.Menu.submenuRelativeToItem ) s.pixelTop += l.style.pixelTop;
          s.pixelLeft = l.style.pixelWidth + menuLayer.style.pixelLeft + l.Menu.submenuXOffset;
          s.left = s.pixelLeft + 'px';
        } else {
          s.pixelTop += l.style.pixelTop;
          if( l.Menu.submenuRelativeToItem ) s.pixelLeft = menuLayer.style.pixelLeft + l.style.pixelLeft + l.style.pixelWidth + (2*l.Menu.menuBorder) + l.Menu.submenuXOffset;
          else s.pixelLeft = (menuLayer.style.pixelWidth-4*l.Menu.menuBorder) + menuLayer.style.pixelLeft + l.Menu.submenuXOffset;
          s.left = s.pixelLeft + 'px';
        }
      } else {
        var top = parseInt(menuLayer.style.top) + l.Menu.submenuYOffset;
        var left = 0;
        if( l.Menu.vertical ) {
          if( l.Menu.submenuRelativeToItem ) top += parseInt(l.style.top);
          left = (parseInt(menuLayer.style.width)-4*l.Menu.menuBorder) + parseInt(menuLayer.style.left) + l.Menu.submenuXOffset;
        } else {
          top += parseInt(l.style.top);
          if( l.Menu.submenuRelativeToItem ) left = parseInt(menuLayer.style.left) + parseInt(l.style.left) + parseInt(l.style.width) + (2*l.Menu.menuBorder) + l.Menu.submenuXOffset;
          else left = (parseInt(menuLayer.style.width)-4*l.Menu.menuBorder) + parseInt(menuLayer.style.left) + l.Menu.submenuXOffset;
        }
        s.top = top + 'px';
        s.left = left + 'px';
      }
      childMenu.style.visibility = "inherit";
    } else return;
    window.activeMenus[window.activeMenus.length] = childMenu;
  }
}

function hideActiveMenus() {
  if (!window.activeMenus) return;
  for (var i=0; i < window.activeMenus.length; i++) {
    if (!activeMenus[i]) continue;
    if (activeMenus[i].visibility && activeMenus[i].Menu && !window.mmIsOpera) {
      activeMenus[i].visibility = "hidden";
      activeMenus[i].Menu.container.visibility = "hidden";
      activeMenus[i].Menu.container.clip.left = 0;
    } else if (activeMenus[i].style) {
      var s = activeMenus[i].style;
      s.visibility = "hidden";
      s.left = '-200px';
      s.top = '-200px';
    }
  }
  if (window.ActiveMenuItem) hideMenu(false, false);
  window.activeMenus.length = 0;
}

function SearchURL() {
  var strURL =  document.location.href;  // the whole URL
  var strHostName = strURL.split("\/")[2];   // just the host name
  var strTopDir = strURL.split("\/")[3]; // the top-level directory
  var strSearchVal = strHostName + "\/" + strTopDir;
  suit.getObject("as_sitesearch").value = strSearchVal;
}

/*
  UTILITIES:
  These are used by other javascript programs. Don't put anything below this
  line that's called directly from the main web page.
*/


function getScrollOffset(strSwitcher)  // only "x" and "y" are valid
{

      // Figure out which page properties are available
      // for determining out scroll offset.

  var strProps;
  if ( window.pageXOffset || window.pageYOffset ) { strProps = "window"; } // preferred
  else if ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) { strProps = "document"; }
  else if ( document.body.scrollLeft || document.body.scrollTop ) { strProps = "body"; }
  else { strProps = "event" } // if you got this far you're dealing with Opera or Safari

      // Switch by argument "x" or "y" to determine with which window axis to deal.
      // Return the final result.

  switch(strSwitcher)
  {
    case "x":
      var X = 0;  // default value
      if ( strProps == "window" ) { X = window.pageXOffset; }
      else if ( strProps == "document" ) { X = document.documentElement.scrollLeft; }
      else if ( strProps == "body" ) { X = document.body.scrollLeft; }
      return X;
      break;
    case "y":
      var Y = 0;  // default value
      if ( strProps == "window" ) { Y = window.pageYOffset; }
      else if ( strProps == "document" ) { Y = document.documentElement.scrollTop; }
      else if ( strProps == "body" ) { X = document.body.scrollTop; }
      return Y;
      break;
    default:
      alert("getScrollCoords() error. Invalid argument.");
      return;
  }
}

