function Submenu()
{ 
	this.items = [];
}

Submenu.prototype.FindMenu = function (menuid, level/* Object: уровень вложенности */)
{
	if (!level)
		level = {};
	level.value = -1;
	function GetSubMenu(subitem, levelvalue)
	{
		if (subitem.id == menuid)
		{
			level.value = levelvalue;
			return subitem;
		}
		for (var i = 0; i < subitem.items.length; i++)
		{
			var menuitem = GetSubMenu(subitem.items[i], levelvalue + 1);
			if (menuitem)
				return menuitem;
		}
		return null;
	}
	
	for (var i = 0; i < this.items.length; i++)
	{
		var menuitem = GetSubMenu(this.items[i], 1);
		if (menuitem)
			return menuitem;
	}
	return null;
}

Submenu.prototype.Add = function (
	  strmenu/* String: текстовое значение пункта меню */
	, menuid/* Number: идентификатор пункта меню */
	, parentid/* = 0 Number: идентификатор родительского пункта меню */
	, href/* String */)
{
	if (!parentid)
		parentid = 0;
	var parentItem;
	if (parentid > 0)
		parentItem = this.FindMenu(parentid);
	var o = {id:menuid, title:strmenu, href:href, parentid:parentid, items:[]};
	if (parentItem)
		parentItem.items.push(o);
	else
		this.items.push(o);
}

Submenu.prototype.Render = function(id)
{
	html = '';
	for (var i = 0; i < this.items.length; i++)
	{
		var o = this.items[i];
		html += '<div id="submenu_' + o.id + '" class="submenu" submenuid="' + o.id + '">'
+ '<table cellpadding="0" cellspacing="0" width="100%">'
+ '<tr>'
	+ '<td><a href="' + o.href + '">' + o.title + '</a></td>'
+ '</tr>'
+ '<tr>'
	+ '<td style="height:4px"></td>'
+ '</tr>	'
+ '<tr>'
	+ '<td><div style="background:url(img/icon.underline.gray.gif); background-repeat:repeat-x; height:1px"></div></td>'
+ '</tr>'
+ '</table>'
+ '</div>';
	}
	document.getElementById(id).innerHTML = html;
	for (var i = 0; i < this.items.length; i++)
	{
		var m = document.getElementById("submenu_" + this.items[i].id);
		if (!m)
			continue;
		AddListener("mouseover", m, OnMouseOver);
		AddListener("mouseout", m, OnMouseOut);
	}
}

function OnMouseOver(e)
{
	if (!e)
		e = window.event;
	var t = e.target;
	if (!t)
		t = e.srcElement;
	var d = FindParent(t, {"attr":"submenuid"}, true);
	if (!d)
		return;
	var id = d.getAttribute("submenuid");
	var c = submenu.FindMenu(id, {});
	if (c.closetimer)
		window.clearTimeout(c.closetimer);
	c.opentimer = window.setTimeout(function()
	{
		submenu.ShowMenu(id);
	}, 300);
}

function OnMouseOut(e)
{
	if (!e)
		e = window.event;
	var t = e.target;
	if (!t)
		t = e.srcElement;
	var r = e.relatedTarget;
	if (!r)
		r = e.toElement;
	var d = FindParent(t, {"attr":"submenuid"}, true);
	var to = FindParent(r, {"attr":"submenuid"}, true);
	if (!d)
		return;
	var id = d.getAttribute("submenuid");
	var c = submenu.FindMenu(id, {});
	if (!to || to.getAttribute("submenuid") != id)
	{
		if (c.opentimer)
			window.clearTimeout(c.opentimer);
		c.closetimer = window.setTimeout(function()
		{
			submenu.HideMenu(id);
		}, 300);
	}
}

