// Copyright (c) 2004 Mental Models, Inc. All rights reserved.

var supportableBrowser = true;

ie = ( document.all ) ? 1 : 0;
var isMinNS4 = (navigator.appName.indexOf("Netscape") >= 0 && parseFloat(navigator.appVersion) >= 4) ? 1 : 0;
var isMinNS6 = (isMinNS4 && navigator.userAgent.indexOf("Gecko")>=0) ? 1 : 0;
var isMinIE4 = (document.all) ? 1 : 0;
var isMinIE5 = (isMinIE4 && navigator.appVersion.indexOf("5.")) >= 0 ? 1 : 0;
var isDOM = (document.getElementById) ? 1 : 0;
var detect = navigator.userAgent.toLowerCase();
var mac = false;
var netMac = false;
if ( ( detect.indexOf("mac") + 1 ) ) {
  if ( ie )
    mac = true;
  else netMac = true;
}

var menuWidth = 150;
var menuHeight = 24;
var opacityValue = 85;


function goToURL ( url ) {
  document.location.href = url;
}

function isVisible ( item ) {
 if ( item.getDivId() && item.getDivId().length > 0 ) {
   var layer;
   var HLayer;
   if (!ie && document.layers ) {
      layer = document.layers[item.getDivId()];
   }
   if (ie) {
     layer = document.all[item.getDivId()].style;
   } else {
     layer = document.getElementById(item.getDivId()).style;
   }
    
   return ( layer.visibility == "visible" );
  }
  
  return 0;
}

function setLocation ( menu, menuId ) {
  var obj = document.getElementById ( menuId );
  var objLeft   = obj.offsetLeft;
  var objTop    = obj.offsetTop;
  var objParent = obj.offsetParent;
  while( objParent.tagName.toUpperCase() != "BODY" )
  {
    objLeft  += objParent.offsetLeft;
    objTop   += objParent.offsetTop;
    objParent = objParent.offsetParent;
  }
  
  menu.x = objLeft;
  menu.y = objTop + menuHeight;
  if ( netMac )
    menu.y = menu.y - 5;
  
  for ( var i = 0; i < menu.list.length; i++ ) {
    if ( menu.list[i].getDivId() != null ) {
      menu.list[i].x = menu.x+(menuWidth+8);
      menu.list[i].y = menu.y+(i*menuHeight);
    }
  }
}

    /* hides <select> and <applet> objects (for IE only) */
    function hideElement( elmID, overDiv )
    {
      if( ie )
      {
        for( i = 0; i < document.all.tags( elmID ).length; i++ )
        {
          obj = document.all.tags( elmID )[i];
          if( !obj || !obj.offsetParent )
          {
            continue;
          }
      
          // Find the element's offsetTop and offsetLeft relative to the BODY tag.
          objLeft   = obj.offsetLeft;
          objTop    = obj.offsetTop;
          objParent = obj.offsetParent;
          
          while( objParent.tagName.toUpperCase() != "BODY" )
          {
            objLeft  += objParent.offsetLeft;
            objTop   += objParent.offsetTop;
            objParent = objParent.offsetParent;
          }
      
          objHeight = obj.offsetHeight;
          objWidth = obj.offsetWidth;
      
          if(( overDiv.offsetLeft + overDiv.offsetWidth ) <= objLeft );
          else if(( overDiv.offsetTop + overDiv.offsetHeight ) <= objTop );
          else if( overDiv.offsetTop >= ( objTop + objHeight ));
          else if( overDiv.offsetLeft >= ( objLeft + objWidth ));
          else
          {
            obj.style.visibility = "hidden";
          }
        }
      }
    }
     
    /*
    * unhides <select> and <applet> objects (for IE only)
    */
    function showElement( elmID )
    {
      if( ie )
      {
        for( i = 0; i < document.all.tags( elmID ).length; i++ )
        {
          obj = document.all.tags( elmID )[i];
          
          if( !obj || !obj.offsetParent )
          {
            continue;
          }
        
          obj.style.visibility = "";
        }
      }
    }
    
    
