 /*
 * Northwestern University dropdown menus
 * amf%northwestern!edu
 *
 * mods by md%northwestern!edu
 * for IT
 */

var delay = 100;
var cddelay = 5; // countdown delay
var nwdelay = 5000; // nonworking delay
var timerID = 0;

// from Netscape's Ultimate Client-Side browser detect; remainder of script deleted
var agt = navigator.userAgent.toLowerCase();
var is_major  = parseInt(navigator.appVersion);
var is_minor  = parseFloat(navigator.appVersion);
var is_ns     = ((agt.indexOf('mozilla')!=-1) && (agt.indexOf('spoofer')==-1) && (agt.indexOf('compatible') == -1) && (agt.indexOf('opera')==-1) && (agt.indexOf('webtv')==-1) && (agt.indexOf('hotjava')==-1));
var is_ns4    = (is_ns && (is_major == 4));
var is_ns6up  = (is_ns && (is_major >= 5));

var is_ie     = ((agt.indexOf("msie") != -1) && (agt.indexOf("opera") == -1));
var is_ie3    = (is_ie && (is_major < 4));
var is_ie4    = (is_ie && (is_major == 4) && (agt.indexOf("msie 4")!=-1) );
var is_ie5up  = (is_ie && !is_ie3 && !is_ie4);

// define what DOM we will use
if (is_ie5up || is_ns6up) {
  var use_5th_gen_dom = 1;
} else { 
  if (is_ns && !is_ns6up) {
    var use_ns4_dom = 1;
  } else {
    var use_ie4_dom = 1;
  }
}


// from QuirksMode - Determining real page coordinates
// http://www.quirksmode.org/js/findpos.html

function findPosX(obj) {
  var curleft = 0;
  if (obj.offsetParent) {
    while (obj.offsetParent) {
      curleft += obj.offsetLeft
      obj = obj.offsetParent;
    }
  }
  else if (obj.x) {
    curleft += obj.x;
  }
  return curleft;
}

function findPosY(obj) {
  var curtop = 0;
  if (obj.offsetParent) {
    while (obj.offsetParent) {
      curtop += obj.offsetTop
      obj = obj.offsetParent;
    }
  }
  else if (obj.y) {
    curtop += obj.y;
  }
  return curtop;
}


// from WebReference - Determining real page coordinates
// http://www.webreference.com/dhtml/diner/realpos1/8.html

function DL_GetElementLeft(eElement)
{
    if (!eElement && this)                       // if argument is invalid
    {                                            // (not specified, is null or is 0)
        eElement = this;                         // and function is a method
    }                                            // identify the element as the method owner
    
    var nLeftPos = eElement.offsetLeft;          // initialize var to store calculations
    var eParElement = eElement.offsetParent;     // identify first offset parent element  
    while (eParElement != null)
    {                                            // move up through element hierarchy
        nLeftPos += eParElement.offsetLeft;      // appending left offset of each parent
        eParElement = eParElement.offsetParent;  // until no more offset parents exist
    }
    return nLeftPos;                             // return the number calculated
}


function DL_GetElementTop(eElement)
{
    if (!eElement && this)
    {
        eElement = this;
    }

    var nTopPos = eElement.offsetTop;
    var eParElement = eElement.offsetParent;
    while (eParElement != null)
    {
        nTopPos += eParElement.offsetTop;
        eParElement = eParElement.offsetParent;
    }
    return nTopPos;
}


//var menuNames = ["morimotolab", "researchtools", "resources", "outreach"];
//var menuLocs = ["head", "head", "head", "left", "left", "left", "left", "left"];
var menuNames = ["morimotolab", "researchtools", "resources", "outreach"];
var menuLocs = ["left", "left", "left", "left", "left"];
var menuToHide = "";
var menuVertPosition = 136;
var menuLeftNames = ["morimotolab", "researchtools", "resources", "outreach"];
var imgURL = "images/";


