function GetItem(id)
{
	if (document.getElementById) return document.getElementById(id);
	if (document.all) return document.all[id];
	if (document.layers) return document.layers[id];
	return null;
}

function GetPos(obj)
{
	var posx = obj.offsetLeft;
	var posy = obj.offsetTop;
	while (obj = obj.offsetParent) {
		posx += obj.offsetLeft
		posy += obj.offsetTop
	}
	return [posx,posy];
}

function MenuOpen(obj)		{obj.menu.ShowMenu(obj,obj.menuid);}
function MenuOffNow(obj)	{GetItem(obj).menu.OffNow();}
function MenuOff(obj)		{obj.menu.Off();}
function MenuKeep(obj)		{obj.menu.Keep();}

function Menu(div,url,style,cl,subcl)
{
	this.alarm = null;
	this.style = style;
	this.cl = cl;
	this.subcl = subcl;
	this.url = url;
 	if (!GetItem(div)) return null;
	this.div = div;
	GetItem(div).menu = this;
	GetItem(div).onmouseover = function () {MenuKeep(this);};
	GetItem(div).onmouseout = function () {MenuOff(this);};
	this.menus = new Array();
	this.submenus = new Array();
	this.buttons = new Array();
	this.style = 'l';
	this.keepit = false;

	this.SetMenu = function(name)
	{
		if (!GetItem(name)) return -1;
		this.menus.push(new Array(name,null,0,new Array()));
		ktory = this.menus.length-1;
		GetItem(name).menu = this;
		GetItem(name).menuid = ktory;
		GetItem(name).onmouseover = function () {MenuOpen(this);};
		GetItem(name).onmouseout = function () {MenuOff(this);};
		return ktory;
	}

	this.AddButton = function(name,link,papa)
	{
		if (papa>=this.menus.length || papa<0) return -1;
		ktory = this.menus.push(new Array(name,link,this.menus[papa][2]+1,new Array()));
		ktory--;
		this.menus[papa][3].push(ktory);
		return ktory;
	}

	this.Generate = function()
	{
 		lvl = new Array();
		for (i=0; i<this.menus.length; i++)
			while (lvl.length<this.menus[i][2]+1) lvl.push(0);
		for (i=0; i<this.menus.length; i++)
			if (this.menus[i][3].length>0 && lvl[this.menus[i][2]+1]<this.menus[i][3].length)
				lvl[this.menus[i][2]+1] = this.menus[i][3].length;

		this.submenus[0] = null;
		this.buttons[0] = null;
		for (l=1; l<lvl.length; l++)
		{
			this.submenus[l] = document.createElement('div');
			this.submenus[l].className = 'as_submenu' + (this.cl == null ? '' : ' ' + this.cl + (this.subcl ? ' ' + this.cl + '_' + l : ''));
			this.submenus[l].menu = this;
			this.submenus[l].style.display = 'none';
 			this.submenus[l].onmouseover = function () {MenuKeep(this);};
			this.submenus[l].onmouseout = function () {MenuOff(this);};
			document.body.appendChild(this.submenus[l]);
			this.buttons[l] = new Array();
 			for (i=0; i<lvl[l]; i++)
			{
				this.buttons[l][i] = document.createElement('a');
				this.buttons[l][i].menu = this;
				if (l<lvl.length-1) this.buttons[l][i].onmouseover = function () {MenuOpen(this);};
				this.submenus[l].appendChild(this.buttons[l][i]);
			}
		}
	}

	this.ShowMenu = function(obj,root)
	{
		if (root>=this.menus.length || root<0) return;
		var lvl = this.menus[root][2] + (this.menus[root][3].length ? 1 : 0);
		for (l=1; l<this.submenus.length; l++) this.submenus[l].style.display = (l <= lvl ? '' : 'none');
		if (this.menus[root][3].length<1) return;

		for (i=0; i<this.buttons[lvl].length; i++)
		{
			if (i>=this.menus[root][3].length)
			{
				this.buttons[lvl][i].style.display = 'none';
				this.buttons[lvl][i].src = '#';
			}
			else
			{
				this.buttons[lvl][i].style.display = '';
				this.buttons[lvl][i].className = (this.menus[this.menus[root][3][i]][3].length<1 ? null : 'roll_' + this.style.charAt(this.style.length-1));
				this.buttons[lvl][i].innerHTML = this.menus[this.menus[root][3][i]][0];
				this.buttons[lvl][i].href = (this.menus[this.menus[root][3][i]][1] == null ? window.location : (this.url == null ? '' : this.url + '?') + this.menus[this.menus[root][3][i]][1]);
				this.buttons[lvl][i].menuid = this.menus[root][3][i];
			}
		}

		var coors = GetPos(obj);

		if (this.style.charAt(0) == 'u' || this.style.charAt(0) == 'd')
		{
			if (lvl == 1)
			{
				this.submenus[lvl].style.top = coors[1] + (this.style.charAt(0) == 'u' ? -1*this.submenus[lvl].offsetHeight : obj.offsetHeight)+ 'px';
				this.submenus[lvl].style.left = coors[0] + 'px';
				s = 'n';
			}
			else s = this.style.charAt(1);
		} else s = this.style;

		switch (s)
		{
			case 'n':
				break;

			case 'r':
				this.submenus[lvl].style.top = coors[1] + 'px';
				this.submenus[lvl].style.left = coors[0] + obj.offsetWidth + 'px';		
				break;

			case 'l':
				this.submenus[lvl].style.top = coors[1] + 'px';
				this.submenus[lvl].style.left = coors[0] - this.submenus[lvl].offsetWidth + 'px';		
				break;
		}
	}

	this.Off = function()
	{
		this.keepit = false;
		if (this.alarm) clearTimeout(this.alarm);
		this.alarm = setTimeout("MenuOffNow('" + this.div + "')",100);
	}

	this.OffNow = function()	{if (!this.keepit) for (l=1; l<this.submenus.length; l++) this.submenus[l].style.display = 'none';}
	this.Keep = function()		{this.keepit = true;}

}

/* === ON LOAD === */

var onloadset = new Array();

function AddOnLoad(func)
{
	i = onloadset.length;
	onloadset[i] = func;
}

function ExecOnLoad()
{
	for (i=0; i<onloadset.length; i++) eval(onloadset[i]);
}