menuList = new Array();
var MainHtml = "";
var selectedMenuHtml = "";
TId=null;
var activeMenu = "";
var waitTimeForMainMenu = 500;
var waitTimeForSubMenu = 500;
var waitTimeBeforeOpen = 500;
var waitTimeBeforeOpenOfMainMenu = 500;
var delayedMenuId = '';
var delayedId = 0;

function checkSupportedBrowser ( ) {
  var agt=navigator.userAgent.toLowerCase(); 
  major = parseInt(navigator.appVersion); 

  nav  = ((agt.indexOf('mozilla')!=-1) && (agt.indexOf('spoofer')==-1) 
                  && (agt.indexOf('compatible') == -1) && (agt.indexOf('opera')==-1) 
                  && (agt.indexOf('webtv')==-1)); 
  nav6up = (nav && (major >= 5));
  ie   = (agt.indexOf("msie") != -1); 
  if ((verOffset=agt.indexOf("msie"))!=-1) {
   fullVersion = parseFloat(agt.substring(verOffset+5,agt.length));
   major = parseInt(''+fullVersion);
  }

  ie5up  = (this.ie  && (major >= 5)); 

  if ( ( nav && nav6up ) || ( ie && ie5up ) ) {
    supportableBrowser = true;
   } else {
    supportableBrowser = false;
    location.href="UnsupportedBrowser.jsp";
   }
}

checkSupportedBrowser ( );

function MenuList ( x, y ) {
  this.parent = 0;
  this.list = new Array();
  this.addMenuItem = addMenuItem;
  this.x = x;
  this.y = y;
  this.id = null;
  this.setMenuId = setMenuId;
  this.getMenuId = getMenuId;
  this.getDivId = getDivId;
  this.over = false;
}

function setMenuId ( value ) {
  this.id = value;
}

function getMenuId ( ) {
  return this.id;
}

function getDivId ( ) {
  return this.id;
}

function addMenuItem ( menu ) {
  menu.x = this.x;
  menu.y = this.y;
  menu.parent = this;
  this.list[this.list.length] = menu;
}

function MenuItem ( text, url ) {
  this.parent = 0;
  this.x = 0;
  this.y = 0;
  this.id = null;
  this.divId = null;
  this.text = text;
  this.url = url;
  this.over = 0;
  this.list = new Array();
  this.addSubMenuItem = addSubMenuItem;
  this.setMenuId = setSubMenuId;
  this.getMenuId = getSubMenuId;
  this.setDivId = setSubDivId;
  this.getDivId = getSubDivId;
}

function setSubMenuId ( value ) {
  this.id = value;
}

function getSubMenuId ( ) {
  return this.id;
}

function setSubDivId ( value ) {
  this.divId = value;
}

function getSubDivId ( ) {
  return this.divId;
}

function addSubMenuItem ( menu ) {
  menu.x = this.x;
  menu.y = this.y;
  menu.parent = this;
  this.list[this.list.length] = menu;
}

function getObjectById ( menu, id ) {
  if (( menu.getMenuId() == id ) || ( menu.getDivId() == id )) return menu;
  for ( var i = 0; i < menu.list.length; i++ ) {
    var item = getObjectById( menu.list[i], id );
    if ( item ) {
      return item;
    }
  }
  return 0;
}

function getObjectByIdStart ( id ) {
  var item = 0;
  for ( var i = 0; i < menuList.length; i++ ) {
    if ( menuList[i].getMenuId() == id ) return menuList[i];
    for ( var ii = 0; ii < menuList[i].list.length; ii++ ) {
      item = getObjectById( menuList[i].list[ii], id );
      if ( item ) {
        return item;
      }
    }
  }

  return item;
}

function getObject ( group, groupItem ) {
  return menuList[group].list[groupItem];
}

