//
var flashInit = false;

/* ------------------------------------------------------------------------------------------------
Fügt den Listeneinträgen Eventhandler und CSS Klassen hinzu,
um die Menüpunkte am Anfang zu schließen.

menu: Referenz auf die Liste.
data: String, der die Nummern aufgeklappter Menüpunkte enthält.
--------------------------------------------------------------------------------------------------- */
var selLevel = "";
var hideOpend = true;	// true schließt offene auf Level0, wenn anderer auf Level0 geöffnet wird
var aktMenuItem = "";
var aktSubMenuItem = "";
var classSelected = "selected";
var classSelectedSub = "selectedSub";
  
  
function treeMenu_init(menu, data) 
{
    var array = new Array(0);
	var i = 0;
    if(data !== null && data !== "") 
    {
      array = data.match(/\d+/g);
    }
  	menu = document.getElementById(menu);
	menuNodes = menu.childNodes;
	for (i = 0; i < menuNodes.length; i++) 
	{
		if (menuNodes[i].nodeType == 1) 
		{
			menuNodes[i].className = menuNodes[i].className + " level0";
		}
	}

    var items = menu.getElementsByTagName("li");
    for(i = 0; i < items.length; i++) 
    {
		items[i].onclick = treeMenu_handleClick;
		if(!treeMenu_contains(treeMenu_getClasses(items[i]), "treeMenu_opened") && items[i].getElementsByTagName("ul").length + items[i].getElementsByTagName("ol").length > 0) 
		{
			var classes = treeMenu_getClasses(items[i]);
			if(array.length > 0 && array[0] == i) 
			{
				classes[classes.length] = "treeMenu_opened";
			}
			else 
			{
				classes[classes.length] = "treeMenu_closed";
			}
			items[i].className = classes.join(" ");
			if(array.length > 0 && array[0] == i) 
			{
				array.shift();
			}
		}
	}
}

