
function DropDownMenuObject()
{
	this.TIMER = null;
	this.TIMER_DELAY = 500;
	this.BORDER_TOP = 1;

	// Parse UL/LI list to dropdown menu
	this.load = function(f_id, f_item_height, f_menu_width, f_menu_top, f_menu_left, f_menu_zindex)
	{
		var oWrapper = document.getElementById(f_id);

		if(oWrapper)
		{
			var a = oWrapper.getElementsByTagName('ul');

			if(a.length > 0)
			{
				// Add div.dropdownmenu_main
				var oDIV = document.createElement('div');
				oDIV.className = 'dropdownmenu_main';
				oDIV.style.zIndex = f_menu_zindex;

				oWrapper.appendChild(oDIV);

				this.parse(oDIV, a[0], f_id, f_item_height, f_menu_width, f_menu_top, f_menu_left, f_menu_zindex + 1);

				// Remove childnodes from wrapper
				oWrapper.removeChild(a[0]);
			}
		}
	}

	this.parse = function(f_wrapper, f_ul, f_id, f_item_height, f_menu_width, f_menu_top, f_menu_left, f_menu_zindex)
	{
		// Parse inner LI's
		var iCount = 0;

		for(var i = 0; i < f_ul.childNodes.length; i++)
		{
			if((f_ul.childNodes[i].nodeType == 1) && (f_ul.childNodes[i].tagName.toLowerCase() == 'li'))
			{
				this.fix_li(f_wrapper, f_ul.childNodes[i], 0, iCount, f_item_height, f_menu_width, f_menu_top, f_menu_left, f_menu_zindex, 'dropdownmenu_' + f_id, 'dropdownmenu_' + f_id + '_' + iCount);
				iCount++;
			}
		}
	}

	// Fix LI (force styling & events)
	this.fix_li = function(f_wrapper, f_li, f_layer, f_index, f_item_height, f_menu_width, f_menu_top, f_menu_left, f_menu_zindex, f_root, f_prefix)
	{
		var oDIV = document.createElement('div');
		oDIV.className = 'dropdownmenu_item' + (f_li.className ? ' ' + f_li.className : ''); 

		oDIV.onmouseover = function() { var p = f_prefix; DROPDOWNMENU.show(this, p); }
		oDIV.onmouseout = function() { var p = f_prefix; DROPDOWNMENU.hide(p, true); }


		// Parse inner <a>
		var a = f_li.getElementsByTagName('a');

		if(a.length)
		{
			if(f_layer > 0)
			{
				a[0].style.height = f_item_height + 'px';
				a[0].style.lineHeight = f_item_height + 'px';
			}

			oDIV.appendChild(a[0]);
			f_wrapper.appendChild(oDIV);


			// Parse inner <ul>
			var a = f_li.getElementsByTagName('ul');

			if(a.length)
			{
				this.fix_ul(a[0], f_layer + 1, f_index, f_item_height, f_menu_width, f_menu_top, f_menu_left, f_menu_zindex, f_root, f_prefix);
			}
		}
	}

	// Fix UL (force styling & events)
	this.fix_ul = function(f_ul, f_layer, f_index, f_item_height, f_menu_width, f_menu_top, f_menu_left, f_menu_zindex, f_root, f_prefix)
	{
		var oDIV = document.createElement('div');

		oDIV.id = f_prefix;
		oDIV.className = 'dropdownmenu_layer';
		oDIV.style.width = f_menu_width + 'px';
		oDIV.style.zIndex = f_menu_zindex;

		oDIV.setAttribute('__HIDE', 'false');
		oDIV.setAttribute('__ROOT', f_root);

		if(f_layer > 1)
		{
			oDIV.setAttribute('__TOP', 0 - this.BORDER_TOP);
		}
		else
		{
			oDIV.setAttribute('__TOP', f_menu_top);
		}

		if(f_layer > 1)
		{
			oDIV.setAttribute('__LEFT', f_menu_width - 6);
		}
		else
		{
			oDIV.setAttribute('__LEFT', f_menu_left);
		}

		oDIV.onmouseover = function() { var p = f_prefix; DROPDOWNMENU.show(false, p); }
		oDIV.onmouseout = function() { var p = f_prefix; DROPDOWNMENU.hide(true); }

		// Parse inner <li>'s
		var iCount = 0;

		for(var i = 0; i < f_ul.childNodes.length; i++)
		{
			if((f_ul.childNodes[i].nodeType == 1) && (f_ul.childNodes[i].tagName.toLowerCase() == 'li'))
			{
				this.fix_li(oDIV, f_ul.childNodes[i], f_layer, iCount, f_item_height, f_menu_width, f_menu_top, f_menu_left, f_menu_zindex + 1, f_root, f_prefix + '_' + iCount);
				iCount++;
			}
		}

		document.body.appendChild(oDIV);
	}

	this.show = function(f_element, f_name)
	{
		this.resetTimer();

		var a = document.getElementsByTagName('div');

		for(var i = 0; i < a.length; i++)
		{
			if(a[i].className == 'dropdownmenu_layer')
			{
				if(f_name == a[i].id) // Self
				{
					if(f_element)
					{
						a[i].style.left = (DROPDOWNMENU.getOffsetLeft(f_element) + parseInt(a[i].getAttribute('__LEFT'))) + 'px'; 
						a[i].style.top = (DROPDOWNMENU.getOffsetTop(f_element) + parseInt(a[i].getAttribute('__TOP'))) + 'px';
					}

					a[i].setAttribute('__HIDE', 'false');
					a[i].style.display = 'block';
				}
				else if(a[i].id + '_' == f_name.substr(0, a[i].id.length + 1)) // Ancestor
				{
					a[i].setAttribute('__HIDE', 'false');
					a[i].style.display = 'block';
				}
			}
		}

		// Hide all other submenu's without any delay
		this.hide(false);
	}

	this.hide = function(f_delay)
	{
		this.resetTimer();

		if(f_delay) // Close all menu's with delay
		{
			var a = document.getElementsByTagName('div');

			for(var i = 0; i < a.length; i++)
			{
				if(a[i].className == 'dropdownmenu_layer')
				{
					a[i].setAttribute('__HIDE', 'true');
				}
			}

			DROPDOWNMENU.TIMER = setTimeout('DROPDOWNMENU.hide()', DROPDOWNMENU.TIMER_DELAY);
		}
		else // Hide ALL dropdownmenu_layer
		{
			var a = document.getElementsByTagName('div');

			for(var i = 0; i < a.length; i++)
			{
				if(a[i].className == 'dropdownmenu_layer')
				{
					if(a[i].getAttribute('__HIDE') == 'true')
					{
						a[i].setAttribute('__HIDE', 'false');
						a[i].style.display = 'none';
					}
				}
			}
		}
	}

	this.resetTimer = function()
	{
		if(DROPDOWNMENU.TIMER)
		{
			clearTimeout(DROPDOWNMENU.TIMER);
		}
	}

	// UTIL's
	this.getOffsetLeft = function(f_object)
	{
		var left = 0;

		do
		{
			left += f_object.offsetLeft;
		} 
		while(f_object = f_object.offsetParent);

		return left;
	}

	this.getOffsetTop = function(f_object)
	{
		var top = 0;

		do
		{
			top += f_object.offsetTop;
		} 
		while(f_object = f_object.offsetParent);

		return top;
	}
}

var DROPDOWNMENU = new DropDownMenuObject();