function setAllGroupItemNonSelected ( mainMenu, selectedId ) {
    for ( var i = 0; i < mainMenu.list.length; i++ ) {
      if ( mainMenu.list[i].over == 0 ) continue;
      if ( mainMenu.list[i].getMenuId() == selectedId ) continue;
      var menu = mainMenu.list[i];

      var cell = document.getElementById(menu.getMenuId());
      if ( i == (mainMenu.list.length-1 ) ) cell.className = "FloatMenuBottomCell";
      else if ( i == 0 ) cell.className = "FloatMenuTopCell";
      else cell.className = "FloatMenuCell";
      var link = document.getElementById(menu.getMenuId()+"Link");
      link.className = "FloatLink";
      mainMenu.list[i].over = 0;
    }
 
}

function onMenuItemMouseOver(menuId ,className) { 
  var item = getObjectByIdStart ( menuId );
  setAllGroupItemNonSelected ( item.parent, menuId );
  
  if ( item.over == 0 ) {
    var cell = document.getElementById(item.getMenuId());
    cell.className = className; 
    var link = document.getElementById(item.getMenuId()+"Link");
    link.className = "FloatSelLink";
    item.over = 1;
    
    var fileName = item.url;
    
    if ( fileName.length == 0 )
      window.status = item.text;
    else {
      if ( fileName.lastIndexOf('/') != -1 ) 
        fileName = fileName.substring(fileName.lastIndexOf('/')+1);
      window.status = item.text+' ('+fileName+')';
    }
  }


  for ( var i = 0; i < item.parent.list.length; i++ ) {
    if ( item.parent.list[i].getMenuId() != menuId ) {
      if ( item.parent.list[i].getDivId() && item.parent.list[i].getDivId().length > 0 )
        hideMenuFromDelay ( item.parent.list[i].getDivId() );
    }
  }

  if ( item.getDivId() && item.getDivId().length > 0 ) {
   var layer;
   var HLayer;
   if (!ie && document.layers ) {
      layer = document.layers[item.getDivId()];
   }
   if (ie) {
     layer = document.all[item.getDivId()].style;
   } else {
     layer = document.getElementById(item.getDivId()).style;
   }
    
   if ( ie ) {
     layer.left = item.x + "px";
     layer.top = (item.y - 1) + "px";
     layer.visibility = "visible";
     layer.filter='alpha(opacity='+opacityValue+')';
   } else {
     layer.left = item.x + "px";
     layer.top = (item.y - 1) + "px";
     layer.visibility = "visible";
   }
     
   hideElement( 'SELECT', document.getElementById(item.getDivId()) );
   hideElement( 'APPLET', document.getElementById(item.getDivId()) ); 
  }
}

function onMenuItemMouseOut(menuId ,className) {
  var item = getObjectByIdStart ( menuId );
  setAllGroupItemNonSelected ( item.parent, '' );
  window.status = '';
  
  var parentItem = item.parent;
  if ( parentItem && parentItem.list.length > 0 ) {
    for ( var i = 0; i < parentItem.list.length; i++ ) {
	  if ( parentItem.list[i].getDivId() && parentItem.list[i].getDivId().length > 0 ) {
            setTimeout ("hideMenuFromDelay('"+parentItem.list[i].getMenuId()+"');",waitTimeBeforeOpen);
	  }
    }
  }
}


function hideMenuFromDelay ( menuId ) {
  var item = getObjectByIdStart ( menuId );

   if ( item.over == 1 ) return;
   var layer;
   var HLayer;
   if (!ie && document.layers ) {
      layer = document.layers[item.getDivId()];
   }
   if (ie) {
     layer = document.all[item.getDivId()].style;
   } else {
     layer = document.getElementById(item.getDivId()).style;
   }

   if ( ie ) {
     layer.visibility = "hidden";
     layer.filter='alpha(opacity=0)';
   } else {
     layer.visibility = "hidden";
   }
   
   showElement( 'SELECT');
   showElement( 'APPLET');
}


function onMenuMouseOverById(menuId) {
  var item = getObjectByIdStart ( menuId );
  item.over = 1;
}

