PbLib.pbHoverMenu = function (rootUl, parentId)
{
	var self = this;

	// Attach events
	for (var i = 0; i < rootUl.childNodes.length; i++) {
		var item = rootUl.childNodes[i];

		if (item.tagName) {
			if (item.tagName.toLowerCase() == 'li') {
				var itemId = 'menuHover' + (PbLib.pbHoverMenu.prototype.itemId++);
				PbLib.pbHoverMenu.prototype.items[itemId] = item;

				item.hoverItemId = itemId;
				if (parentId) {
					item.menuParent = parentId;
				} else {
					item.menuParent = null;
				}

				PbLib.pbHoverMenu.prototype.attachEvents(itemId);

				// Search for ul in this li
				var subUl = item.firstChild;
				while (subUl) {
					if (subUl.tagName) {
						if (subUl.tagName.toLowerCase() == 'ul') {
							new PbLib.pbHoverMenu(subUl, itemId);
							break;
						}
					}
					subUl = subUl.nextSibling;
				}
			}
		}
	}
};
PbLib.pbHoverMenu.prototype.attachEvents = function (itemId)
{

	Event.observe(PbLib.pbHoverMenu.prototype.items[itemId], 'mouseover', function()
		{
			PbLib.pbHoverMenu.prototype.hoverStart(itemId, true);
		});
	Event.observe(PbLib.pbHoverMenu.prototype.items[itemId], 'mouseout', function()
		{
			PbLib.pbHoverMenu.prototype.hoverStop(itemId, true);
		});
}
PbLib.pbHoverMenu.prototype.currentOpen = null;
PbLib.pbHoverMenu.prototype.itemId = 1;
PbLib.pbHoverMenu.prototype.items = {};
PbLib.pbHoverMenu.prototype.hoverStart = function (itemId, init)
{
	var elem = PbLib.pbHoverMenu.prototype.items[itemId];

	if (init) {
		if (elem.stoppedHover) {
			clearTimeout(elem.stoppedHover);
			elem.stoppedHover = null;
		} else if (!elem.startedHover) {
			elem.startedHover = setTimeout("PbLib.pbHoverMenu.prototype.hoverStart('" + itemId + "', false);", 0);
		}
		return true;
	}

	PbLib.pbHoverMenu.prototype.currentOpen = itemId;
	elem.startedHover = null;

	if (!elem.menuOriginalClass) {
		elem.menuOriginalClass = '' + elem.className.replace(/(^|\s)onhover(\s|$)/g, ' ');
	}
	if (!elem.menuHoverClass) {
		elem.menuHoverClass = elem.menuOriginalClass + ' Hover ' + elem.menuOriginalClass.replace(/(\S+)/g, '$1Hover');
	}

	elem.className = elem.menuHoverClass;
}
PbLib.pbHoverMenu.prototype.hoverStop = function (itemId, init)
{
	var elem = PbLib.pbHoverMenu.prototype.items[itemId];

	if (init) {
		if (elem.startedHover) {
			clearTimeout(elem.startedHover);
			elem.startedHover = null;
		} else if (!elem.stoppedHover) {
			elem.stoppedHover = setTimeout("PbLib.pbHoverMenu.prototype.hoverStop('" + itemId + "', false);", 50);
		}
		return true;
	}

	elem.stoppedHover = null;

	if (elem.menuOriginalClass) {
		elem.className = elem.menuOriginalClass;
	}

	if (PbLib.pbHoverMenu.prototype.currentOpen == itemId) {
		PbLib.pbHoverMenu.prototype.currentOpen = null;
	}
}
PbLib.createHoverMenu = function (elemId)
{
	var menu = document.getElementById(elemId);

	if (!menu) {
		return false;
	}

	// Remove noJsMenu from the main container
	menu.className = menu.className.replace(/(^noJsMenu$|\snoJsMenu|noJsMenu\s)/, '');

	// Is main container main UL?
	var mainUl = menu;
	if (mainUl.tagName.toLowerCase() != 'ul') {
		// Nope, look inside!
		mainUl = mainUl.firstChild;
		while (mainUl) {
			if (mainUl.tagName) {
				if (mainUl.tagName.toLowerCase() == 'ul') {
					//jeuj
					break;
				}
			}

			if (mainUl.nextSibling) {
				mainUl = mainUl.nextSibling;
			} else {
				return false;
			}
		}
	}

	if (!mainUl) {
		return false;
	}

	// Create HoverMenu
	new PbLib.pbHoverMenu(mainUl);
}
PbLib.module.setLoaded('hovermenu');