/* Copyright by Andreas Buchwald, 2005 - 2007 */

var menu_fo_close_delay = 250;
var menu_fos = new Array ();


// Beispiel: menu_fo_create ('fo_kontakt', 'p_kontakt', Array (Array ('?p=11', 'Telefonverzeichnis'), Array ('?p=2', 'E-Mail-Formular')))
function menu_fo_create (menu, anker, items) {
  var menu_id = menu_fos.length;
  menu_fos [menu_id] = new Object ();
  menu_fos [menu_id]['menu'] = menu;
  menu_fos [menu_id]['timeout'] = null;

  var pos = menu_fo_findpos (anker);
  var posx = pos[0] + 0;
  var posy = pos[1] + 20;
  var maxWidth = document.width ? document.width : document.body.offsetWidth;
  if (posx + 152 > maxWidth)  posx = maxWidth - 152;
  var style = 'left: ' + posx + 'px; top: ' + posy + 'px;';

  document.write ('<div class="menu_fo" id="'+menu+'" '+
                  'onmouseover="menu_fo_show (\''+menu+'\', null);" '+
                  'onmouseout="menu_fo_hide (\''+menu+'\');" '+
                  'style="'+style+'">');
  for (var i = 0; i < items.length; i ++)
    document.write ('<a href="'+items[i][0]+'">'+items[i][1]+'</a>');
  document.write ('</div>');
}


// ID des Menüs anhand des Namens ermitteln.
function menu_fo_get_id (menu) {
  for (var i = 0; i < menu_fos.length; i ++)
    if (menu_fos[i]['menu'] == menu)
      return (i);

  return (-1);
}


// Menü anzeigen
// (Wenn sender != null, wird das Menü an sender ausgerichtet)
function menu_fo_show (menu) {
  var menu_id = menu_fo_get_id (menu);
  if (menu_id < 0)
    return (false);

  if (menu_fos [menu_id]['timeout'])  // Falls das anzuzeigende Menü ausgeblendet wird, Ausblenden abbrechen
    window.clearTimeout (menu_fos [menu_id]['timeout']);

  for (var i = 0; i < menu_fos.length; i ++)  // Alle anderen, auszublendenden Menüs sofort verstecken
    if (i != menu_id)
      menu_fo_hide_to (i);

  if (document.getElementById)  // Menü sichtbar machen
    document.getElementById (menu).style.visibility = "visible";
  return (true);
}


// Timeout setzen, der das Menü versteckt
function menu_fo_hide (menu) {
  var menu_id = menu_fo_get_id (menu);
  if (menu_id < 0)
    return (false);

  menu_fos [menu_id]['timeout'] = window.setTimeout ('menu_fo_hide_to ('+menu_id+')', menu_fo_close_delay);
  return (true);
}


// Menü verstecken
function menu_fo_hide_to (menu_id) {
  menu = menu_fos [menu_id]['menu'];

  if (document.getElementById)  // Menü unsichtbar machen
    document.getElementById (menu).style.visibility = "hidden";

  menu_fos [menu_id]['timeout'] = null;
  return (true);
}


// Position eines Elementes ermitteln
function menu_fo_findpos (element) {
  var e = document.getElementById(element);
  var x = 0;
  var y = 0;
  while (e && e.nodeName != "BODY") {
    x += e.offsetLeft;
    y += e.offsetTop;
    e  = e.offsetParent;
  }
  return (Array (x, y));
}
