/********************// nav.js for Nike-Philips// site-wide PHASE 3 functionality// code by Byron Tredwell (byron.tredwell(AT).blastradius.com)*********************/// the current visible menu // - all of its parents and its one direct child should be visiblevar currentMenu = null;//all currently visible menusvar visibleMenus = new Array();//this class name is ALWAYS visiblevar topLevelClassName = "topNavItem";//this is the active state class name for top level items (hover state)var topActiveClassName = "topNavActive";//this is the active state class name for top level items (current state)var topCurrentClassName = "topNavCurrent";//this is the active state class namevar activeClassName = "activeItem";//this is the inactive state class namevar inactiveClassName = "nonActiveItem";// pMenu  -> the menu which is the anchor is in - string id or object ref// id     -> id of the menu to be shown// anch   -> the element which is the menu is to be shown from (ie this)// dir    -> what side the menu is shown on r, b// offset -> px offest in dir - allows for overlaping menusfunction showMenu(pMenu,id,anch,dir,offset){   if(typeof pMenu == "object")   {   var base = pMenu;   }else{   var base = document.getElementById(pMenu);   }      if(base.currentLink)   {   deactivateNavItem(base.currentLink);   }   base.currentLink = anch;   activateNavItem(base.currentLink);   visibleMenus[visibleMenus.length] = base;   base.onmouseout = function(){currentMenu = null; setTimeout("hideMenus()",50);};      if(id == null && dir == null && offset == null)   {      noSubMenu(pMenu);      return;   }      var menu   = document.getElementById(id);   //if the nav hasn't loaded get out   if(typeof menu == "undefined" || menu == null )   {    return;     }      toggleFlash("off");      var top    = getOffsetProperty(anch, "Top", "topnav");   var left   = getOffsetProperty(anch, "Left", "topnav");   var width  = anch.offsetWidth;   var height = anch.offsetHeight;   if(top == "NaN" || left == "NaN")   {    return;     }   if(offset == null || typeof offset == "undefined")      offset = 0;   switch(dir)   {      case "b" : {                  menu.style.top  = (top+height+offset)+"px";                  menu.style.left = (left)+"px";                  break;                 }            case "r" : {                  menu.style.top  = (top-offset)+"px";                  menu.style.left = (left+width+offset)+"px";                  // mac ie5.2 hack //bad form but it works                  var ua = navigator.userAgent.toLowerCase();                   var ieMac    = ((ua.indexOf("msie") != -1) && (ua.indexOf("mac")!=-1));                   if(ieMac)                     menu.style.left = (parseInt(menu.style.left)-15)+"px";                  break;                 }   }   menu.style.visibility='visible';   if(menu.currentLink)   {   deactivateNavItem(menu.currentLink);   menu.currentLink = null;   }   currentMenu     = base;   base.childMenu  = menu;   menu.parentMenu = base;   visibleMenus[visibleMenus.length] = menu;      menu.onmouseout = function(){currentMenu = null; setTimeout("hideMenus()",50);};}function hideMenus(){   var mTreeBase       = currentMenu;   var resetVisArray   = new Array();   var activeMenuArray = new Array();   if(mTreeBase !=null)     {      do {      activeMenuArray[activeMenuArray.length] = mTreeBase;      activeMenuArray[activeMenuArray.length] = mTreeBase.shadow;      mTreeBase = mTreeBase.parentMenu;      }       while (mTreeBase != null);      if(currentMenu.childMenu !=null)      {      activeMenuArray[activeMenuArray.length] = currentMenu.childMenu;      activeMenuArray[activeMenuArray.length] = currentMenu.childMenu.shadow;      }     }   for(i=visibleMenus.length-1; i>=0; i--)   {    var m = visibleMenus[i];    if(m == null)         continue;    var hideIt = true;       for(j=0;j < activeMenuArray.length;j++)       {         if(m == activeMenuArray[j])         {            hideIt = false;            break;         }       }    if(hideIt == true)    {     if(m.className.indexOf(topLevelClassName) < 0)     {      m.style.visibility='hidden';     }     if(m.currentLink)     {      deactivateNavItem(m.currentLink);      m.currentLink = null;     }    }else{     resetVisArray[resetVisArray.length] = m;    }   }   visibleMenus = resetVisArray;   if(visibleMenus.length == 0)      toggleFlash("on");}function noSubMenu(item){      if(typeof item == "object")   {      currentMenu = item;   }else{      currentMenu = document.getElementById(item);   }   currentMenu.childMenu = null;   hideMenus();}function activateNavItem(item){     if(item.className.indexOf(topCurrentClassName) >= 0)   {      return;   }   else {      item.doNotDeactivate = false;   }    if(item.className.indexOf(topLevelClassName) >= 0)   {              item.className = topLevelClassName +" "+ topActiveClassName;   }else{      if(item.className.indexOf(inactiveClassName) > 0)      {         item.className = item.className.replace(inactiveClassName,activeClassName);      }else{         item.className = activeClassName+" "+item.className;      }   }}function deactivateNavItem(item){   if(item.className.indexOf(topCurrentClassName) >= 0)   {      return;   }   if(item.className.indexOf(topLevelClassName) >= 0)   {               item.className = topLevelClassName;   }else{      if(item.className.indexOf(activeClassName) > 0)      {         item.className = item.className.replace(activeClassName,inactiveClassName);      }else{        item.className = inactiveClassName +" "+ item.className;      }   }}/**********************************************************************   Retrive the offset Left or Top of an elm relative to another *********************************************************************/function getOffsetProperty(elementID, property, relativeElmID) {   var offset = 0;   if(typeof elementID == "object")   {   var element = elementID;   }else{   var element = document.getElementById(elementID);   }     if(typeof element == "undefined" || element == null)   {    return "NaN";     }   var relativeElm = document.getElementById(relativeElmID);   if(relativeElm == null || typeof relativeElm == "undefined")      relativeElm = document.body;   do {      offset += eval('element.offset' + property);      element = element.offsetParent;      // mac ie5.2 hack //bad form but it works      var ua = navigator.userAgent.toLowerCase();       var ieMac    = ((ua.indexOf("msie") != -1) && (ua.indexOf("mac")!=-1));       if(ieMac && element == relativeElm)         offset -= eval('element.offset' + property)   } while (element != relativeElm && element != null);   return parseInt(offset);}/*******************************************************************************************   is the document ready - to append a node in IE the page must be completely loaded ******************************************************************************************/function testReady()   { //document.readyState == uninitialized || loading || interactive || complete      if(document.readyState)      {         if(document.readyState == "complete")         {            return true;         }            return false;      }            return true;   }      function toggleFlash(onOff){   var ua        = navigator.userAgent.toLowerCase();    var ns        = (ua.indexOf('mozilla')!=-1 && ua.indexOf('spoofer')==-1 && ua.indexOf('compatible') == -1 && ua.indexOf('opera')==-1 && ua.indexOf('webtv')==-1); 	var gecko     = (ua.indexOf('gecko') != -1);   var firefox   = (ua.indexOf('firefox') != -1);   var mozilla   = (gecko && ua.indexOf("gecko/") + 14 == ua.length);   if(ns)   {      if(mozilla || firefox)      ns = false;   }	var noFlashLayers  = (ns);    if(noFlashLayers && document.getElementById('flashToHide') && document.getElementById('imageToShow') )   {      if(onOff == "on")      {      document.getElementById('imageToShow').style.display = "none";      document.getElementById('flashToHide').style.display = "block";      }      if(onOff == "off")      {      document.getElementById('imageToShow').style.display = "block";      document.getElementById('flashToHide').style.display = "none";      }   }}