/*******************************************************************************
*
*	TopTabMenuRenderer.js
*
*******************************************************************************/

function TopTabMenuRenderer(menu)
{
	this._currentTopPos = 0;
	this._currentLeftPos = 0;

	if (arguments.length != 1)
	{
		//throw new Error("Usage: TableMenuRenderer(menuObject)");
	}
	else
	{
		this._processMenu(menu);
	}

	menu._renderer = this;

}

TopTabMenuRenderer.prototype._processMenu = function(menu)
{
	this._renderLevel(menu);

	if(menu._getMenuItemsCount() > 0)
	{
      this._currentTopPos += menu._menuItems[0]._getHeight();

   	for (var i = 0; i < menu._getMenuItemsCount(); i++)
   	{
   		if (menu._menuItems[i]._hasSubMenu())
   		{
   		   this._currentLeftPos = 0;
   			this._processMenu(menu._menuItems[i]._subMenu)
   		}
   	}
   	this._currentTopPos -= menu._menuItems[0]._getHeight();
   }
}


/*******************************************************************************
* regEvent
*		Register an event on any target
*******************************************************************************/
TopTabMenuRenderer.prototype.regEvent = function(targetObject, nodeObject, handlerName, functionCode, nodeEvent)
{
	targetObject[handlerName] = functionCode;
	nodeObject[nodeEvent] = function(e) { targetObject[handlerName](e); };
}

function getElementLeft(Elem) {
	if (false) {
		var elem = getObjNN4(document, Elem);
		return elem.pageX;
	} else {
		var elem;
		if(document.getElementById) {
			var elem = Elem;
		} else if (document.all){
			var elem = Elem;
		}
		xPos = elem.offsetLeft;
		tempEl = elem.offsetParent;
  		while (tempEl != null) {
  			xPos += tempEl.offsetLeft;
	  		tempEl = tempEl.offsetParent;
  		}
		return xPos;
	}
}


TopTabMenuRenderer.prototype._renderLevel = function(subMenu)
{
   var levelNode = createBitbaseNodeElement('DIV');
   levelNode.style.display = "block";
   levelNode.style.whiteSpace = "nowrap";
   levelNode.style.position = "absolute";
   levelNode.style.top = this._currentTopPos + "px";
	levelNode.style.left = "0px";
	levelNode.style.width = "100%";

	for (var i in subMenu._menuItems)
	{
		var node = createBitbaseNodeElement('DIV');

		node.style.position = "relative";
		node.style.display = "inline";

		// Reference to the menuItem
		subMenu._menuItems[i]._node = node;

		var span = createBitbaseNodeElement('SPAN');

		var text = document.createTextNode(subMenu._menuItems[i]._text);
		span.appendChild(text);
		//span.style.position = "absolute";

		subMenu._menuItems[i]._inlineNode = span;

		node.appendChild(span);

      subMenu._menuItems[i]._setCssClassBlockDefault();
		subMenu._menuItems[i]._setCssClassInlineDefault();

		if(subMenu._menuItems[i]._alwaysHidden || subMenu._getLevel() > 0)
		{
			//alert("Hide aly");
			node.style.visibility = "hidden";
		}

		var clickHandler = function(e)
		{
			if (!e) var e = window.event;

			this._getRootMenu()._hideAll();

			if (this._hasSubMenu())
			{
				this._subMenu._opened = true;
				this._getRootMenu()._renderer._currentTopPos = 0;
				this._getRootMenu()._renderer._currentLeftPos = 0;
				this._getRootMenu()._renderer._positionAll(this._getRootMenu());
			}
         if (this._hasSubMenu())
			{
			   window.location = this._windowLocation + '?pageId=' + this._pageId + '&menuId=' + this._subMenu._menuItems[0]._menuId;
			}
			else
			{
			   window.location = this._windowLocation + '?pageId=' + this._pageId + '&menuId=' + this._menuId;
			}
		}

		this.regEvent(subMenu._menuItems[i], node, "onclick", clickHandler, "onclick");

		var mouseOverHandler = function(e)
		{
			if (!e) var e = window.event;

			if (this._isActive)
			{
				this._setCssClassBlockActiveHover();
				this._setCssClassInlineActiveHover();
			}
			else
			{
				this._setCssClassBlockHover();
				this._setCssClassInlineHover();
			}
		}

		this.regEvent(subMenu._menuItems[i], node, "onmouseover", mouseOverHandler, "onmouseover");

		var mouseOutHandler = function(e)
		{
			if (!e) var e = window.event;

			if (this._isActive)
			{
				this._setCssClassBlockActive();
				this._setCssClassInlineActive();
			}
			else
			{
				this._setCssClassBlockDefault();
				this._setCssClassInlineDefault();
			}
		}

		this.regEvent(subMenu._menuItems[i], node, "onmouseout", mouseOutHandler, "onmouseout");

      levelNode.appendChild(node);

      if((parseInt(i)+1) < subMenu._getMenuItemsCount())
      {
         var sepSpan = createBitbaseNodeElement('SPAN');

         var sepText = document.createTextNode(subMenu._menuItems[i]._separator);
		   sepSpan.appendChild(sepText);
		   subMenu._menuItems[i]._sepNode = sepSpan;
		   if(subMenu._menuItems[i]._alwaysHidden || subMenu._getLevel() > 0)
		   {
		      sepSpan.style.visibility = "hidden";
		   }
		   levelNode.appendChild(sepSpan);
      }
	}
	document.getElementById('bitbase_menu').appendChild(levelNode);
}

TopTabMenuRenderer.prototype._positionAll2 = function(menu)
{
	var level = menu._getLevel();

	for (var i = 0; i < menu._getMenuItemsCount(); i++)
	{
		if (level > 0)
		{
			if (menu._opened)
			{
				menu._menuItems[i]._node.style.visibility = "visible";
				if((parseInt(i)+1) < menu._getMenuItemsCount())
				{
               menu._menuItems[i]._sepNode.style.visibility = "visible";
				}

			}
			else
			{
				menu._menuItems[i]._node.style.visibility = "hidden";
				if((parseInt(i)+1) < menu._getMenuItemsCount())
				{
               menu._menuItems[i]._sepNode.style.visibility = "hidden";
				}
			}
		}


		if (menu._menuItems[i]._hasSubMenu())
		{
			this._positionAll(menu._menuItems[i]._subMenu)
		}
	}
}

TopTabMenuRenderer.prototype._positionAll = function(menu)
{
	this._positionAll2(menu);

	if (this.bottom)
	this.bottom.style.top = this._currentTopPos + "px";
}

TopTabMenuRenderer.prototype._setActive = function(menuItem)
{
	menuItem._getRootMenu()._hideAll();

	menuItem.setActive();


	if (menuItem._hasSubMenu())
	{
		menuItem._subMenu._opened = true;
	}

	menuItem._getRootMenu()._renderer._currentTopPos = 0;
	menuItem._getRootMenu()._renderer._currentLeftPos = 0;
	menuItem._getRootMenu()._renderer._positionAll(menuItem._getRootMenu());
}

