/**
 * Allgemeines DHTML-Menü-Script
 * @author ag
 * @version 2007-06-26
 */

function ly_dhtmlmenu()
{
	var app = this;
	app.timeout = null;
	app.menuId = null;
	app.selectNodes = null;
	app.selectDisplayStates = new Array();

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

		if (typeof id != 'undefined')
		{
			if (document.getElementById)
			{
				app.selectNodes = document.getElementsByTagName('select');

				if (app.selectNodes)
				{
					for (i = 0; i < app.selectNodes.length; i++)
					{
						app.selectDisplayStates[i] = (app.selectNodes[i].style.visibility == 'hidden') ? 'hidden' : 'visible';
					}
				}

				app.menuId = id;
				menu = document.getElementById(id);
				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;
		var selectNodes;

		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)
			{
				if (parent.childNodes)
				{
					if (app.selectNodes)
					{
						for (i = 0; i < app.selectNodes.length; i++)
						{
							app.selectNodes[i].style.visibility = (display == true) ? 'hidden' : app.selectDisplayStates[i];
						}
					}

					for (i = 0; i < parent.childNodes.length; i++)
					{
						if (parent.childNodes[i].nodeName == 'UL')
						{
							if (display == true)
								parent.childNodes[i].style['display'] = 'block';
							else
								parent.childNodes[i].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;
		var selectNodes;

		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);
	}
}

var dhtmlMenu;
function ly_dhtmlmenu_init(containerName)
{
	dhtmlMenu = new ly_dhtmlmenu();
	dhtmlMenu.setEventHandlers(containerName);
}
