// Foldout menu class
// 
// Copyright 2008 René Lønstrup @ RLdesign.dk
// 
// May not be used commercially without permission from the author.
//
//
// Requirements:
//
// -- class ------------------------ version --
// RLdesign.Utils.js                 1.1.2.4
// RLdesign.Web.Dom.Extensions.js    1.0.0.1
// RLdesign.Events.js                1.0.1.0
// 
// Version 1.0.0.1
//
//
// CHANGELOG:
//
// 29/01/2009
//     1.0.0.1
//           Added possibility to alter the waittime before the submenus disappear via a global variable
// 15/09/2008
//     1.0.0.0
//           Initial release


if (!RLdesign) {
	var RLdesign = function() { };
}
if (!RLdesign.Web) {
	RLdesign.Web = function() { };
}
if (!RLdesign.Web.UI) {
	RLdesign.Web.UI = function() { };
}
if (!RLdesign.Web.UI.Forms) {
	RLdesign.Web.UI.Forms = function() { };
}
if (!RLdesign.Web.Dom) {
	RLdesign.Web.Dom = function() { };
}
if (!RLdesign.Web.Dom.Extensions) {
	RLdesign.Web.Dom.Extensions = function() {
		return {
			GetElementsByClassName: function(c) {
				var oBase = (arguments.length >= 2) ? arguments[1] : document;
				var oGetChildren = (arguments.length >= 3) ? !!arguments[2] : true;
				var cl = c; //.toLowerCase(); // removed case-insensitivity
				var aE = new Array();
				this.findElements = function() {
					var oCurrent = (arguments.length == 1) ? arguments[0] : oBase;
					var i = 0;
					// klasse sammenligning
					if (oCurrent) {
						if (oCurrent.className) {
							var sCl = oCurrent.className; //.toLowerCase(); // removed case-insensitivity
							if (sCl.indexOf(cl) >= 0) {
								var arrCl = sCl.split(" ");
								for (i = 0; i < arrCl.length; i++) {
									if (arrCl[i] == cl) {
										aE[aE.length] = oCurrent;
										break;
									}
								}
							}
						}
						if (oGetChildren === true) {
							// fortsætter på childNodes
							var children = oCurrent.childNodes;
							for (i = 0; i < children.length; i++) {
								if (children[i].tagName != undefined) this.findElements(children[i]);
							}
						}
					}
				}
				this.findElements();
				return aE;
			}
		}
	} ();
}

RLdesign.Web.UI.Forms.FoldoutMenu = function() {
	return {
		Init: function() {
			var menus = RLdesign.Web.Dom.Extensions.GetElementsByClassName("foldoutmenu");
			//alert("menus found: " + menus.length);
			for (var i = 0; i < menus.length; i++) {
				RLdesign.Web.UI.Forms.FoldoutMenu.InitMenu(menus[i]);
			}
		},

		InitMenu: function(objUl) {
			var childUls = objUl.getElementsByTagName("ul");
			for (var i = 0; i < childUls.length; i++) {
				RLdesign.Utils.ToggleDisplay(childUls[i], "none");
				RLdesign.Web.UI.Forms.FoldoutMenu.SetEventHandler(childUls[i]);
			}
		},

		SetEventHandler: function(obj) {
			var parent = obj.parentNode;
			RLdesign.Events.SetEventHandler(parent, "mouseover", function() { RLdesign.Web.UI.Forms.FoldoutMenu.Show(obj); });
			RLdesign.Events.SetEventHandler(parent, "mouseout", function() { RLdesign.Web.UI.Forms.FoldoutMenu.Hide(obj); });
			parent = null;
		},

		Show: function(obj) {
			window.clearTimeout(obj.outtimer);
			RLdesign.Utils.ToggleDisplay(obj, "block");
		},
		Hide: function(obj) {
			var timeoutvalue = 250;
			if (window["RLdesignFoldoutMenuTimeout"] != null) timeoutvalue = parseInt(RLdesignFoldoutMenuTimeout);
			if (timeoutvalue == null) timeoutvalue = 250;
			obj.outtimer = window.setTimeout(function() { RLdesign.Utils.ToggleDisplay(obj, "none") }, timeoutvalue);
		}
	}
} ();

RLdesign.Events.SetEventHandler(window, "load", RLdesign.Web.UI.Forms.FoldoutMenu.Init);