// set variables
if (use_ns4_dom || use_5th_gen_dom) {
  horiz     =  ".left";
  vert      =  ".top"; 
  doc       =  "document.";
  style     =  "";
  visible   =  ".visibility";
  hide      =  "='hidden'";
  show      =  "='visible'";
} else {
  if (use_ie4_dom) {	// IE4 and similar
    horiz     =  ".pixelLeft";
    vert      =  ".pixelTop";
    doc       =  "document.all.";
    style     =  ".style";
    visible   =  ".visibility";
    hide      =  "='hidden'";
    show      =  "='visible'";
  }
}

function getObj(name) {
  if (document.getElementById) {
    return document.getElementById(name).style;
  }
  else if (document.all)
  {
    return document.all[name].style;
  }
  else if (document.layers)
  {
    return document.layers[name];
  }
}

function posLeftMenus () {
  var mainLeft = 0
  var mainTop = 0
  // Added because Safari does not traverse fully up the tree
  // Safari specific
  if (agt.indexOf('safari')!=-1) {
    mainLeft = DL_GetElementLeft(document.getElementById('header')) - 9; // Move horizontal starting point left by 21 from table id="header"
    mainTop = DL_GetElementTop(document.getElementById('header')) - 8;  // Move vertical starting point up by 20 from table id="header"
  }
  // Other browsers
  for (x in menuLeftNames) {
    var objDiv = getObj("znavleft" + menuLeftNames[x]);
    var menuTrueLeft = DL_GetElementLeft(document.getElementById(menuLeftNames[x]));
    var menuTrueTop = DL_GetElementTop(document.getElementById(menuLeftNames[x]));
    objDiv.left = menuTrueLeft + mainLeft + 8 + "px";
    objDiv.top = menuTrueTop + mainTop + 20 + "px";
  }
}

function showLayer (menuName, loc) {
  var menuID  = document.getElementById(menuName);
  /*
  
  MM_swapImgRestore();
  
  */
  if (menuID != null) {
    hide_all_but ( menuName );
    
	/*
	
	MM_swapImage(menuName,"",imgURL + loc + "but-" + menuName + "on.gif",1);
	
	*/
	
    if (use_5th_gen_dom) {
      var menuDiv = document.getElementById("znav" + loc + menuName);
      menuDiv.style.visibility = "visible";
    } else {
      eval( doc + "znav" + loc + menuName + style + visible + show ) ;
    }
  }
}

function hide_all_but ( menuName ) {
  for ( i in menuNames ) {
    if ( menuNames[i] != menuName ) {
      realHideLayer( menuNames[i], menuLocs[i] ) ;
    } else {
      prevent_hide( menuName );
    }
  }
}

function hideLayer ( menuName, loc, delay ) {
  menuToHide = menuName;
  prepare_hide( menuName, loc, delay );
}

function prepare_hide( menuName, loc, timeLeft ) {
  if ( menuToHide == "" ) {
    // the menu has been rescued
    nextCall = "realHideLayer('" + menuName + "','" + loc + "')";
    timerID = setTimeout(nextCall, nwdelay);
  } else {
    // countdown to extinction
    if ( timeLeft > 0 ) {
      // don't hide it yet...
      nextCall = "prepare_hide('" + menuName + "','" + loc + "'," + (timeLeft-cddelay) + ")";
      timerID = setTimeout(nextCall, cddelay);
    } else {
      // hide it
      clearTimeout(timerID);
      realHideLayer( menuName, loc );
      menuToHide = "" ;
    }
  }
}

function realHideLayer (menuName, loc) {
  if (use_5th_gen_dom) {
    var menuDiv = document.getElementById("znav" + loc + menuName);
    var menuID  = document.getElementById(menuName);
    menuDiv.style.visibility = "hidden";
  } else {
    eval( doc + "znav" + loc + menuName + style + visible + hide ) ;
  }
  
  /*
  
  MM_swapImage(menuName,"",imgURL + loc + "but-" + menuName + ".gif",1);
  
  */
}

function prevent_hide( menuName ) {
  if ( menuToHide == menuName ) {
    menuToHide = "";
  }
}

function begin_hiding ( menuName, loc ) {
  menuToHide = menuName;
  prepare_hide(menuName, loc, delay);
}


