/*******************************************************************************
*
*	TopMenuWithLeftCollapseMenuRenderer.js
*
*******************************************************************************/

function TopMenuWithLeftCollapseMenuRenderer(menu)
{
	this._currentTopPos = 0;
	this._currentLeftPos = 0;

	if (arguments.length != 1)
	{
		//throw new Error("Usage: TableMenuRenderer(menuObject)");
	}
	else
	{
		//document.writeln('<div id="bitbase_menu_first_level" style="background-color:green; width:100%; Height:40px; position:relative; left:300px; top:100px;"></div>');
//		document.writeln('<div id="bitbase_menu" style="background-color:green; position:absolute; left:0px; top:200px;"></div>');
		//
		this._processMenu(menu);
	}

	menu._renderer = this;


	this._renderFooter();
	//alert(menu);
	//this._positionAll(menu);
}

TopMenuWithLeftCollapseMenuRenderer.prototype._processMenu = function(menu)
{
	switch (menu._getLevel())
	{
		case 0:
			menu._opened = true;
			this._renderFirstLevel(menu);
			break;
		case 1:
			menu._opened = false;
			this._renderSecondLevel(menu);
			break;
		default:
			menu._opened = false;
			this._renderDefaultLevel(menu);
			break;
	}

	//


	for (var i = 0; i < menu._getMenuItemsCount(); i++)
	{
		//alert("SECOND+ LEVEL");
		if (menu._menuItems[i]._hasSubMenu())
		{
			this._processMenu(menu._menuItems[i]._subMenu)
		}
	}
}


/*******************************************************************************
* regEvent
*		Register an event on any target
*******************************************************************************/
TopMenuWithLeftCollapseMenuRenderer.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;
	}
}


TopMenuWithLeftCollapseMenuRenderer.prototype._renderFirstLevel = function(subMenu)
{
	for (var i in subMenu._menuItems)
	{
		var node = createBitbaseNodeElement('DIV');

		node.style.position = "absolute";

		// Reference to the menuItem
		subMenu._menuItems[i]._node = node;

		var span = createBitbaseNodeElement('SPAN');

		//Caution: if you use pics as menuItems use line 111 instead of 110
		var text = document.createTextNode(subMenu._menuItems[i]._text);
		//var text = document.createTextNode('');

		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)
		{
			//alert("Hide aly");
			node.style.visibility = "hidden";
		}

		var clickHandler = function(e)
		{
			if (!e) var e = window.event;

			//alert(this._getRootMenu());
			this._getRootMenu()._hideAll();

			//this.setActive();

			if (this._hasSubMenu())
			{
				this._subMenu._opened = true;
				this._getRootMenu()._renderer._currentTopPos = 0;
				this._getRootMenu()._renderer._positionAll(this._getRootMenu());
			}

			//alert("about to open menuId " + this._menuId + " and pageId " + this._pageId);
			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;

			//alert("out");

			if (this._isActive)
			{
				this._setCssClassBlockActive();
				this._setCssClassInlineActive();
			}
			else
			{
				this._setCssClassBlockDefault();
				this._setCssClassInlineDefault();
			}
		}

		this.regEvent(subMenu._menuItems[i], node, "onmouseout", mouseOutHandler, "onmouseout");


		var firstLevel = document.getElementById('bitbase_menu_first_level');
		if (firstLevel)
		{
		  firstLevel.appendChild(node);
	  }

		// Positioning
		node.style.top = 0 + "px";
		node.style.left = this._currentLeftPos + "px";

		// Extraposition is special and must be defined
		this._currentLeftPos += node.offsetWidth;
		this._currentLeftPos -= subMenu._menuItems[i]._extraPosition;
	}
}

TopMenuWithLeftCollapseMenuRenderer.prototype._renderSecondLevel = function(subMenu)
{
	for (var i in subMenu._menuItems)
	{
		var node = createBitbaseNodeElement('DIV');

		node.style.position = "absolute";
		node.style.top = this._currentTopPos + "px";

		// 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();


		var clickHandler = function(e)
		{
			if (!e) var e = window.event;

			//alert(this);

			this._getRootMenu()._hideAll();
      this.setActive();

			if (this._hasSubMenu())
			{
				this._subMenu._opened = true;
				this._getRootMenu()._renderer._currentTopPos = 0;
				this._getRootMenu()._renderer._positionAll(this._getRootMenu());
			}

			//this.setActive();

			var args = '';


			if (this._productCategoryId)
			{
				//alert(this._productCategoryId);
				args = '&pciId=' + this._productCategoryId;
			}
			//var uri = 'http://www.bitbase.local/geros-flohmarkt.de/main.php?pageId=' + this._pageId + '&menuId=' + this._menuId + args;
			//alert(uri);

			window.location = this._windowLocation + '?pageId=' + this._pageId + '&menuId=' + this._menuId + args;
		}

		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;

			//alert("out");

			if (this._isActive)
			{
				this._setCssClassBlockActive();
				this._setCssClassInlineActive();
			}
			else
			{
				this._setCssClassBlockDefault();
				this._setCssClassInlineDefault();
			}
		}

		this.regEvent(subMenu._menuItems[i], node, "onmouseout", mouseOutHandler, "onmouseout");

		if (document.getElementById('bitbase_menu'))
		{
			document.getElementById('bitbase_menu').appendChild(node);
		}
	}
}

TopMenuWithLeftCollapseMenuRenderer.prototype._renderDefaultLevel = function(subMenu)
{
	this._renderSecondLevel(subMenu);
}



TopMenuWithLeftCollapseMenuRenderer.prototype._positionAll2 = function(menu)
{
	var level = menu._getLevel();

	for (var i = 0; i < menu._getMenuItemsCount(); i++)
	{
		if (level > 0)
		{
			if (menu._opened)
			{
				//alert("make visible: " + menu._menuItems[i]);
				menu._menuItems[i]._node.style.visibility = "visible";
				menu._menuItems[i]._node.style.top = this._currentTopPos + "px";
				this._currentTopPos += menu._menuItems[i]._getHeight();
			}
			else
			{
				menu._menuItems[i]._node.style.visibility = "hidden";
			}
		}


		if (menu._menuItems[i]._hasSubMenu())
		{
			this._positionAll(menu._menuItems[i]._subMenu)
		}
	}
}

TopMenuWithLeftCollapseMenuRenderer.prototype._positionAll = function(menu)
{
	this._positionAll2(menu);

	if (this.bottom)
	this.bottom.style.top = this._currentTopPos + "px";
}

TopMenuWithLeftCollapseMenuRenderer.prototype._setActive = function(menuItem)
{
	//alert("setActive " + menuItem);

	menuItem._getRootMenu()._hideAll();

	menuItem.setActive();


	if (menuItem._hasSubMenu())
	{
		menuItem._subMenu._opened = true;
	}

		menuItem._getRootMenu()._renderer._currentTopPos = 0;
		menuItem._getRootMenu()._renderer._positionAll(menuItem._getRootMenu());
}


TopMenuWithLeftCollapseMenuRenderer.prototype._renderFooter = function()
{
	//alert(123);

	var node = createBitbaseNodeElement('DIV');
	node.style.position = "absolute";
	node.style.top = this._currentTopPos + "px";

	node.style.height = "10px";
	node.style.width  = "180px";
	node.className = "bottom";

	this.bottom = node;

	elem = document.getElementById('bitbase_menu');
	if (elem)
	{
	  elem.appendChild(node);
	}
	//document.getElementById('bitbase_menu').appendChild(node);

	//alert("stop");
}
