// Customized for The Nibble by Darlene Pike, 973.853.5813. 
// Look and feel (c) Darlene Pike 2005 http://www.pikedesign.com

// Original inspiration:
// http://www.codestyle.org/javascript/dom/css/visibility-HorizontalMenus.shtml
// Copyright (c) 2001-2003, Philip Shaw
// This version of javascript and DHTML is by K. Chayka, at:
// http://accessat.c-net.us/articles/menu/h_drop-down-menu.html

var mCount = 6;           // number of menu groups
var mTix   = "";          // main group link tabindex value (numeric, blank=none)
var sTix   = "";          // sub-menu link item tabindex value (numeric, blank=none)
var lSep   = " &#8226; "  // link separator (space-bullet-space) for legacy browsers
var dbug = false;         // set to true to dump the generated code

//  variables below do not need customizing
var mOpen = null;         // currently open menu
var mClose = null;        // menu to close
var stdDOM = document.getElementById;
var dom = "";
var mStr = "";
var menu = new makeArray(mCount);

function makeArray(n) {
  this.size = n;
  for(var i=1; i<=n; i++){
    this[i] = 0;
  }
  return(this);
}

// Top-level menu group constructor:
function menuGroup(n,groupName,groupURL,groupTitle,groupAkey) {
  this.size       = n;             // number of submenu links
  this.groupName  = groupName;     // button 'label'
  this.groupURL   = groupURL;      // button URL
  this.groupTitle = groupTitle;    // title attribute
  this.groupAkey  = groupAkey;     // accesskey value
  this.item       = new makeArray(n);
}

// Submenu list item constructor:
function menuItem(itemName,itemURL,itemTitle) {
  this.itemName  = itemName;       // link label
  this.itemURL   = itemURL;        // link url
  this.itemTitle = itemTitle;      // title attribute
}

