Element.extend(
{
	menuHide: function(objChild) 
	{
		this.removeClass('menuHover');
		if (objChild != null) {
			$(objChild).removeClass('fadein');
			$(objChild).addClass('fadeout');
			$(objChild).addClass('menuHide');
			return $(objChild).removeClass('menuShow');
		}
		
		return true;
	},
	
	menuShow: function(objChild) 
	{
		this.addClass('menuHover');
		if (objChild != null) {
			$(objChild).removeClass('fadeout');
			$(objChild).addClass('fadein');
			if (g_menuSetPosition) {
				$(objChild).setStyle('position', 'absolute');
				setMenuPos(objChild.parentNode, objChild);
			}
			$(objChild).removeClass('menuHide');
			return $(objChild).addClass('menuShow');
		}
		
		return true;
	}
	
});


function linkClick(event)
{
	var item = this.getElement('a');
	var obj = this;
	while (obj) {
		$(obj).removeEvent('click', linkClick);
		obj = obj.parentNode;
	}
	if (item.click) {
		item.click();
	} else {
		location.href = item.href;
	}
	event.stopPropagation();
	return false;
}

/*	
Script: moo.table-dropdownmenu.js
	Fx.DropdownMenu.
		
Dependencies:
	<Moo.js>, <Function.js>, <Array.js>, <String.js>, <Element.js>

Author:
	André Fiedler, <http://visualdrugs.net>

License:
	MIT-style license.

Class: Fx.PopMenu
	The DropdownMenu function creates a group of elements that have the behaviour of an dropdown menu.
	
Arguments:
	element - a table element the effect will be applied to.
	
Example:
	(start code)
	<table id="dropdownMenu">
		<tr>
			<td><a href="#">Menu 1</a>
			<table>
				<tr><td><a href="#">SubMenu 1</a></td></tr>
				<tr><td><a href="#">SubMenu 2</a></td></tr>
				<tr><td><a href="#">SubMenu 3</a></td></tr>
			</table>
		</td></tr>
		<tr><td><a href="#">Menu 2</a></td></tr>
		<tr><td><a href="#">Menu 3</a></td></tr>
	</table>
	
	<script type="text/javascript">
	
		Window.onDomReady(function() {new DropdownMenu($('dropdownMenu'))});
		
	</script>
	(end)
*/

var g_menuSetPosition = false;

var DropdownTableMenu = new Class({	
	initialize: function(element, fMain)
	{
		if (!element) {
			return;
		}
		
		var elPar = element.parentNode;
		
		if (fMain === undefined) {
			fMain = true;
		}
		
		if (fMain && $(elPar).getStyle('position') != 'absolute') {
			g_menuSetPosition = true;
		}

		var elRoot = $(element).getFirst();
		
		while (elRoot && elRoot.nodeName.toLowerCase() != 'tbody') {
			elRoot = elRoot.getNext();
		}
		
		if (!elRoot) {
			return;
		}
		
		if ($(elRoot).childNodes.length == 1) {
			//One row with a bunch of cells
			elRoot = elRoot.firstChild;
		}
		
		$A($(elRoot).childNodes).each(function(el)
		{
			if (el.nodeName.toLowerCase() == 'tr') {
				el = el.firstChild;
			}
			
			if(el.nodeName.toLowerCase() == 'td'
				&& !$(el).hasClass('menuSpacer')
				&& !$(el).hasClass('menuDivLine')
				)
			{
				// Loop through the child nodes
				var childMenu = null;
				$A($(el).childNodes).each(function(el2)
				{
					if(el2.nodeName.toLowerCase() == 'table')
					{
						childMenu = el2;
					}
				});

				if (!fMain && childMenu == null) {
//					return;
				}
				
				// Now handle the child menu issues
					
				$(el).menuHide(childMenu);
				
				el.addEvent('mouseenter', function()
				{
					el.menuShow(childMenu);
					//return false;
				});

				el.addEvent('mouseleave', function()
				{
					el.menuHide(childMenu);
				});

					
				
				el.addEvent('click', linkClick);
							
				el3 = el.getElement('a');
				if (el3) {
					el3.addEvent('focus', function()
					{
						el.menuShow(childMenu);
						return false;
					});
					el3.addEvent('blur', function()
					{
						el.menuHide(childMenu);
					});
				}
				if (childMenu != null) {
					new DropdownTableMenu(childMenu, false);
				}
			
			}
		});
		return this;
	}
});


function setMenuPos(objParent, objMenu)
{

    objSize = $(objParent).getCoordinates();
    
    posy = objSize.top + objSize.height;
    posx = objSize.left;
    
	$(objMenu).setStyle('top', posy);
	$(objMenu).setStyle('left', posx);

}
