//// Navigation menu code for Abbeydale site ////
//

// array of navigation item base names...
var arrMenu = new Array("Home", "Design", "Features", "Folio", "");
// index of currently open menu or -1 if none open...
var ndxOpen = -1;
// prefixes for navigation items and drop down menus...
var prefixMenu = "mnu";
var prefixNav = "nav";
// menu configuration and working vars...
var menuOffsetX = 5;
var menuOffsetY = -9;
var navTimer;         // timer for menu hiding
var navDelay = 500;   // milliseconds before drop menu closes

// Nav Menu & Filmstrip Image Rollovers
//
// pre-cache link and rollover images...
var imgsLo = new Object();      // resting buttons
var imgsHi = new Object();      // mouse over button

if (document.images)
  {
  imgsLo["navHome"] = new Image(62, 25);   // nav images - normal
  imgsLo["navHome"].src = "imgs/btn_home_0.jpg";
  imgsLo["navDesign"] = new Image(99, 25);
  imgsLo["navDesign"].src = "imgs/btn_design_0.jpg";
  imgsLo["navFolio"] = new Image(77, 25);
  imgsLo["navFolio"].src = "imgs/btn_folio_0.jpg";
  imgsLo["navContact"] = new Image(85, 25);
  imgsLo["navContact"].src = "imgs/btn_contact_0.jpg";

  imgsHi["navHome"] = new Image(62, 25);   // nav images - highlight
  imgsHi["navHome"].src = "imgs/btn_home_1.jpg";
  imgsHi["navDesign"] = new Image(99, 25);
  imgsHi["navDesign"].src = "imgs/btn_design_1.jpg";
  imgsHi["navFolio"] = new Image(77, 25);
  imgsHi["navFolio"].src = "imgs/btn_folio_1.jpg";
  imgsHi["navContact"] = new Image(85, 25);
  imgsHi["navContact"].src = "imgs/btn_contact_1.jpg";
  }

function setImage(name, state)
  {
  if (document.images)
    {
    if (state == 'hi')
      {
      document.images[name].src = imgsHi[name].src;
      return true;
      }
    else if (state == 'lo')
      {
      document.images[name].src = imgsLo[name].src;
      return true;
      }
    }
  return false;
  }

///////////////////////////////////////////////
// menuOpen()
//
// Drops open a menu and marks it as open
// sID: string: the base ID name of the menu item to open
//
function menuOpen(sID)
  {
  //DBG  alert("menuOpen("+sID+")");
  // check the menu exists...
  var sNavID = prefixNav + sID;
  var sMenuID = prefixMenu + sID;
  var nMenu = menuGetIndex(sID);
  //DBG alert("openMenu('" + sID + "'), sNavID='" + sNavID + "', sMenuID='" + sMenuID + "', nMenu=" + nMenu);
  if (nMenu < 0 || arrMenu[nMenu] == "")
    return;

  var elemNav = document.getElementById(sNavID);
  var elemMenu = document.getElementById(sMenuID);
  //DBG alert("elemNav="+elemNav+", elemMenu="+elemMenu);
  if (elemNav && elemMenu)
    {
    // cancel any pending menu closures...
    clearTimeout(navTimer);
    // hide any other drop down menus...
    menuShutAll();
    // drop this menu...
    elemMenu.style.left = findPosX(elemNav) + menuOffsetX + "px";
    elemMenu.style.top = findPosY(elemNav)+ elemNav.offsetHeight + menuOffsetY + "px";
    elemMenu.style.display = "block";
    // and mark it as open...
    ndxOpen = nMenu;
    }
  return true;   // allows browser to display link target
  }

///////////////////////////////////////////////
// menuKeepOpen()
//
// Marks a previously closed (but still droppped down)
// menu as open and resets the menu display property
// to ensure it stays displayed.  Used when the mouse
// moves from a nav item down to its dropped menu.
// sID: string: the base ID name of the menu item to open
//
function menuKeepOpen(sID)
  {
  var sMenuID = prefixMenu + sID;
  var nMenu = menuGetIndex(sID);
  if (nMenu < 0 || arrMenu[nMenu] == "")
    return;
  ndxOpen = nMenu;
  var elem = document.getElementById(sMenuID);
  elem.style.display = "block";
  }

///////////////////////////////////////////////
// menuClose()
//
// Schedules the raising of a dropped menu.  Used
// to allow menu to remain open while mouse is moved
// from nav item to a menu just dropped and to cope
// with minor mouse movement errors
// sID: string: the base ID name of the menu item to close
//
function menuClose(sID)
  {
  var sMenuID = prefixMenu + sID;
  var nMenu = menuGetIndex(sID);
  if (nMenu < 0 || arrMenu[nMenu] == "")
    return;
  ndxOpen = -1;
  // schedule menu closure...
  navTimer = setTimeout("menuHideClosed(" + nMenu + ")", navDelay);
  }

///////////////////////////////////////////////
// menuHideClosed()
//
// Internal function to raise a dropped menu.
// Used via setTimeout() to delay the raising of a menu
// for a short while after a mouseout event closes it.
// nMenu: int: the array index of the menu item to close
//
function menuHideClosed(nMenu)
  {
  if (ndxOpen == -1)
    {
    var elem = document.getElementById(prefixMenu + arrMenu[nMenu]);
    if (elem)
      elem.style.display = "none";
    }
  }

///////////////////////////////////////////////
// menuShut()
//
// Raises a dropped menu immediately and marks it closed.
// Used to close a menu before opening another one.
// sID: string: the base ID name of the menu item to close
//
function menuShut(sID)
  {
  var sMenuID = prefixMenu + sID;
  var nMenu = menuGetIndex(sID);
  if (nMenu < 0 || arrMenu[nMenu] == "")
    return;
  ndxOpen = -1;
  var elem = document.getElementById(sMenuID)
  if (elem)
    elem.style.display = "none";
  }

///////////////////////////////////////////////
// menuShutAll()
//
// Close open menus before opening another one.
//
function menuShutAll()
  {
  var elemMenu;
  for (var i in arrMenu)
    {
    if (arrMenu[i] && arrMenu[i] != "")
      {
      elemMenu = document.getElementById(prefixMenu + arrMenu[i]);
      elemMenu.style.display = "none";
      }
    }
  ndxOpen = -1;
  }

///////////////////////////////////////////////
// menuGetIndex()
//
// Internal function to calc index of a specified
// base ID name.
// sID: string: base ID name of menu to find
//
function menuGetIndex(sID)
  {
  for (var i in arrMenu)
    {
    if (arrMenu[i] == sID)
    return i;
    }
  // if we're here we didn't find the menu...
  return -1;
  }

// functions to find the position of an element...
// updated 2/9/2007, MT
// fixes IE offsetParent problem
function findPosX(obj)
  {
  var curleft = obj.offsetLeft;
//  while (obj.offsetParent)
//    {
//    obj = obj.offsetParent;
//    curleft += obj.offsetLeft;
//    }
  return curleft;
  }

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


//
///// End of File ///////////////////////////////////////