function onMenuMouseOutById(menuId) {
  var item = getObjectByIdStart ( menuId );
  item.over = 0;
  setHideTimeOut(waitTimeBeforeOpen)
}


function onMenuMouseOver(menuItem) { 
  menuList[menuItem].over = true;
}

function onMenuMouseOut(menuItem) 
{
  menuList[menuItem].over = false;
  setHideTimeOut(waitTimeBeforeOpen)
}

function clearHideTimeOut( ) {
  if ( TId != null )
  {
    clearTimeout(TId);
  }
  TId = null;
}

function clearShowTimeOut( ) {
  if ( delayedId ) {
    clearTimeout(delayedId);
    delayedId = 0;
  }
}

function setHideTimeOut(waitTime)
{
    clearShowTimeOut( );
    clearHideTimeOut( );
    TId = setTimeout ("hideIfNotMouseOver();",waitTime);
}

function hideAll ( ) {
  for(index=0;index<menuList.length;index++)
  {
     
     var layer;
     var HLayer;
     if (!ie && document.layers ) {
       layer = document.layers["Layer"+index];
     }
     if (ie) {
       layer = document.all["Layer"+index].style;
     } else {
       layer = document.getElementById("Layer"+index).style;
     }
    

   if ( ie ) {
     layer.visibility = "hidden";
     layer.filter='alpha(opacity=0)';
   } else {
     layer.visibility = "hidden";
   }
   
   showElement( 'SELECT');
   showElement( 'APPLET');
     
     
    for ( var i = 0; i < menuList[index].list.length; i++ ) {
	if ( menuList[index].list[i].getDivId() && menuList[index].list[i].getDivId() && menuList[index].list[i].getDivId().length > 0 ) {

	   layer;
	   HLayer;
	   if (!ie && document.layers ) {
	      layer = document.layers[menuList[index].list[i].getDivId()];
	   }
	   if (ie) {
	     layer = document.all[menuList[index].list[i].getDivId()].style;
	   } else {
	     layer = document.getElementById(menuList[index].list[i].getDivId()).style;
	   }

	   if ( ie ) {
	     layer.visibility = "hidden";
	     layer.filter='alpha(opacity=0)';
	   } else {
	     layer.visibility = "hidden";
	   }
   
   showElement( 'SELECT');
   showElement( 'APPLET');

	}
    }
     

  }
}


function hideIfNotMouseOver()
{
    clearHideTimeOut( );
    
    if ( testIfMouseOver() == false )
    {
        hideAll();
    }
}



function testIfMouseOverChildren ( menu ) {
  if ( menu.over ) return true;

  for ( var i = 0; i < menu.list.length; i++ ) {
    var mouseOver = testIfMouseOverChildren( menu.list[i] );
    if ( mouseOver ) {
      return mouseOver;
    }
  }
  return false;
}

function testIfMouseOver () {
  var mouseOver = false;
  for ( var i = 0; i < menuList.length; i++ ) {
    if ( menuList[i].over ) return true;

    for ( var ii = 0; ii < menuList[i].list.length; ii++ ) {
      mouseOver = testIfMouseOverChildren( menuList[i].list[ii] );
      if ( mouseOver ) {
        return mouseOver;
      }
    }
  }

  return mouseOver;
}