/* ------------------------------------------------------------------------------------------------
Ändert die Klasse eines angeklickten Listenelements, sodass
geöffnete Menüpunkte geschlossen und geschlossene geöffnet werden.

event: Das Event Objekt, dass der Browser übergibt.
-------------------------------------------------------------------------------------------------- */
function treeMenu_handleClick(event, htmlObj) 
{
	var i = 0;
	if (htmlObj)
	{
   		cT = htmlObj;
	} 
	else 
	{
  		if (event == null || event == undefined) { //Workaround für die fehlenden DOM Eigenschaften im IE
			event = window.event;
			event.currentTarget = event.srcElement;
			while(event.currentTarget.nodeName.toLowerCase() != "li") {
				event.currentTarget = event.currentTarget.parentNode;
			}
			event.cancelBubble = true;
		} else {
			event.stopPropagation();
		}
		cT = event.currentTarget;
	}
	
	// Menüeinträge aktiver/deaktivieren
	if (treeMenu_contains(treeMenu_getClasses(cT), "level0")) {
		if (aktMenuItem !== "" && aktMenuItem.selected) {
			jscss("remove",aktMenuItem,classSelected);
		}
		if (aktSubMenuItem !== "" && aktSubMenuItem.selected) {
			jscss("remove",aktSubMenuItem,classSelectedSub);
		}
		aktMenuItem = cT.childNodes[2]; // mit Schatten ! Ohne [0]
		jscss("add",aktMenuItem,classSelected);
		aktMenuItem.selected = true;	
	} else {
		if (aktSubMenuItem !== "" && aktSubMenuItem.selected) {
			jscss("remove",aktSubMenuItem,classSelectedSub);
		}
		aktSubMenuItem = cT.childNodes[0];
		jscss("add",aktSubMenuItem,classSelectedSub);
		aktSubMenuItem.selected = true;		
	}
	
	
    var array = treeMenu_getClasses(cT);
	if (hideOpend) {
		for(i = 0; i < array.length; i++) {
			if(array[i] == "level0") {
				if (selLevel != cT) {
					var a = treeMenu_getClasses(selLevel);
					for(i = 0; i < a.length; i++) {
			      		if(a[i] == "treeMenu_opened" ) {
			       			a[i] = "treeMenu_closed";
						}
			     	 }
					selLevel.className = a.join(" ");
				}	
			}
		}
	}
    for(i = 0; i < array.length; i++) {
      if(array[i] == "treeMenu_closed") {
        array[i] = "treeMenu_opened";
      }
      else if(array[i] == "treeMenu_opened") {
        array[i] = "treeMenu_closed";
      }
	  if (array[i] == "level0") {
  		selLevel = cT;
	  }
    }

	cT.className = array.join(" ");

  }
  
  /*
   * Gibt alle Klassen zurück, die einem HTML-Element zugeordnet sind.
   * 
   * element: Das HTML-Element
   * return: Die zugeordneten Klassen.
   */
  function treeMenu_getClasses(element) {
    if(element.className) {
      return element.className.match(/[^ \t\n\r]+/g);
    }
    else {
      return new Array(0);
    }
  }
  
  /*
   * Überprüft, ob ein Array ein bestimmtes Element enthält.
   * 
   * array: Das Array
   * element: Das Element
   * return: true, wenn das Array das Element enthält.
   */
  function treeMenu_contains(array, element) {
    for(var i = 0; i < array.length; i++) {
      if(array[i] == element) {
        return true;
      }
    }
    return false;
  }
  
  /*
   * Gibt einen String zurück, indem die Nummern aller geöffneten
   * Menüpunkte stehen. 
   *
   * menu: Referenz auf die Liste
   * return: Der String
   */
  function treeMenu_store(id) {
    menu = document.getElementById(id);
	var result = new Array();
    var items = menu.getElementsByTagName("li");
    for(var i = 0; i < items.length; i++) {
      if(treeMenu_contains(treeMenu_getClasses(items[i]), "treeMenu_opened")) {
        result.push(i);
      }
    }
    return result.join(" ");
  }  
  /*
  	Schließt den Baum komplett
  */
  function treeMenu_restore(id) {
	menu = document.getElementById(id);
	var items = menu.getElementsByTagName("li");
	for (var i = 0; i < items.length; i++) {
		if(treeMenu_contains(treeMenu_getClasses(items[i]), "treeMenu_opened")) {
			jscss("swap", items[i], "treeMenu_opened", "treeMenu_closed");
		}
	}
	if (aktMenuItem !== "" && aktSubMenuItem !== "") {
		jscss("remove",aktMenuItem,classSelected);
		jscss("remove",aktSubMenuItem,classSelectedSub);
	}
	aktMenuItem.selected = false;
	aktSubMenuItem.selected = false;
	aktMenuItem = "";
	aktSubMenuItem = "";
  }
  /*
  	Öffnet Baum an bestimmter Stelle (t) und (m) für zweite Ebene
  */
	function treeMenu_openTree(id, t, m) {
		var menu = document.getElementById(id);
		var items = menu.getElementsByTagName("li");
		var item = items[t];
		treeMenu_handleClick('', item);
		item = items[m];
		treeMenu_handleClick('', item);
	}
	
  /*
  	Klassen per JavaScript hinzufügen
  	Ändern, tauschen, löschen von Styleklassen
  	a: Aktion 
		"swap": tauscht c1 gegen c2
		"add": fügt c1 hinzu
		"remove": löscht c1
		"check": prüft, ob Klasse c1 schon dem Objekt o hinzugefügt wurde und gibt true oder false zurück
	o: Objekt
	c1: Name Klasse1
	c2: Name Klasse2
  */
  

  
function jscss(a,o,c1,c2) {
	switch (a){
	  case 'swap':
	    o.className=!jscss('check',o,c1)?o.className.replace(c2,c1):o.className.replace(c1,c2);
	  break;
	  case 'add':
	    if(!jscss('check',o,c1)){o.className+=o.className?' '+c1:c1;}
	  break;
	  case 'remove':
	    var rep=o.className.match(' '+c1)?' '+c1:c1;
	    o.className=o.className.replace(rep,'');
	  break;
	  case 'check':
	    return new RegExp('\\b'+c1+'\\b').test(o.className);
	}
}

