/* (C) 2006-2007 Veselchak U */

/* drop-down menu */

var menu_list = [];
var menu_active = null;

function mainMenu(table)
{
	this.id = table;
	this.ref = lib.getRef(table);
	this.subs = [];
	menu_list[table] = this;
	this.ddm_ref = null;
	this.addMenu = function (caption, url, target, title)
		{
			var uid = lib.makeUID('menu_', '');

			this.subs[uid] =
			{
				items: [],
				caption: caption,
				url: url,
				target: target,
				title: title,
				id: uid,
				parent: this,
				ref: null,
				x: 0,
				y: 0
			};

			return uid;
		};
	this.delMenu = function (sub)
		{
			delete this.subs[sub];
		};
	this.addItem = function (sub, caption, url, target, title)
		{
			var uid = lib.makeUID('menuitem_', '');

			this.subs[sub].items[uid] =
			{
				caption: caption,
				url: url,
				target: target,
				title: title,
				id: uid,
				parent: this.subs[sub],
				ref: null
			};

			return uid;
		};
	this.delItem = function (sub, item)
		{
			delete this.subs[sub].items[item];
		};
	this.addMenuFromList = function (list)
		{
			var i, j, menu, sub, item;

			for (i = 0; i < list.length; i++)
			{
				menu = list[i];
				sub = this.addMenu(menu.caption, menu.url, menu.target, menu.title);

				if (!menu.items || !menu.items.length)
					continue;

				for (j = 0; j < menu.items.length; j++)
				{
					item = menu.items[j];
					this.addItem(sub, item.caption, item.url, item.target, item.title);
				}
			}
			
		};
	this.show = function ()
		{
			var row = this.ref.rows[0];
			var sub;
			var menu;
			var cell;
			var cnt = 0;
			var width = 100;
			var cellw;
			var n = 1;

			for (sub in this.subs)
				cnt++;

			while (row.cells.length)
				row.removeChild(row.childNodes[0]);

			for (sub in this.subs)
			{
				if (n == cnt)
					cellw = width;
				else
					cellw = Math.floor(100.0/cnt);
				cell = row.appendChild(document.createElement('TD'));
				cell.style.width = cellw + '%';
				width -= cellw;
				n++;
				menu = cell.appendChild(document.createElement('A'));
				menu.id = this.subs[sub].id;
				if (this.subs[sub].url)
				{
					menu.href = this.subs[sub].url;
					menu.target = this.subs[sub].target ? this.subs[sub].target : '_self';
				}
				else
				{
					menu.href = 'javascript:void(0);';
					menu.onclick = this._onclick;
				}
				if (this.subs[sub].title)
					menu.title = this.subs[sub].title;
				menu.innerHTML = this.subs[sub].caption;
				menu._ref = this.subs[sub];
				this.subs[sub].ref = menu;
			}
		};
	this.findItem = function (item)
		{
			for (var s in this.subs)
				for (var i in this.subs[s].items)
					if (i == item)
						return this.subs[s].items[i];
			return null;
		};
	this._onclick = function (ev)
		{
			ev = ev ? ev : event;
			var menu = this._ref;
			var box = {w: 0, h: 0};
			var ddm_ref;
			var item_ref;
			var pos = {x: 0, y: 0};
			var rect = {l: 0, t: 0, r:0, b: 0};

			if (isIE)
			{
				pos.x = ev.clientX + document.all[1].scrollLeft;
				pos.y = ev.clientY + document.all[1].scrollTop;
			}
			else
			{
				pos.x = ev.pageX;
				pos.y = ev.pageY;
			}

			if (menu_active)
				menu.parent.hide();

			menu_active = menu;

			ddm_ref = document.createElement('DIV');
			ddm_ref.className = 'dropdownmenu';
			ddm_ref._ref = menu;
			ddm_ref.id = menu.id;
			menu.parent.ddm_ref = ddm_ref;
			document.body.appendChild(ddm_ref);
			ddm_ref.onmouseout = function (ev)
				{
					ev = ev ? ev : event;
					var pos = {x: 0, y: 0};
					var rect = {l: 0, t: 0, r:0, b: 0};

					if (isIE)
					{
						pos.x = ev.clientX + document.all[1].scrollLeft;
						pos.y = ev.clientY + document.all[1].scrollTop;
					}
					else
					{
						pos.x = ev.pageX;
						pos.y = ev.pageY;
					}

					rect.l = this.offsetLeft;
					rect.t = this.offsetTop;
					rect.r = this.offsetLeft + this.clientWidth;
					rect.b = this.offsetTop + this.clientHeight;

					if (pos.x >= rect.l && pos.x < rect.r &&
						pos.y >= rect.t && pos.y < rect.b)
						return;

					this._ref.parent.hide();
				};

			for (var item in menu.items)
			{
				var item_ref = document.createElement('A');
				menu.items[item].ref = item_ref;
				item_ref.className = 'dropdownmenu_item';
				item_ref.href = menu.items[item].url;
				item_ref.target = menu.items[item].target ? menu.items[item].target : '_self';
				if (menu.items[item].title)
					item_ref.title = menu.items[item].title;
				item_ref.id = menu.items[item].id;
				item_ref.innerHTML = menu.items[item].caption;
				item_ref._ref = menu.items[item];
				ddm_ref.appendChild(item_ref);
			}

			box.w = libPos.getWidth(ddm_ref);
			box.h = libPos.getHeight(ddm_ref);
			pos.x = (pos.x - box.w/2);
			pos.y = pos.y;

			if (pos.x < 0)
				pos.x = 0;
			if (pos.y < 0)
				pos.y = 0;

			if (isIE)
			{
				if (pos.x + box.w >= document.body.scrollWidth)
					pos.x = document.body.scrollWidth - box.w - 2;
				if (pos.y + box.h >= document.body.scrollHeight && document.body.scrollTop + pos.y - box.h > 0)
					pos.y = document.body.scrollTop + pos.y - box.h + 2;
			}
			else
			{
				if (pos.x + box.w >= window.pageXOffset + window.innerWidth)
					pos.x = window.pageXOffset + window.innerWidth - box.w - 2;
				if (pos.y + box.h >= window.pageYOffset + window.innerHeight && pos.y - box.h > 0)
					pos.y = pos.y - box.h + 2;
			}

			if (isIE)
			{
				ddm_ref.style.posLeft = pos.x;
				ddm_ref.style.posTop = pos.y;
			}
			else
			{
				ddm_ref.style.left = pos.x + 'px';
				ddm_ref.style.top = pos.y + 'px';
			}
		};
	this.hide = function ()
		{
			if (this.ddm_ref)
				document.body.removeChild(this.ddm_ref);
			this.ddm_ref = null;
			menu_active = null;
		};

	return this;
}
