
var kShowDuration = 0.25;
var kHideDuration = 0.1;
var kHideDelay = 0.25;

function ShowMenu(item)
{
	if (!Element.visible(item))
	{
		new Effect.BlindDown( $(item),
		{
			duration: kShowDuration,
			queue: { position: 'end', scope: item.id, limit: 2}
		});
	}
}

function HideMenu(item)
{
	new Effect.BlindUp( $(item),
	{
		duration: kHideDuration,
		queue: { position: 'end', scope: item.id, limit: 2}
	});
}


function SetDelayedHide(id)
{
	$(id).addClassName('waitingtohide')
	
	if(!$(id).hasClassName('hiding'))
	{
		if (!$(id).hasClassName('hidingtimerset'))
		{	
			$(id).addClassName('hidingtimerset');
			setTimeout("DelayedHide('" + id + "')", kHideDelay * 1000);
		}
	}
}

function DelayedHide(id)
{
	var dropElement = $(id);
	dropElement.removeClassName('hidingtimerset');
	if ($(dropElement).hasClassName('waitingtohide'))
	{
		HideMenu(dropElement);
		$(dropElement).addClassName('hiding');
		setTimeout("FinishedHiding('" + id + "')", kHideDuration * 1000);
	}
}

function FinishedHiding(id)
{
	var dropElement = $(id);
	dropElement.removeClassName('waitingtohide');
	dropElement.removeClassName('hiding');
	dropElement.removeClassName('active');
}


function LinkMouseOut(id)
{
	var currentElement = Event.element(id).id;
	var currentElement = $(currentElement);
	var dropElement = currentElement.next().next();
			
	if ($(dropElement).hasClassName('active'))
	{
		SetDelayedHide($(dropElement).id);
	}
}


function LinkMouseOver(id)
{
	var currentElement = Event.element(id).id;
	var currentElement = $(currentElement);
	var dropElement = currentElement.next().next();	
	
	if (!$(dropElement).hasClassName('hiding'))
	{
		dropElement.removeClassName('waitingtohide');
	}
	
	if (!$(dropElement).hasClassName('active'))
	{
		dropElement.addClassName('active');
		ShowMenu(dropElement);
	}
}

function SubmenuMouseOut(id)
{
	var currentElement = Event.findElement(id, 'div');
	var currentElement = $(currentElement);
	var dropElement = currentElement;
		
	if ($(dropElement).hasClassName('active'))
	{
		SetDelayedHide($(dropElement).id);
	}
}

function SubmenuMouseOver(id)
{
	var currentElement = Event.findElement(id, 'div');
	var currentElement = $(currentElement);
	var dropElement = currentElement;
	
	if (!$(dropElement).hasClassName('hiding'))
	{
		dropElement.removeClassName('waitingtohide');
	}
}


function MouseOverHighlight(event)
{
	var element = Event.element(event).up('tr');
	if (!$(element).hasClassName('highlight'))
		element.addClassName('highlight');
}


function MouseOutHighlight(event)
{
	var element = Event.element(event).up('tr');
	element.removeClassName('highlight');
}


document.observe('dom:loaded',
	function()
	{
		var dropDowns = $$('a.drop_down_link');	
		dropDowns.each(function(name) {
			name.observe('mousemove', LinkMouseOver.bindAsEventListener(this));
			name.observe('mouseout', LinkMouseOut.bindAsEventListener(this));
		})
		
		var dropDowns = $$('div.submenu');
		dropDowns.each(function(name){
			name.observe('mousemove', SubmenuMouseOver.bindAsEventListener(this));
			name.observe('mouseout', SubmenuMouseOut.bindAsEventListener(this));
		})
		
		var dropDowns = $$('tr.mouseover_highlight');	
		dropDowns.each(function(name) {
			name.observe('mousemove', MouseOverHighlight.bindAsEventListener(this));
			name.observe('mouseout', MouseOutHighlight.bindAsEventListener(this));
		})
	}
)
