function ly_dhtmlmenu(id)
{
	var app = this;
	app.timeout = null;
	app.menuId = id;

	app.addEvent = function(obj, type, fn)
	{
		if (obj.addEventListener)
		{
			obj.addEventListener(type, fn, false);
		}
		else if (obj.attachEvent)
		{
			obj["e"+type+fn] = fn;
			obj[type+fn] = function() { obj["e"+type+fn]( window.event ); }
			obj.attachEvent("on"+type, obj[type+fn]);
		}
	}

	app.setEventHandlers = function()
	{
		var menu;
		var i;
		var highlight;

		if (typeof app.menuId != 'undefined')
		{
			if (document.getElementById)
			{
				menu = document.getElementById(app.menuId);
				if (menu)
				{
					for (i = 0; i < menu.childNodes.length; i++)
					{
						if (menu.childNodes[i].nodeName == 'LI')
						{
							menu.childNodes[i].onmouseover = function() { app.toggleSubmenu(this, true, app.hasClass('active', this.className)); };
							menu.childNodes[i].onmouseout = function() { app.toggleSubmenu(this, false, app.hasClass('active', this.className), true); };
						}
					}
				}
			}
		}
	}

	app.toggleSubmenu = function(parent, display, highlight, delay)
	{
		var i;
		if (typeof delay == 'undefined') delay = false;

		// Timeout ggf. stoppen
		if (app.timeout != null) window.clearTimeout(app.timeout);

		if (display == true) app.closeAllSubmenus();

		// Bei gewünschter Verzögerung Timeout setzen
		if (delay == true && display == false)
		{
			app.timeout = window.setTimeout(function() { app.toggleSubmenu(parent, display, highlight, false); }, 300);
		}
		else
		{
			if (parent)
			{
				if (highlight == true) {
					parent.className = app.addClass(parent.className, 'active');
				} else {
					parent.className = app.removeClass(parent.className, 'active');
				}

				if (display == true) {
					parent.className = app.addClass(parent.className, 'expanded');
				} else {
					parent.className = app.removeClass(parent.className, 'expanded');
				}
			}
		}
	}

	app.closeAllSubmenus = function()
	{
		var i;
		menu = document.getElementById(app.menuId);

		if (document.getElementById && menu)
		{
			for (i = 0; i < menu.childNodes.length; i++)
			{
				if (menu.childNodes[i].nodeName == 'LI')
				{
					app.toggleSubmenu(menu.childNodes[i], false, app.hasClass('active', menu.childNodes[i].className), false);
				}
			}
		}
	}

	app.removeClass = function(old, remove)
	{
		var classes;
		var i;
		var f = null;

		classes = old.split(' ');
		for (i = 0; i < classes.length; i++)
		{
			if (classes[i] == remove) f = i;
		}
		if (f != null) classes.splice(f, 1);
		return(classes.join(' '));
	}

	app.replaceClass = function(old, toreplace)
	{
		var classes;
		var i;
		var f = null;

		classes = old.split(' ');
		for (i = 0; i < classes.length; i++)
		{
			if (classes[i] == toreplace) f = i;
		}
		if (f != null) classes[f] = toreplace;
		return(classes.join(' '));
	}

	app.addClass = function(old, toadd)
	{
		var classes;
		var i;
		var f = null;

		classes = old.split(' ');
		for (i = 0; i < classes.length; i++)
		{
			if (classes[i] == toadd) f = i;
		}
		if (f == null) classes.push(toadd);
		return(classes.join(' '));
	}

	app.hasClass = function(classname, classes)
	{
		var class_strings;
		var i;

		class_strings = classes.split(' ');
		for (i = 0; i < class_strings.length; i++)
		{
			if (class_strings[i] == classname) return(true);
		}
		return(false);
	}

	app.addEvent(window, 'load', app.setEventHandlers);
}

new ly_dhtmlmenu('navigation');
