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

	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.classNameToList = function(classname)
	{
		var classes = classname.split(' ');
		for (i = 0; i < classes.length; i++)
		{
			if (classes[i].match(/^sub_/)) return(document.getElementById(classes[i]));
		}
	}

	app.classNameToArea = function(classname)
	{
		var classes = classname.split(' ');
		var subclass = null;

		for (i = 0; i < classes.length; i++)
		{
			if (classes[i].match(/^sub_/)) subclass = classes[i];
		}

		if (subclass)
		{
			menu = document.getElementById(app.menuId);
			if (menu)
			{
				for (i = 0; i < menu.childNodes.length; i++)
				{
					if (menu.childNodes[i].nodeName == 'AREA' && app.hasClass(subclass, menu.childNodes[i].className))
					{
						return(menu.childNodes[i]);
					}
				}
			}
		}
		return(null);
	}

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

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

							listNode = app.classNameToList(menu.childNodes[i].className);
							if (listNode)
							{
								listNode.onmouseover = function() { app.toggleSubmenu(app.classNameToArea(this.getAttribute('id')), true, false); };
								listNode.onmouseout = function() { app.toggleSubmenu(app.classNameToArea(this.getAttribute('id')), false, false, 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 (document.getElementById && parent)
			{
				var listNode = document.getElementById(parent.className);
				if (listNode)
				{
					if (display == true)
						listNode.style['display'] = 'block';
					else
						listNode.style['display'] = 'none';
				}

				/*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, 'highlight');
				else
					parent.className = app.removeClass(parent.className, 'highlight');*/
			}
		}
	}

	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 == 'AREA')
				{
					app.toggleSubmenu(menu.childNodes[i], false, false, 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);
	}
}

var dhtmlMenu;
dhtmlMenu = new ly_dhtmlmenu();
dhtmlMenu.addEvent(window, 'load', function() { dhtmlMenu.setEventHandlers('navimap'); } );