// Funktionalität des Hauptmenüs - OFL //

var menuids=["ofl_nav"]; //Enter id(s) of navigation UL menus, separated by commas
var hide_items = new Array();
var show_items = new Array();
var hide_delay = 200; //?? ms + 100ms

// Menüs erzeugen
function buildsubmenus(){
  for (var i=0; i<menuids.length; i++){
    
    // Alle UL Elemente holen (definieren jeweils ein Menü/Untermenü)
    var ultags=document.getElementById(menuids[i]).getElementsByTagName("ul");
      for (var t=0; t<ultags.length; t++){
        

      // Menüelemente positionieren
      if (ultags[t].parentNode.parentNode.id==menuids[i]){ //if this is a first level submenu
        ultags[t].style.left=ultags[t].parentNode.offsetWidth+"px"; //dynamically position first level submenus to be width of main menu item
      } else { //else if this is a sub level submenu (ul)
        ultags[t].style.left=ultags[t-1].getElementsByTagName("a")[0].offsetWidth+"px"; //position menu to the right of menu item that activated it
      }
      
        ultags[t].parentNode.onmousemove=function(){

          show_item(this);

          var menus = this.parentNode.getElementsByTagName("ul");
          for(var i = 0; i < menus.length; i++){
            if(menus[i].style.display == 'block' && menus[i]!=this && menus[i]!=this.parentNode){
              // nicht anzeigen, aber für Anzeige vormerken
              show_items[show_items.length] = this;
              return;
            }
          }

            this.getElementsByTagName("ul")[0].style.display="block";
      
        };
        
        ultags[t].parentNode.onmouseout=function(){
          
          remove_from_show_items(this);
          
          // in Ausblende-Queue einreihen
          var obj  = new Object();
          var date = new Date();
          obj.time = date.getTime() + hide_delay;
          obj.item = this;
          hide_items[hide_items.length] = obj;
          setTimeout(process_lists, hide_delay + 100); // Verstecken Funktion triggern
        };
        
    }
    
    // Zum Start alle Submenüs ausblenden
    for (var t=ultags.length-1; t>-1; t--){ //loop through all sub menus again, and use "display:none" to hide menus (to prevent possible page scrollbars
      ultags[t].style.visibility="visible";
      ultags[t].style.display="none";
    }
    
  }
}

function show_item(obj){
  // entfernt ein Item aus der Ausblend-Liste
  
  var tmp = new Array();
  for(var i = 0; i < hide_items.length; i++){
    var objekt = hide_items[i];
    if(objekt.item != obj){
      tmp[tmp.length] = objekt;
    }
  }
  hide_items = tmp;  
}

function remove_from_show_items(obj){
  var tmp = new Array();
  for(var i = 0; i < show_items.length; i++){
    if(show_items[i] != obj){
      tmp[tmp.length] = show_items[i];
    }
  }
  show_items = tmp;    
}

function process_lists(){
  // Array durchlaufen und zu versteckende Menüitems ausblenden
  
  var date = new Date();
  var tmp = new Array();
  for(var i = 0; i < hide_items.length; i++){
    var obj = hide_items[i];
    if(obj.time < date.getTime()){
      obj.item.getElementsByTagName("ul")[0].style.display="none";
    } else {
      tmp[tmp.length] = obj;
    }
  }
  hide_items = tmp;
  
  // Prüfen, welche Elemente jetzt sichtbar werden können
  for(var i = 0; i < show_items.length; i++){
    var menus = show_items[i].parentNode.getElementsByTagName("ul");
    var state = "block";
    for(var h = 0; h < menus.length; h++){
      if(menus[h].style.display == 'block' && menus[h]!=show_items[i] && menus[h]!=show_items[i].parentNode){
        state = "none";
      }
    }
  
    if(state=="block"){
      show_items[i].getElementsByTagName("ul")[0].style.display = state;  
      remove_from_show_items(show_items[i]);
    }
  }
}

// Eventlistener installieren, die nach dem Laden das Menü erzeugen
if (window.addEventListener) {
  window.addEventListener("load", buildsubmenus, false);
} else {
  if (window.attachEvent){
    window.attachEvent("onload", buildsubmenus);
  }
}
