﻿/// <reference path="~/Scripts/ByteStorm/_BSC_Interface.js" />
(function()
{
	BSC.M = function()
	{
		var timer = null;
		var active = null;
		var dragging = false;

		return {
			ActiveId: active,
			SetActive: function(id)
			{
				active = id;
			},
			GetActiveId: function()
			{
				return active;
			},
			OnMouseout: function(e)
			{
				/// <summary>Javascript data cache 4</summary>
				/// <param name="name">Person's name</param>
				/// <return>Ninja</return>
				if (timer) clearTimeout(timer);
				return false;
			},
			OnMouseover: function(e)
			{
				/// <summary>Javascript data cache 4</summary>
				/// <param name="name">Person's name</param>
				/// <return>Ninja</return>
				if (dragging) return;
				var el = BSC.E.GetTarget(e);
				while (el.id !== "menu")
				{
					if (el.nodeName.toLowerCase() === "dd")
					{
						// No submenu
						if (timer) clearTimeout(timer);
						//BSC.M.OpenSubmenu(el);
						if (el.id === active) return;
						timer = setTimeout(function() { BSC.M.OpenSubmenu(el); }, 350);
						return;
					} else
					{
						el = el.parentNode;
					}
				}
				return false;
			},
			OpenSubmenu: function(el)
			{
				/// <summary>Javascript data cache 4</summary>
				/// <param name="name">Person's name</param>
				/// <return>Ninja</return>
				if (active != null)
				{
					var uisubmenu = $("#submenu_" + active);
					uisubmenu.unbind();
					uisubmenu.css({ display: 'none' });
					active = null;
				}
				// No submenu
				if (el.className.length === 0) return;
				var id = (el.id).replace(/menu_/g, "");
				active = id;
				var uimm = $("#menu");
				var uim = $("#menu_" + id);
				var uism = $("#submenu_" + id);
				uimm.css("z-index", BSC.UI.Ws.GetNextZIndex());
				var uilist = $("#menulist");
				var c = uilist.children();
				var cl = c.length;
				var i = 0;
				var _id = null;
				for (j=0; i < cl; i++) { _id = (c[i].id).replace(/menu_/g, ""); if (_id === id) break; }

				var _mw = parseInt(uilist.css("width")); // Mainmenu width
				var _ml = parseInt(uimm.css("left"));  // Mainmenu left
				var _mt = parseInt(uimm.css("top"));  // Mainmenu left
				var _smw = parseInt(uilist.css("width"));  // Submenu width
				var _smh = parseInt(uilist.css("height"));  // Submenu width

				var l = _ml + _mw - 40; //
				var t = (30 * i) + _mt - 65; //
				var lw = _smw + l;
				var th = _smh + t;

				if (lw > $(document).width())
					l = _ml - _mw + 20;
				if (th > ($(document).height() + 20))
					t = ($(document).height() - _smh + 20);

				uism.css({ top: t, left: l, display: 'block' });
				uism.bind("click", BSC.M.SubmenuClick);
				uism.bind("mouseover", BSC.M.ClearMenuTimer);

			},
			ClearMenuTimer: function(e)
			{
				if (timer) clearTimeout(timer);
			},
			SubmenuClick: function(e)
			{
				/// <summary>Javascript data cache 4</summary>
				/// <param name="name">Person's name</param>
				/// <return>Ninja</return>
				var el = BSC.E.GetTarget(e);
				var href = "";
				while (el.id !== "menulist")
				{
					if (el.nodeName.toLowerCase() === "a")
					{
						href = (el.href).replace(/http:\/\/[^\/]+/i, "");
						//el.href = "javascript:void(0)";
						el = el.parentNode;
					}
					else if (el.nodeName.toLowerCase() === "dd")
					{
						BSC.M.HideActiveSubmenu();
						GO(href);
						return false;
					} else
					{
						el = el.parentNode;
					}
				}
				return false;
			},
			HideActiveSubmenu: function()
			{
				var uism = $("#submenu_" + active);
				uism.unbind("click", BSC.M.SubmenuClick);
				uism.unbind("mouseover", BSC.M.ClearMenuTimer);
				uism.css({ display: 'none' });
				active = null;
			},
			OnMouseoverTopmenu: function(e)
			{
				if (dragging) return;
				var el = BSC.E.GetTarget(e);
				while (el && el.nodeName.toLowerCase() !== "ul")
				{
				    if (el.nodeName.toLowerCase() === "li")
					{
						// No submenu
						if (timer) clearTimeout(timer);
						// The same menu
						if (el.id === active) return;
						//BSC.M.OpenTopSubmenu(el);
						timer = setTimeout(function() { BSC.M.OpenTopSubmenu(el); }, 350);
						return;
					} else
					{
						el = el.parentNode;
					}
				}
				return false;
			},
			OpenTopSubmenu: function(el)
			{
				if (active != null)
				{
					var uisubmenu = $("#submenu_" + active);
					uisubmenu.unbind();
					uisubmenu.css({ display: 'none' });
					active = null;
				}
				// Have no submenus
				if ((el.className).indexOf("submenu") == -1)
					return false;

				active = el.id;
				var parentId = active.split("_")[0];
				var li = $("#" + parentId + "_topmenu li");
				var l = li.length;
				var offsetX = 0;
				for (i = 0; i < l; i++)
				{
					if (li[i].id === active) break;
					var w = parseInt($(li[i]).css("width"));
					offsetX += w;
				}
				var submenu = $("#submenu_" + el.id);
				submenu.css({ display: 'block', top: 30, left: w - 7 });
			},
			OnTopmenuClick: function(e)
			{
				var el = BSC.E.GetTarget(e);
				while (el.nodeName.toLowerCase() !== "ul")
				{
				    if (el.nodeName.toLowerCase() === "li")
					{
						// No submenu
						if (timer) clearTimeout(timer);
						// The same menu
						if (el.id === active) return;
						//BSC.M.OpenSubmenu(el);
						timer = setTimeout(function() { BSC.M.OpenTopSubmenu(el); }, 350);
						return;
					} else
					{
						el = el.parentNode;
					}
				}
				return false;
			}
		};
	} ();
})();
