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


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

		if(oElement)
		{
			if(oElement.tagName != 'ul') // ELEMENT is wrapper of UL.DROPDOWNMENU
			{
				var a = oElement.getElementsByTagName('ul');

				if(a.length > 0)
				{
					oElement = a[0]
				}
			}

			oElement.className = (oElement.className ? oElement.className + ' ' : '') + 'dropdownmenu';
			this.fix_ul(oElement, 0, 0, f_id, f_item_width, f_item_height, f_menu_width, f_menu_top);
		}
	}


	// Fix UL (force styling & events)
	this.fix_ul = function(f_ul, f_layer, f_index, f_id, f_item_width, f_item_height, f_menu_width, f_menu_top)
	{
		if(f_layer > 1)
		{
			f_ul.style.display = 'none';
			f_ul.style.position = 'absolute';
			f_ul.style.left = (f_menu_width - 5) + 'px';
			f_ul.style.width = f_menu_width + 'px';

			if(f_layer > 2)
			{
				f_ul.style.top = ((f_index * f_item_height) - this.BORDER_TOP) + 'px';
			}
			else
			{
				f_ul.style.top = (f_index * f_item_height) + 'px';
			}
		}
		else if(f_layer > 0)
		{
			// Fix <a> in submenu's
			aA = f_ul.getElementsByTagName('a');

			for(var i = 0; i < aA.length; i++)
			{
				aA[i].display = 'block';
				aA[i].style.height = f_item_height + 'px';
				aA[i].style.lineHeight = f_item_height + 'px';
				aA[i].style.width = f_item_width + 'px';
				try { aA[i].style.float = 'left'; } catch(e1) { }
				try { aA[i].style.cssFloat = 'left'; } catch(e1) { }
				try { aA[i].style.styleFloat = 'left'; } catch(e1) { }
			}

			var oLI = f_ul.parentNode;
			oUL = oLI.removeChild(f_ul);

			var oDIV = document.createElement('div');

			oDIV.id = 'dropdownmenu_' + f_id + '_' + f_layer + '_' + f_index;
			oDIV.className = 'dropdownmenu';

			oDIV.style.display = 'none';
			oDIV.style.left = '0px';
			oDIV.style.position = 'absolute';
			oDIV.style.top = '0px';
			oDIV.style.width = f_menu_width + 'px';

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

			oDIV.onmouseover = function() { this.setAttribute('__HIDE', 'false'); }
			oDIV.onmouseout = function() { this.setAttribute('__HIDE', 'true'); if(DROPDOWNMENU.TIMER) { clearTimeout(DROPDOWNMENU.TIMER); } DROPDOWNMENU.TIMER = setTimeout('DROPDOWNMENU.hide()', DROPDOWNMENU.TIMER_DELAY); }

			oDIV.appendChild(oUL);
			document.body.appendChild(oDIV);
		}

		// 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_ul.childNodes[i], f_layer, iCount, f_id, f_item_width, f_item_height, f_menu_width, f_menu_top);
				iCount++;
			}
		}
	}

	// Fix LI (force styling & events)
	this.fix_li = function(f_li, f_layer, f_index, f_id, f_item_width, f_item_height, f_menu_width, f_menu_top)
	{
		var iCount = 0;

		f_li.style.display = 'block';

		if(f_layer > 0)
		{
			f_li.style.height = f_item_height + 'px';
			f_li.style.lineHeight = f_item_height + 'px';
			f_li.style.width = f_item_width + 'px';
		}
		else
		{
			try { f_li.style.float = 'left'; } catch(e1) { }
			try { f_li.style.cssFloat = 'left'; } catch(e1) { }
			try { f_li.style.styleFloat = 'left'; } catch(e1) { }

			f_li.setAttribute('__ID', 'dropdownmenu_' + f_id + '_1_' + f_index);
			f_li.setAttribute('__TOP', f_menu_top);
		}

		f_li.onmouseover = function() { DROPDOWNMENU.show(this); }
		f_li.onmouseout = function() { DROPDOWNMENU.hide(this, true); }

		// Parse inner UL
		for(var i = 0; i < f_li.childNodes.length; i++)
		{
			if((f_li.childNodes[i].nodeType == 1) && (f_li.childNodes[i].tagName.toLowerCase() == 'ul'))
			{
				this.fix_ul(f_li.childNodes[i], f_layer + 1, f_index, f_id, f_item_width, f_item_height, f_menu_width, f_menu_top);
				break;
			}
		}
	}

	this.show = function(f_li)
	{
		var f_id = f_li.getAttribute('__ID');

		if(f_id) // Show DIV
		{
			var oDIV = document.getElementById(f_id);

			if(oDIV)
			{
				// alert('ID: ' + f_id + ', TOP: ' + DROPDOWNMENU.getOffsetTop(f_li) + ', __TOP: ' + f_li.getAttribute('__TOP') + ', LEFT: ' + DROPDOWNMENU.getOffsetLeft(f_li));
				oDIV.style.left = DROPDOWNMENU.getOffsetLeft(f_li) + 'px'; 
				oDIV.style.top = (DROPDOWNMENU.getOffsetTop(f_li) + parseInt(f_li.getAttribute('__TOP'))) + 'px';

				oDIV.style.display = 'block';
				oDIV.setAttribute('__HIDE', 'false');
			}

			// Close other DIV's
			this.hide();
		}
		else // Show inner UL
		{
			for(var i = 0; i < f_li.childNodes.length; i++)
			{
				if((f_li.childNodes[i].nodeType == 1) && (f_li.childNodes[i].tagName.toLowerCase() == 'ul'))
				{
					f_li.childNodes[i].style.display = 'block';
					break;
				}
			}
		}
	}

	this.hide = function(f_li, f_first_call)
	{
		if(f_first_call == true)
		{
			var f_id = f_li.getAttribute('__ID');

			if(f_id)
			{
				var oDIV = document.getElementById(f_id);

				if(oDIV)
				{
					oDIV.setAttribute('__HIDE', 'true');

					if(DROPDOWNMENU.TIMER)
					{
						clearTimeout(DROPDOWNMENU.TIMER);
					}

					DROPDOWNMENU.TIMER = setTimeout('DROPDOWNMENU.hide()', DROPDOWNMENU.TIMER_DELAY);
				}
			}
			else // Hide UL
			{
				for(var i = 0; i < f_li.childNodes.length; i++)
				{
					if((f_li.childNodes[i].nodeType == 1) && (f_li.childNodes[i].tagName.toLowerCase() == 'ul'))
					{
						f_li.childNodes[i].style.display = 'none';
					}
				}
			}
		}
		else
		{
			if(DROPDOWNMENU.TIMER)
			{
				clearTimeout(DROPDOWNMENU.TIMER);
			}
		
			if(f_li && (f_li.tagName.toLowerCase() == 'div') && (f_li.className == 'dropdownmenu'))
			{
				f_li.setAttribute('__HIDE', 'true');
				DROPDOWNMENU.TIMER = setTimeout('DROPDOWNMENU.hide()', DROPDOWNMENU.TIMER_DELAY);
			}
			else
			{
				var aDIV = document.getElementsByTagName('div');

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


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