// ********** All the menu building starts here
// group[#] = new menuGroup(# of submenu links, group label, URL, title, accesskey);
// group[#].submenuLink[#] = new menuItem(link label, URL, title);

  menu[1] = new menuGroup(0,"Home","http://www.thenibble.com/","Home","1"); // no submenu for this group

  menu[2] = new menuGroup(4,"Free Newsletter","http://www.thenibble.com/zine/index.asp","Free E-Zine","2"); 
  menu[2].item[1] = new menuItem("Overview","http://www.thenibble.com/zine/index.asp","Overview");
  menu[2].item[2] = new menuItem("Sign Up","http://www.thenibble.com/zine/subscribe.asp","Sign Up");
  menu[2].item[3] = new menuItem("Tell A Friend","http://www.thenibble.com/zine/tell.asp","Tell A Friend");
  menu[2].item[4] = new menuItem("Newsletter Archives","http://www.thenibble.com/zine/archives/index.asp","E-Zine Archives");

  menu[3] = new menuGroup(8,"Product Reviews","http://www.thenibble.com/reviews/index.asp","Product Reviews","3");
  menu[3].item[1] = new menuItem("Overview","http://www.thenibble.com/reviews/index.asp","Overview");
  menu[3].item[2] = new menuItem("Main Nibbles","http://www.thenibble.com/reviews/main/index.asp","Main Nibbles");
  menu[3].item[3] = new menuItem("Diet Nibbles","http://www.thenibble.com/reviews/diet/index.asp","Diet Nibbles");
  menu[3].item[4] = new menuItem("Kosher Nibbles","http://www.thenibble.com/reviews/kosher/index.asp","Kosher Nibbles");
  menu[3].item[5] = new menuItem("NutriNibbles","http://www.thenibble.com/reviews/nutri/index.asp","NutriNibbles");
  menu[3].item[6] = new menuItem("Gourmet News","http://blog.thenibble.com/category/gourmet-news/","Gourmet News");
  menu[3].item[7] = new menuItem("Best Reads","http://www.thenibble.com/reviews/reads/index.asp","Best Reads");
  menu[3].item[8] = new menuItem("Favorite Links","http://www.thenibble.com/reviews/links/index.asp","Favorite Links");

  menu[4] = new menuGroup(5,"Marketplace","http://www.thenibble.com/marketplace/index.asp","Marketplace","4");
  menu[4].item[1] = new menuItem("Overview","http://www.thenibble.com/marketplace/index.asp","Overview");
  menu[4].item[2] = new menuItem("Shop","http://www.thenibble.com/marketplace/shop/index.asp","Shop");
  menu[4].item[3] = new menuItem("Special Offers","http://www.thenibble.com/marketplace/offers/index.asp","Special Offers");
  menu[4].item[4] = new menuItem("Gift Finder","http://www.thenibble.com/marketplace/gift/index.asp","Gift Finder");
  menu[4].item[5] = new menuItem("Entertaining <br>Guide","http://www.thenibble.com/marketplace/entertain/index.asp","Entertaining Guide");

  menu[5] = new menuGroup(5,"Food Fun","http://www.thenibble.com/fun/index.asp","Food Fun","5"); 
  menu[5].item[1] = new menuItem("Overview","http://www.thenibble.com/fun/index.asp","Overview");
  menu[5].item[2] = new menuItem("Polls &<br> Prizes","http://www.thenibble.com/fun/polls/index.asp","Polls & Prizes");
  menu[5].item[3] = new menuItem("Events &<br> Travel","http://www.thenibble.com/fun/events/index.asp","Events & Travel");
  menu[5].item[4] = new menuItem("Winning Ideas","http://www.thenibble.com/fun/ideas/index.asp","Winning Ideas");
  menu[5].item[5] = new menuItem("More Food<br> Fun","http://www.thenibble.com/fun/more/index.asp","More Food Fun");

  menu[6] = new menuGroup(6,"Home Zone","http://www.thenibble.com/zone/index.asp","Home Zone","6"); 
  menu[6].item[1] = new menuItem("Overview","http://www.thenibble.com/zone/index.asp","Overview");
  menu[6].item[2] = new menuItem("Apparel","http://www.thenibble.com/zone/apparel/index.asp","Apparel & Accessories");
  menu[6].item[3] = new menuItem("Art","http://www.thenibble.com/zone/art/index.asp","Art");
  menu[6].item[4] = new menuItem("Good Scents","http://www.thenibble.com/zone/scents/index.asp","Good Scents");
  menu[6].item[5] = new menuItem("Kitchenware","http://www.thenibble.com/zone/kitchen/index.asp","Kitchenware");
  menu[6].item[6] = new menuItem("Tabletop","http://www.thenibble.com/zone/tabletop/index.asp","Tabletop");

  // For W3C-compliant browsers, make divs for each group and lists for the drop-down menus.
  // For legacy browsers, include just the main links (delimited with lSep).

  for(var i=1; i<=mCount; i++) {
    if (stdDOM) {
       mStr += "<div class=\"menugroup\" id=\"group" + i + "\">";  // start menu group container
    }
    mStr += "<a href=\"" + menu[i].groupURL + "\"";  // the main link for this group
    if (mTix) {                 // include tabindex if defined
      mStr += " tabindex=\"" + mTix + "\"";
    }
    if (menu[i].groupAkey) {    // include accesskey if defined
      mStr += " accesskey=\"" + menu[i].groupAkey + "\"";
    }
    if (menu[i].groupTitle) {   // include title attribute if defined
      mStr += "\n title=\"" + menu[i].groupTitle + "\"";
    }
    if (stdDOM) {              // extra goodies for W3C-compliant browsers
      mStr += " class=\"grouplink\"";
      if (menu[i].size > 0) {   // skip if no submenu
        mStr += "\n onmouseover=\"menuOver('menu" + i + "'); return true;\"";
        mStr += " onmouseout=\"menuOut('menu" + i + "'); return true;\"";
      }
    }
    mStr += ">" + menu[i].groupName + "<\/a>";
    if (stdDOM) {              // add the drop-down links for W3C-compliant browsers
      if (menu[i].size > 0) {  // skip if no submenu
        mStr += "\n<ul class=\"menu\" id=\"menu" + i + "\">\n";
        for(var j=1; j<=menu[i].size; j++) {
          mStr += "<li><a href=\"" + menu[i].item[j].itemURL + "\"";
          if (sTix) {          // include tabindex if defined
            mStr += " tabindex=\"" + sTix + "\"";
          }
          if (menu[i].item[j].itemTitle) {  // include title attribute if defined
            mStr += "\n title=\"" + menu[i].item[j].itemTitle + "\"";
          }
          mStr += "\n onmouseover=\"stayOpen('menu" + i + "'); return true;\"";
          mStr += " onmouseout=\"menuOut('menu" + i + "'); return true;\">";
          mStr += menu[i].item[j].itemName;
          mStr += "<\/a><\/li>\n";
        }
        mStr +="<\/ul>";
      }
      mStr += "<\/div>\n";      // end menu group
    } else {
      if (i<mCount) {mStr += lSep + "\n";}      // for legacy browsers, add link separator
    }
  }
// *************** End menu building

if (dbug) {debugWindow(mStr);}  // see the generated code in a pop-up window

function debugWindow (val) { 
  var newWin = window.open("","dBug");
  newWin.document.write(val);
  newWin.document.close();
}

// *************** Functions called by mouseover/mouseout start here
// Mouseover a menu
function menuOver(m){
  if (!stdDOM) {return;}
  dom = document.getElementById(m);
  if (dom != null) {
    if (mOpen == dom) {       // already open
      clearTimeout(mClose);   // don't close
    } else {
      if (mOpen != null) {    // another is open
        clearTimeout(mClose);
        hideNow();            // close it now
      }
    }
  mOpen = dom;                // set new open menu
  mOpen.style.visibility = "visible";    // show it
}
}
// Keep menu open
function stayOpen(m){
  // If menuOver has not been called or the menu is hidden, do nothing
  if ((mOpen == null) || ((mOpen.style) && (mOpen.style.visibility) && (mOpen.style.visibility == "hidden"))) return;
  else menuOver(m);
}
// Close menu after timeout
function menuOut(m){
  dom = document.getElementById(m);
  if ((stdDOM) && (dom != null)) {
    mOpen = dom;	// get current open menu
    mClose = window.setTimeout("hideNow();",400);  // auto-close after 400ms
  }
}
// Close previous menu now
function hideNow(){
  if ((mOpen.style) && (mOpen.style.visibility)) {
    mOpen.style.visibility = "hidden";
  }
}

// -->