// Node object
function Node(id, pid, name, url, title, target, icon, iconOpen, open)
{
    this.id = id;
    this.pid = pid;
    this.name = name;
    this.url = url;
    this.title = title;
    this.target = target;
    this.icon = icon;
    this.iconOpen = iconOpen;
    this._io = open || false;
    this._is = false;
    this._ls = false;
    this._hc = false;
    this._ai = 0;
    this._p;
}

function treeMenu(mainId, cssClass)
{
	this.mainId = mainId;
	this.cssClass = cssClass;
}

treeMenu.prototype.aNodes = new Array();

treeMenu.prototype.add = function(id, pid, name, url, title, target, icon, iconOpen, open)
{
    this.aNodes[this.aNodes.length] = new Node(id, pid, name, url, title, target, icon, iconOpen, open);
}

treeMenu.prototype.GetMenu = function(beginIdOpen)
{
	var o_mainId = "o_" + this.mainId;
	document.write("<div id='" + o_mainId + "'></div>");
	var o_id = document.getElementById(o_mainId);
	
	this.rootId = this.aNodes[0].id;
	
	var currParent = document.createElement("UL");
	currParent.id = this.rootId;

	currParent.className = this.cssClass;
	
	o_id.appendChild(currParent);

	this.Generate(currParent, beginIdOpen);
}

treeMenu.prototype.Generate = function(mainNode, beginIdOpen)
{
	var ulIdToStayOpenId = null;
		
	// fill basic structure:
	for (var n=0; n<this.aNodes.length; n++) 
	{
		var aNode = this.aNodes[n];
		
		if (aNode.pid == -1)
			continue;
			
		var parent = document.getElementById("p_" + aNode.pid);
		if (parent == null)
		{
			if (aNode.pid == this.rootId)
			{
				parent = mainNode;
			}
			else
			{
				var ul = document.createElement("UL");
				ul.id =  "p_" + aNode.pid;
				ul.pid = aNode.pid;
			
				parent = ul;

				mainNode.appendChild(ul);
			}
			
			parent.stayOpen = false;
		}
		
		var li = document.createElement("LI");
		li.id = aNode.id;
		
		var a = this.GetLink(aNode.name, aNode.url);

		parent.stayOpen = parent.stayOpen || false;
		li.appendChild(a);
		parent.appendChild(li);
		
		var _stayOpen = this.StayOpen(aNode);
		if ( _stayOpen || beginIdOpen == aNode.pid )
		{
			parent.stayOpen = true;
			if (_stayOpen)
			{
				a.className = "isOpen";
				ulIdToStayOpenId = "p_" + li.id;
			}
		}
		
		prwUl = parent;
	}

	// set only parent ul:
	var tmpArray = new Array();
	var index = 0;
	var parents = mainNode.getElementsByTagName("UL");
	for (var n=0; n<parents.length; n++)
	{
		if (parents[n].pid == undefined)
			continue;
		
		tmpArray[index++] = parents[n];	
	}

	// attach childs to parents:
	for (var n=0; n<index; n++)
	{
		var pUl = tmpArray[n];
		var pLi = document.getElementById(pUl.pid);
		var a		= pLi.childNodes[0];
		var cloneA	= a.cloneNode( true );

		var rollDownElement = document.createElement( "SPAN" );
		
		rollDownElement.appendChild( cloneA );
		pLi.replaceChild( rollDownElement, a );
		pLi.appendChild(pUl);
		pLi.className = "noImg";
		
		this.Aktivate(rollDownElement, pUl);
		
		if (ulIdToStayOpenId != null && ulIdToStayOpenId == pUl.id)
		{
			pUl.style.display = "";
			rollDownElement.className = "submenuSwitch_on";
			continue;
		}
		
		if (pUl.stayOpen)
		{
			var openParentNode = pUl.parentNode;
			while(openParentNode.nodeName == "LI")
			{
				openParentNode.parentNode.stayOpen = true;
				openParentNode.parentNode.style.display = "";
				
				openParentNode.childNodes[0].className = "submenuSwitch_on";
				openParentNode = openParentNode.parentNode.parentNode;
			}
			rollDownElement.className = "submenuSwitch_on";
		}
		else
		{
			pUl.style.display = "none";
			rollDownElement.className = "submenuSwitch_off";
		}
	}
}

treeMenu.prototype.Aktivate = function(clickElm, ul)
{
	clickElm.onclick = function(evt)
	{
		var e  = (evt ? evt : window.event); 
		var tg = (window.event ? e.srcElement : e.target);
		if (tg.nodeName == "A")
			return true;

		if (ul.style.display == "none")
		{
			ul.style.display = "block";
			this.className = "submenuSwitch_on";
		}
		else
		{
			ul.style.display = "none";
			this.className = "submenuSwitch_off";
		}
	}
}

treeMenu.prototype.StayOpen = function(aNode)
{
 var x = aNode.url.indexOf("id_category=");
 if (x < 0)
   return false;
 
 var y = aNode.url.indexOf("&", x);
 // pokud najdu znak &, pricitam ho do hledani
 y = (y!=-1)?y + 1:aNode.url.length;
 var toFind = aNode.url.substring(x, y);
 
 return (location.href.indexOf(toFind) != -1);
}

treeMenu.prototype.TmpSpan = document.createElement("SPAN");
treeMenu.prototype.GetLink = function(text, url)
{
	var tmpA = "<a href='" + url + "' title='" + text + "' >" + text + "</a>";
	this.TmpSpan.innerHTML = tmpA;
	
	return this.TmpSpan.childNodes[0];
}