Submenu.prototype.ShowMenu = function(id)
{
	var d = document.createElement("div");
	var c = this.FindMenu(id, {});
	if (c.menu || c.items.length == 0)
		return;
	var hol = document.getElementById("submenu_" + c.id);
	d.style.position = "absolute";
	var html = '<div style="position:absolute" id="submenu_container_' + id + '" submenuholderid="' + id + '">'
+ '<div style="position:relative">'
		+ '<div id="submenu_shadow_' + id + '" style="position:absolute; left:2px; top:2px; background-color:#202020" class="opacity40"></div>'
        + '<div id="submenu_text_' + id + '" style="position:absolute; background-color:#CCCCCC">'
        + '<table cellpadding="0" cellspacing="1" width="220">'
		+ '<tr>'
			+ '<td style="background-image:url(img/menu.middle.melt.jpg)">'
			+ '<table cellpadding="0" cellspacing="0" width="100%">';
	for (var i = 0; i < c.items.length; i++)
	{
        html += '<tr>'
				+ '<td style="padding-left:4px; padding-top:1px; padding-right:5px; padding-bottom:2px" align="left">'
				+ '<div id="submenu_' + c.items[i].id + '" class="submenu" submenuid="' + c.items[i].id + '"><a href="' + c.items[i].href + '">' + c.items[i].title + '</a></div>'
				+ '</td>'
			+ '</tr>';
	}
        html += '</table>'
			+ '</td>'
		+ '</tr>'
		+ '</table>'
        + '</div>'
	+ '</div>'
+ '</div>';
	d.innerHTML = html;
	var o = GetOffset(hol);
	d.style.left = (o.left + hol.offsetWidth) + "px";
	d.style.top = o.top + "px";
	document.body.appendChild(d);
	c.menu = d;
	var txt = document.getElementById("submenu_text_" + id);
	var sh = document.getElementById("submenu_shadow_" + id);
	if (txt && sh)
	{
		sh.style.width = txt.offsetWidth + "px";
		sh.style.height = txt.offsetHeight + "px";
	}
	var hol = document.getElementById("submenu_container_" + id);
	AddListener("mouseover", hol, OnSubmenuMouseOver);
	AddListener("mouseout", hol, OnSubmenuMouseOut);
	for (i = 0; i < c.items.length; i++)
	{
		var m = document.getElementById("submenu_" + c.items[i].id);
		if (!m)
			continue;
		AddListener("mouseover", m, OnMouseOver);
		AddListener("mouseout", m, OnMouseOut);
	}
}

Submenu.prototype.HideMenu = function(id)
{
	var c = document.getElementById("submenu_container_" + id);
	if (!c)
		return;
	var n = this.FindMenu(id, {});
	n.menu = null;
	c.parentNode.removeChild(c);
}

function OnSubmenuMouseOver(e)
{
	if (!e)
		e = window.event;
	var t = e.target;
	if (!t)
		t = e.srcElement;
	var d = FindParent(t, {"attr":"submenuholderid"}, true);
	if (!d)
		return;
	var id = d.getAttribute("submenuholderid");
	var c = submenu.FindMenu(id, {});
	if (c.closetimer)
		window.clearTimeout(c.closetimer);
	submenu.StayVisible(id);
}

function OnSubmenuMouseOut(e)
{
	if (!e)
		e = window.event;
	var t = e.target;
	if (!t)
		t = e.srcElement;
	var r = e.relatedTarget;
	if (!r)
		r = e.toElement;
	var d = FindParent(t, {"attr":"submenuholderid"}, true);
	var to = FindParent(r, {"attr":"submenuholderid"}, true);
	if (!d)
		return;
	var id = d.getAttribute("submenuholderid");
	var c = submenu.FindMenu(id, {});
	if (!to || to.getAttribute("submenuholderid") != id)
	{
		if (c.opentimer)
			window.clearTimeout(c.opentimer);
		c.closetimer = window.setTimeout(function()
		{
			var p = submenu.FindMenu(c.id, {});
			while (p)
			{
				submenu.HideMenu(p.id);
				p = submenu.FindMenu(p.parentid, {});
			}
		}, 300);
	}
}

Submenu.prototype.StayVisible = function(id)
{
	var c = this.FindMenu(id, {});
	var p = this.FindMenu(c.parentid, {});
	while (p)
	{
		if (p.closetimer)
			window.clearTimeout(p.closetimer);
		p = this.FindMenu(p.parentid, {});
	}
}
