function easy_menu(menu_id)
{
	/*
	menu: Referenz auf die Liste.
	*/
	var this_ref		= this;
	var menu			= document.getElementById(menu_id);
	this.singleExpand	= 0;
	this.storeData		= 0;

	/*
	FÃ¼gt den ListeneintrÃ¤gen Eventhandler und CSS Klassen hinzu,
	um die MenÃ¼punkte am Anfang zu schlieÃŸen.
	*/
	this.treeMenu_init = function()
	{
		var last_expand	= null;
		var array		= new Array(0);
		if (this_ref.storeData == 1)
		{
			array	= window.name.match(/\d+/g);
		} // if (this_ref.storeData == 1)
		// letztes geÃ¶ffnetes Element
		if ((array) && (array.length > 0))
		{
			last_expand	= array[array.length-1];
			array.pop();
		}
		// Ã¶ffne gespeichert Elemente
		var items	= menu.getElementsByTagName("li");
		for(var i = 0; i < items.length; i++)
		{
			items[i].onclick = treeMenu_handleClick;
			if (!treeMenu_contains(treeMenu_getClasses(items[i]), "treeMenu_opened"))
			{
				var classes		= treeMenu_getClasses(items[i]);
				if ((array) && (array.length > 0) && (array[0] == i))
				{
					classes.push("treeMenu_opened");
				} else { // if ((array) && (array.length > 0) && (array[0] == i))
					classes.push("treeMenu_closed");
				} // if ((array) && (array.length > 0) && (array[0] == i))
				if ((last_expand) && (i == last_expand))
				{
					classes.push("treeMenu_active");
				} // if ((last_expand) && (array[0] == last_expand))
				items[i].className = classes.join(" ");
				if ((array) && (array.length > 0) && (array[0] == i))
				{
					array.shift();
				} // if ((array) && (array.length > 0) && (array[0] == i))
			} // if((!treeMenu_contains(treeMenu_getClasses(items[i]), "treeMenu_opened")) && (items[i].getElementsByTagName("ul").length + items[i].getElementsByTagName("ol").length > 0))
		} // for(var i = 0; i < items.length; i++)
	} // this.treeMenu_init = function()

	/*
	Ã„ndert die Klasse eines angeclickten Listenelements, sodass
	geÃ¶ffnete MenÃ¼punkte geschlossen und geschlossene geÃ¶ffnet
	werden.
	event: Das Event Objekt, dass der Browser Ã¼bergibt.
	*/
	treeMenu_handleClick = function(event)
	{
		if(event == null) // 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;
			} // while(event.currentTarget.nodeName.toLowerCase() != "li")
			event.cancelBubble = true;
		} else { // if(event == null)
			event.stopPropagation();
		} // if(event == null) 
		// deaktiviert letztes geÃ¶ffnetes Element
		var items	= menu.getElementsByTagName("li");
		for(var i = 0; i < items.length; i++)
		{
			var array	= treeMenu_getClasses(items[i]);
			for(var j = 0; j < array.length; j++)
			{
				if (array[j] == "treeMenu_active")
				{
					array[j]	= "";
				} // if (array[j] == "treeMenu_active
			} // for(var j = 0; j < array.length; j++)
			items[i].className = array.join(" ");
		} // for(var i = 0; i < items.length; i++)
		// aktiviert geklicktes Element
		var array	= treeMenu_getClasses(event.currentTarget);
		array.push("treeMenu_active");
		event.currentTarget.className = array.join(" ");
		// schlieÃŸt offene Elemente, wenn singleExpand
		if (this_ref.singleExpand == 1)
		{
			var items	= menu.getElementsByTagName("li");
			for(var i = 0; i < items.length; i++)
			{
				var array	= treeMenu_getClasses(items[i]);
				for(var j = 0; j < array.length; j++)
				{
					if (array[j] == "treeMenu_opened")
					{
						array[j]	= "treeMenu_closed";
					} // if (array[j] == "treeMenu_opened")
				} // for(var j = 0; j < array.length; j++)
				items[i].className = array.join(" ");
			} // for(var i = 0; i < items.length; i++)
		} // if (this_ref.singleExpand == 1)
		// Ã¶ffnet oder schlieÃŸt Element
		var array	= treeMenu_getClasses(event.currentTarget);
		for(var 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] == "treeMenu_closed")
		} // for(var i = 0; i < array.length; i++)
		event.currentTarget.className = array.join(" ");
		// Ã¶ffnet Eltern Element
		var parent_element	= event.currentTarget.parentNode.parentNode;
		while (parent_element)
		{
			if (parent_element.nodeName.toLowerCase() == "li")
			{
				var array	= treeMenu_getClasses(parent_element);
				for(var i = 0; i < array.length; i++)
				{
					if(array[i] == "treeMenu_closed")
					{
						array[i]	= "treeMenu_opened";
					} // if(array[i] == "treeMenu_closed")
				} // for(var i = 0; i < array.length; i++)
				parent_element.className = array.join(" ");
			} // if (parent_element.nodeName.toLowerCase() == "li"))
			if ((parent_element.parentNode) && (parent_element.parentNode.parentNode))
			{
				parent_element	= parent_element.parentNode.parentNode;
			} else { // if (parent_element.parentNode.parentNode)
				parent_element	= null;
			}
		} // while (parent_element)
		// Speichert Zustand
		if (this_ref.storeData == 1)
		{
			window.name	= treeMenu_store();
		} // if (this_ref.storeDate == 1)
	} // treeMenu_handleClick = function(event)

	/*
	Gibt alle Klassen zurÃ¼ck, die einem HTML-Element zugeordnet sind.
	element: Das HTML-Element
	return: Die zugeordneten Klassen.
	*/
	treeMenu_getClasses = function(element)
	{
		if(element.className)
		{
			return element.className.match(/[^ \t\n\r]+/g);
		} else { // if(element.className)
			return new Array(0);
		} // if(element.className)
	} // treeMenu_getClasses = function(element)

	/*
	Ãœ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.
	*/
	treeMenu_contains = function(array, element)
	{
		for(var i = 0; i < array.length; i++)
		{
			if(array[i] == element)
			{
				return true;
			} // if(array[i] == element)
		} // for(var i = 0; i < array.length; i++)
		return false;
	} // treeMenu_contains = function(array, element)

	/*
	Gibt einen String zurÃ¼ck, indem die Nummern aller geÃ¶ffneten
	MenÃ¼punkte stehen.
	return: Der String
	*/
	treeMenu_store = function()
	{
		var result			= new Array();
		var items			= menu.getElementsByTagName("li");
		var last_expand		= -1;
		for(var i = 0; i < items.length; i++)
		{
			if(treeMenu_contains(treeMenu_getClasses(items[i]), "treeMenu_opened"))
			{
				result.push(i);
			} // if(treeMenu_contains(treeMenu_getClasses(items[i]), "treeMenu_opened"))
			if(treeMenu_contains(treeMenu_getClasses(items[i]), "treeMenu_active"))
			{
				last_expand	= i;
			} // if(treeMenu_contains(treeMenu_getClasses(items[i]), "treeMenu_active"))
		} // for(var i = 0; i < items.length; i++)
		if (last_expand != -1)
		{
			result.push(last_expand);
		}
		return result.join(" ");
	} // treeMenu_store = function()
} // function easy_menu(menu_id)


