/*  ***********************************************************
 *
 *  OTTOMOTIVE - MENUFADER SCRIPT
 *  
 *  JavaScript voor fade-outs menubalk
 *  
 *  V0.2 - Vizi - 26/07/2006
 *
 *  Inhoud:
 *  - Menufade script om animatie aan mouseover/mouseout te koppelen.
 *
 *  Locatie:
 *  - ./scripts/class_menufade.js
 *  
 *  *********************************************************** */


/*  ***********************************************************
 *
 *  MAINMENU: animeer de menuitems bij mouseover / mouseout
 *
 */

// Definieer variabelen.
//
var hide_delay = 1000;    // Pauze voor terugklappen menu in milliseconden.
var hide_timeout = null;  // Vlaggetje om bij te houden of timeout loopt.
var bg_over = null;

// Initieer script: hoofdroutine.
//
function initMenu()
{
  // Haal menu op. geen menu? Dan niets doen.
  var menu = document.getElementById("mainmenu");
  if (!menu) return;

  // Hang extra list item in menu voor achtergrond.
  var menu_bg_item = document.createElement("li");
  menu_bg_item.id = "mainmenu-bg";
  menu_bg_item.className = "hide";
  menu.insertBefore(menu_bg_item , menu.firstChild);

  // Koppel gedrag aan hoofdmenu balk.
  menu.targetMenuOverHandler = showBG;
  menu.targetMenuOutHandler = hideBG;
  dispatch(menu, "mouseover", "targetMenuOverHandler");
  dispatch(menu, "mouseout", "targetMenuOutHandler");

  // Koppel gedrag aan menulinks.
  var current_menu, current_menu_links;
  for (var i = 0; i < 4; i++)
  {
    current_menu = document.getElementById("mainmenu-" + i);
    current_menu_links = current_menu.getElementsByTagName("a");

    // Hang calls aan hoofditem.
    current_menu_links[0].targetMenuOverHandler = showMenu;
    current_menu_links[0].targetMenuOutHandler = closeMenu;
    dispatch(current_menu_links[0], "mouseover", "targetMenuOverHandler");
    dispatch(current_menu_links[0], "mouseout", "targetMenuOutHandler");

    // Loop door sublinks en hang daar ook de goede calls aan.
    for (var j = 1; j < current_menu_links.length; j++)
    {
      current_menu_links[j].targetMenuOverHandler = freezeMenu;
      current_menu_links[j].targetMenuOutHandler = closeMenu;
      dispatch(current_menu_links[j], "mouseover", "targetMenuOverHandler");
      dispatch(current_menu_links[j], "mouseout", "targetMenuOutHandler");
    }
  }

  if (document.all) document.recalc(true);
}


//  Hang menu handler in het DOM.
//
window.targetMenuHandler = initMenu;
dispatch(window, "load", "targetMenuHandler");


// Hulproutine: zet menu-item omhoog.
//
function showMenu()
{
  // Haal item_id op uit document. Huidige menu is of grootouder, of betbetovergrootouder.
  var item_id = findMenu(this);
  
  // window.status = "Openklappen van nummer: " + item_id;

  if (hide_timeout) clearTimeout(hide_timeout);

  for (var i = 0; i < 4; i++)
  {
    document.getElementById("mainmenu-" + i).className = "hide";
  }
  document.getElementById("mainmenu-" + item_id).className = "show";
}

// Hulproutine: normaal terugzetten menu-item met vertraging.
//
function hideMenu(item_id)
{
  //window.status = "Dichtklappen van nummer: " + item_id;
  for (var i = 0; i < 4; i++)
  {
    document.getElementById("mainmenu-" + i).className = "base";
  }

  if (!bg_over) document.getElementById("mainmenu-bg").className = "hide";
  clearTimeout(hide_timeout);
  hide_timeout = null;
}


// Hulproutine: voorkom terugzetten menu-item.
//
function freezeMenu()
{
  if (hide_timeout != null)
  {
    clearTimeout(hide_timeout);
    hide_timeout = null;
  }
}


// Hulproutine: pak terugzetten menu-item weer op.
//
function closeMenu()
{
  // Haal huidige menu-item op.
  var item_id = findMenu(this);
  
  window.status = "Timeout starten voor nummer: " + item_id;

  var hide_call = "hideMenu('" + item_id + "')";
  hide_timeout = setTimeout(hide_call, hide_delay);
}


// Hulproutine: bepaal menutak van element.
//
function findMenu(elem)
{
  var elem_id;
  if (elem.parentNode.id.indexOf("menu-") == 4)
  {
    elem_id = elem.parentNode.id.substring(9, 10);
  }
  else
  {
    elem_id = elem.parentNode.parentNode.parentNode.id.substring(9, 10);
  }
  return parseInt(elem_id);
}


// Hulproutine: toon achtergrond menubalk.
//
function showBG()
{
  document.getElementById("mainmenu-bg").className = "show";
  bg_over = true;
}


// Hulproutine: verberg achtergrond menubalk.
//
function hideBG()
{
  if (!hide_timeout) document.getElementById("mainmenu-bg").className = "hide";
  bg_over = null;
}