function showDelayedMenu ( menu, cellId ) {
  if ( menu >= menuList.length ) {
    hideAll();
    return;
  }
  
  clearHideTimeOut( );

  if ( isVisible ( menuList[menu] ) ) {
    return;
  }
  
  if ( delayedId != 0 && delayedMenuId.indexOf(menu) != -1 && menu.length == delayedMenuId.length )
  {
    return;
  }

  clearShowTimeOut( );
      
  delayedMenuId = menu;

  hideAll();
      
  delayedId = setTimeout ("showMenuFromDelay('"+menu+"','"+cellId+"');",waitTimeBeforeOpenOfMainMenu);
 }
 
 function showMenuFromDelay ( menu, cellId ) 
 {
 
  hideAll();

   setLocation ( menuList[menu], cellId );
   
   delayedId = 0;
   
   var layer;
   var HLayer;
   if (!ie && document.layers ) {
      layer = document.layers["Layer"+menu];
   }
   if (ie) {
     layer = document.all["Layer"+menu].style;
   } else {
     layer = document.getElementById("Layer"+menu).style;
   }
   
   if ( ie ) {
     layer.left = menuList[menu].x + "px";
     layer.top = (menuList[menu].y - 1) + "px";
     layer.visibility = "visible";
     layer.filter='alpha(opacity='+opacityValue+')';
   } else {
     layer.left = menuList[menu].x + "px";
     layer.top = (menuList[menu].y - 1) + "px";
     layer.visibility = "visible";
   }
     
   hideElement( 'SELECT', document.getElementById("Layer"+menu) );
   hideElement( 'APPLET', document.getElementById("Layer"+menu) ); 
   
   delayedMenuId = '';
 }

function findLayer(name, doc) {

  var i, layer;

  for (i = 0; i < doc.layers.length; i++) {
    layer = doc.layers[i];
    if (layer.name == name)
      return layer;
    if (layer.document.layers.length > 0) {
      layer = findLayer(name, layer.document);
      if (layer != null)
        return layer;
    }
  }

  return null;
}

function getLayer(name) {
  if (isDOM)
    return document.getElementById(name);
  if (isMinNS4)
    return findLayer(name, document);
  if (isMinIE4)
    return eval('document.all.' + name);
  return null;
}

function getHeight(layerName) {
  var obj = document.getElementById(layerName);

  var objHeight = obj.offsetHeight;
 
  return ( obj.offsetHeight );
}

function getBottomY(layerName) {

  var obj = document.getElementById(layerName);

  // Find the element's offsetTop and offsetLeft relative to the BODY tag.
  var objTop    = obj.offsetTop;
  var objHeight = obj.offsetHeight;
  var objParent = obj.offsetParent;
alert(objHeight);
  while( ( objParent ) && objParent.tagName.toUpperCase() != "BODY" && objParent.tagName.toUpperCase() != "HTML"  )
  {

    objTop   += objParent.offsetTop;
    objParent = objParent.offsetParent;
  }  

  return ( objTop + objHeight );
}

function getWidth(name) {
  var layer = getLayer(name);
  if (isDOM && !isMinNS6){
    if (layer.style.width != "")
  {
    return (layer.style.width);
    }
    else if (layer.style.width == "")
    {
      return(parseInt(layer.offsetWidth));
    }
  }
 
  if (isDOM){
    if (layer.style.width != "")
    {
      return(parseInt(layer.style.width));
    }
    else if (layer.style.width == "")
    {
    //return (layer.offsetWidth);
    return (parseInt(document.defaultView.getComputedStyle(layer, '').getPropertyValue("width")));
    }
    else {
      return(layer.clientWidth);
     }
  }
  if (isMinIE4) {
    if (layer.style.pixelWidth)
      return(layer.style.pixelWidth);
    else
      return(layer.clientWidth);
  }
  if (isMinNS4) {
    if (layer.width)
      return(layer.width);
    else
      return(layer.clip.right - layer.clip.left);
  }

  return(-1);
}

function getCellHTML ( menu, selected ) {
  var html = "";
  var selectedText = "";
  if ( selected ) selectedText = "Sel";
  html += "<TABLE CELLPADDING=0 CELLSPACING=0 WIDTH=\""+menuWidth+"\" BORDER=0><TR><TD onclick=\"goToURL ( '"+menu.url+"' );\" TITLE=\""+menu.text+"\">";
  html += "<SPAN HREF=\""+menu.url+"\" ID='"+menu.getMenuId()+"Link' CLASS='Float"+selectedText+"Link' TITLE=\""+menu.text+"\">"+menu.text+"</SPAN>";
  html += "</TD>";
  if ( menu.list.length > 0 )
    html += "<TD WIDTH=\"5\"><IMG SRC=\"../js/menu_right_arrow.gif\" WIDTH=\"5\" HEIGHT=\"9\"></TD>";
  html += "</TR></TABLE>";
  return html;
}




