// menu example
//
// dinghies                                      in this example, the stack would contain:
// sailboats----structural                         main
// trawlers     electrical----batteries            sailboats_sub
//              sails         charger              electrical_sub
//                            radios


var active_submenus = new Array(10);
active_submenus[0]="main";
var active_submenus_length = 1;
var menu_showing = false;
var log_debugging = false;
var debug_log = "";


function highlight_box(box)
{

// browser compatability check
if (!document.getElementById) return;

var menu_element = document.getElementById(box);
menu_element.style.background="rgb(255, 255, 0)";
}


function un_highlight_box(box)
{

// browser compatability check
if (!document.getElementById) return;

var menu_element = document.getElementById(box);
menu_element.style.background="rgb(224, 224, 224)";
}


function delayed_cleanup()
{

// browser compatability check
if (!document.getElementById) return;

window.setTimeout( "cleanup()" , 1000);
}


function cleanup()
{

// browser compatability check
if (!document.getElementById) return;

update_debug("entering cleanup");
if (!menu_showing)
  { 
  if (active_submenus_length < 1)
    {
    alert("JavaScript error: active_submenus_length = " + active_submenus_length);
    return;
    }
  while (active_submenus_length > 1)
    {
    hide_sub_menu(active_submenus[active_submenus_length - 1]);
    // this has the effect of popping the last element off the submenu stack
    --active_submenus_length; 
    }
  }
}


function show_sub_menu(box, parent, sub_menu)
{

// browser compatability check
if (!document.getElementById) return;

update_debug("inside show_sub_element: box=" + box + " parent=" + parent + " sub_menu="
             + sub_menu);

var sub_menu_element = document.getElementById(sub_menu);
var box_element = document.getElementById(box);
var parent_element = document.getElementById(parent);
var x_offset = parent_element.offsetLeft + 100;
var y_offset = parent_element.offsetTop + box_element.offsetTop - 0;

//update_debug(box + " x=" + box_element.offsetLeft + " y=" + box_element.offsetTop);
sub_menu_element.style.position="absolute";
sub_menu_element.style.left=x_offset;
sub_menu_element.style.top=y_offset;
sub_menu_element.style.visibility="visible";
}


function hide_sub_menu(sub_menu)
{

// browser compatability check
if (!document.getElementById) return;

var sub_menu_element = document.getElementById(sub_menu);
sub_menu_element.style.visibility="hidden";
}



// entering any menu box
function enter_menu_box(box, parent, sub_menu)
{

// browser compatability check
if (!document.getElementById) return;

update_debug("entering box=" + box + " parent=" + parent + " sub_menu=" + sub_menu);
var box_element = document.getElementById(box);
update_debug(box + " x=" + box_element.offsetLeft + " y=" + box_element.offsetTop);

menu_showing = true;
highlight_box(box);
var finished = false;
while (!finished)
  {
  if (active_submenus_length < 1)
    {
    alert("JavaScript error: active_submenus_length = " + active_submenus_length);
    return;
    }

  // did we go from a child to a child's parent?
  if (active_submenus[active_submenus_length - 1] == sub_menu)
    { finished = true; }

  // is the parent of the box at the end of the stack now?
  else if (active_submenus[active_submenus_length - 1] == parent)
    {
    // does this new box have a submenu?
    if (sub_menu != "")
      {
      active_submenus[active_submenus_length] = sub_menu;
      ++active_submenus_length;
      show_sub_menu(box, parent, sub_menu);
      }
    finished = true;
    }

  else
    {
    // get rid of the last submenu on the stack
    hide_sub_menu(active_submenus[active_submenus_length - 1]);
    // this has the effect of popping the last element off the submenu stack
    --active_submenus_length; 
    }
  }
}


// leaving any menu box
function leave_menu_box(box)
{

// browser compatability check
if (!document.getElementById) return;

update_debug("leaving " + box);
un_highlight_box(box);
menu_showing = false;
delayed_cleanup();
}


function update_debug(debug_msg)
{
// browser compatability check
if (!document.getElementById) return;

if (log_debugging) 
  {
  var debug_element = document.getElementById("debug");
  debug_log = debug_msg + "<br>" + debug_log;
  debug_element.innerHTML=debug_log;
  }
}