/*
	10.09.2008
	DynamicMenu Class v 3.0
	
	11.09.2008
	DynamicMenu Class v 3.1
		Добавлено свойство MaxSubItemWidth. Изменение конструктора.

	Свойства:
		Menu:Object		Элемент меню
		MenuElementId:String	id элемента меню
		Classes:Array		Массив используемых css классов. 
							Допустимые id элементов массива:
								emptyRoot		Пустой корневой элемент
								emptyRootHover
								fullRoot		Корневой элемент имеющий подпункты
								fullRootHover
								empty			Пустой элемент
								emptyHover
								full			Элемент имеющий подпункты
								fullHover
		Position:String		Способ позиционирования элемента меню (Menu). Должно совпадать с CSS свойством элемента меню
							Допустимые значения:
								absolute	абсолютное позиционирование ()
								default		по умолчанию
		_MaxSubItemWidth:Number		Максимальная ширина выпадающего элемента. При привышении этого значения происходит перенос строк
								
	Конструктор: DynamicMenu(_MenuElementId, classes, position)
		_MenuElementId:String	id элемента меню
		classes:Array		Массив используемых css классов. 
							Допустимые id элементов массива:
								emptyRoot		Пустой корневой элемент
								emptyRootHover
								fullRoot		Корневой элемент имеющий подпункты
								fullRootHover
								empty			Пустой элемент
								emptyHover
								full			Элемент имеющий подпункты
								fullHover
		position:String		Способ позиционирования элемента меню (Menu). Должно совпадать с CSS свойством элемента меню
							Допустимые значения:
								absolute	абсолютное позиционирование ()
								default		по умолчанию
		MaxSubItemWidth:Number		Максимальная ширина выпадающего элемента. При привышении этого значения происходит перенос строк
						
	Функции:
		init()	Инициализация элемента меню

*/
function DynamicMenu(_MenuElementId, classes, position, _MaxSubItemWidth)
{
	var Menu;
	var	MenuElementId = _MenuElementId;
	var Classes = classes;
	var Position = position;
	var MaxSubItemWidth = _MaxSubItemWidth;
	init();
	function init()
	{
		var i;
		Menu = document.getElementById(MenuElementId);
		if(Menu == null) return 0;
		Menu.onmouseout = menuMouseOut;
		Menu.onmouseover = subMenuBlockMouseOver;
		Menu.childItems = new Array();
		for(i=0; i<Menu.childNodes.length; i++)
		{
			if(Menu.childNodes[i].tagName == 'DIV')
			{
				Menu.childItems[Menu.childItems.length] = parseRootMenuItem(Menu.childNodes[i]);
			}
		}
	}
	function parseRootMenuItem(obj)
	{
		var i;
		var itemObj;
		var subItemObj = 0;
		for(i=0; i<obj.childNodes.length; i++)
		{
			if(obj.childNodes[i].tagName == 'A')
			{
				itemObj = obj.childNodes[i];
			}
			if((obj.childNodes[i].tagName == 'DIV') && (obj.childNodes[i].className != "HZ"))
			{
				subItemObj = obj.childNodes[i];
			}		
		}
		itemObj.onmouseover = test;
		if(itemObj.parentNode.parentNode.id == MenuElementId)
		{
			if(!subItemObj) 
			{
				itemObj.parentNode.className = Classes["emptyRoot"];
				return itemObj;
			}
			itemObj.parentNode.className = Classes["fullRoot"];
		}
		else
		{
			if(!subItemObj) 
			{
				itemObj.parentNode.className = Classes["empty"];
				return itemObj;
			}
			itemObj.parentNode.className = Classes["full"];
		}
		itemObj.subMenuBlock = subItemObj;
		itemObj.subMenuBlock.onmouseout = subMenuBlockMouseOut;
		itemObj.subMenuBlock.onmouseover = subMenuBlockMouseOver;
		itemObj.subMenuBlock.childItems = parseSubMenuItem(subItemObj);
		return itemObj;
	}
	
	function parseSubMenuItem(obj)
	{
		var i;
		var itemObj;
		var subItemObj;
		var itemsArray = new Array;
		if(obj == null) { return 0 }
		for(i=0; i<obj.childNodes.length; i++)
		{
			if(obj.childNodes[i].tagName == 'DIV')
			{
				itemsArray[itemsArray.length] = parseRootMenuItem(obj.childNodes[i]);
			}
		}
		return itemsArray;
	}
	
	function test()
	{
		closeChildSubItems(this.parentNode.parentNode);
		if(this.subMenuBlock == null) 
		{
			if(this.parentNode.parentNode.id == MenuElementId)
			{
				this.parentNode.className = Classes["emptyRootHover"];
			}
			else
			{
				this.parentNode.className = Classes["emptyHover"];
			}
			return 0; 
		}
		clearTimeout(this.subMenuBlock.int1);
		if(this.parentNode.parentNode.id == MenuElementId)
		{
			this.parentNode.className = Classes["fullRootHover"];
		}
		else
		{
			this.parentNode.className = Classes["fullHover"];
		}
		this.subMenuBlock.style.display = "block";
		this.subMenuBlock.style.borderWidth = "1px";
		this.subMenuBlock.style.whiteSpace = "nowrap";
		//this.subMenuBlock.style.width = 600+"px";
		//alert(this.subMenuBlock.style.width);
		if(this.subMenuBlock.scrollWidth > MaxSubItemWidth)
		{
			//alert(this.subMenuBlock.scrollWidth);
			this.subMenuBlock.style.whiteSpace = "normal";
			this.subMenuBlock.style.width = MaxSubItemWidth+"px";
			//this.subMenuBlock.style.width = 300+"px";
		}
		pos = findPos(this);
		//alert(this.scrollWidth);
		this.subMenuBlock.style.left = this.scrollWidth-1+"px";
		if(this.parentNode.parentNode.id == MenuElementId)
		{
			if(Position == "default")
			{
				this.subMenuBlock.style.top = pos[1]+"px";
				alert(pos[1]);
				this.subMenuBlock.style.left = pos[0]+this.scrollWidth-1+"px";
			}
			else
			{
				this.subMenuBlock.style.top = "-1px";
			}
		}
		else
		{
			xDisp = 0;
			if(this.parentNode.offsetTop == 0)
			{
				xDisp-=1;
			}
			this.subMenuBlock.style.top = this.parentNode.offsetTop+xDisp+"px";
		}
	}
	function subMenuBlockMouseOut()
	{
		var tempThis;
		tempThis = this;
		this.int1 = setTimeout(function() {closeSubItems(tempThis)},300);
	}
	function menuMouseOut()
	{
		var tempThis;
		tempThis = this;
		
		this.int1 = setTimeout(function() {closeSubItemsRoot(tempThis)},300);
	}
	function closeSubItems(obj)
	{
		if(obj == undefined) return 0;
		obj.style.display = "none";
		obj.style.borderWidth = "0px";
		closeChildSubItems(obj);
	}
	function closeSubItemsRoot(obj)
	{
		closeChildSubItems(obj);
	}
	function closeChildSubItems(obj)
	{
		var i;
		for(i=0; i<obj.childItems.length; i++)
		{
			if(obj.childItems[i]!=0)
			{
				if(obj.childItems[i].parentNode.parentNode.id == MenuElementId)
				{
					if(obj.childItems[i].subMenuBlock != undefined)
					{
						obj.childItems[i].parentNode.className = Classes["fullRoot"];
					}
					else
					{
						obj.childItems[i].parentNode.className = Classes["emptyRoot"];
					}
				}
				else
				{
					if(obj.childItems[i].subMenuBlock != undefined)
					{
						obj.childItems[i].parentNode.className = Classes["full"];
					}
					else
					{
						obj.childItems[i].parentNode.className = Classes["empty"];
					}
				}
				closeSubItems(obj.childItems[i].subMenuBlock);
			}
		}
	}
	function subMenuBlockMouseOver()
	{
		clearTimeout(this.int1);
	}
	function findPos(obj) 
	{
			var curleft = curtop = 0;
			if (obj.offsetParent) {
				curleft = obj.offsetLeft
				curtop = obj.offsetTop
				while (obj = obj.offsetParent) {
				curleft += obj.offsetLeft
				curtop += obj.offsetTop
				}
			}
			return [curleft,curtop];
	}
}