function createChildrenMenuHtml( menu ) {
  var html = "";
  for(index=0;index<menu.list.length;index++)
  {
    if ( menu.list[index].list.length > 0 ) {
     menu.list[index].setDivId(menu.getMenuId() + "Sub" + index);
     html += "<DIV ID='"+menu.list[index].getDivId()+"' onmouseover='onMenuMouseOverById(\""+menu.list[index].getDivId()+"\");' onmouseout='onMenuMouseOutById(\""+menu.list[index].getDivId()+"\");' CLASS='FloatMenuBlock' STYLE='z-index:+999;position:absolute;left:"+(menu.list[index].x+(menuWidth+9))+";top:"+(menu.list[index].y+(index*menuHeight))+";visibility:hidden;'><TABLE CELLSPACING=0 CELLPADDING=0>";
     for ( i = 0; i < menu.list[index].list.length; i++ ) {
 
       menu.list[index].list[i].setMenuId(menu.list[index].getDivId() + "Cell" + i);
       var id = menu.list[index].list[i].getMenuId();
       var topCell = "";
       if ( i == (menu.list[index].list.length-1 ) ) topCell = "Bottom";
       else if ( i == 0 ) topCell = "Top";
       
       html += "<TR><TD CLASS='FloatMenu"+topCell+"Cell' ID='"+id+"' onmouseover='onMenuItemMouseOver(\""+id+"\",\"FloatSelMenu"+topCell+"Cell\");' onmouseout='onMenuItemMouseOut(\""+id+"\",\"FloatMenu"+topCell+"Cell\");'>";
     
       html += getCellHTML ( menu.list[index].list[i], 0 );
      
       html += "</TD></TR>";
     }
     html += "</TABLE></DIV>"; 
   }
  //   html += createChildrenMenuHtml(menu.list[index]);
  }
  return html;
}

function createAllMenuHtml(){
  var html = "";

  for(var index=0;index<menuList.length;index++)
  {
     menuList[index].setMenuId("Layer"+index);
     html += "<DIV ID='Layer"+index+"' onmouseover='onMenuMouseOver("+index+");' onmouseout='onMenuMouseOut("+index+");' CLASS='FloatMenuBlock' STYLE='z-index:+999;position:absolute;left:"+menuList[index].x+";top:"+menuList[index].y+";visibility:hidden;'><TABLE CELLSPACING=0 CELLPADDING=0>";
     for ( var i = 0; i < menuList[index].list.length; i++ ) {
       menuList[index].list[i].setMenuId(menuList[index].getMenuId() + "Cell" + i);
       var id = menuList[index].list[i].getMenuId();
       var topCell = "";
       if ( i == (menuList[index].list.length-1 ) ) topCell = "Bottom";
       else if ( i == 0 ) topCell = "Top";
       
       html += "<TR><TD CLASS='FloatMenu"+topCell+"Cell' ID='"+id+"' onmouseover='onMenuItemMouseOver(\""+id+"\",\"FloatSelMenu"+topCell+"Cell\");' onmouseout='onMenuItemMouseOut(\""+id+"\",\"FloatMenu"+topCell+"Cell\");'>";
     
       html += getCellHTML ( menuList[index].list[i], 0 );
      
       html += "</TD></TR>";
     }
     html += "</TABLE></DIV>"; 
     html += createChildrenMenuHtml(menuList[index]);
  }
  document.writeln(html);
}

function removeMenuItems ( ) {
  menuList = new Array();
}

var menu = new MenuList ( 241, 47 );
menuList[menuList.length] = menu;
menu.addMenuItem ( new MenuItem ( ' ', '../html/foo.html' ) );
menu.addMenuItem ( new MenuItem ( ' ', '../html/foo.html' ) );
menu.addMenuItem ( new MenuItem ( ' ', '../html/foo.html' ) );
