var isMouseOverContainer = function(event, container)
{
	return event.element().descendantOf($(container)) || event.element() == $(container);
}

var setSelectTabState = function(objTrigger, objTab, state, config)
{
	
	if (state == true)
	{
		$(objTrigger).setStyle(config.triggerSelected);							
		$(objTab).show();
		if ($(objTab).getWidth() < $(objTrigger).getWidth())
		{
			$(objTab).setStyle({
				width: 	$(objTrigger).getWidth() + "px"
			});
		} 
	}
	else
	{
		$(objTrigger).setStyle(config.triggerUnselected)					
		$(objTab).hide();
	}
	
}
			

var bindTabMenuAction = function(objTrigger, objTab, config){
	var triggerPos = $(objTrigger).cumulativeOffset();
					
			
	$(objTab).setStyle({
		top: (triggerPos[1] + $(objTrigger).getHeight()) + "px",
		left: triggerPos[0] + "px"	
	});	
	
	$(objTrigger).observe("click", function(event){									
		setSelectTabState(objTrigger, objTab, !$(objTab).visible(), config);					
		event.stop();
	});
	
	Event.observe(document, "mousemove", function(event){		
		if ($(objTab).visible())
		{ 			
			var dx = 0;
			var dy = 0;
			
			if (isMouseOverContainer(event, objTab))					
			{
				var dx = 0;
				var dy = 0;
			}
			else
			{
				var off = $(objTab).cumulativeOffset();
				var x1 = off[0];
				var y1 = off[1];
				var x2 = event.pointerX();
				var y2 = event.pointerY();					
				if (x2 > x1)
				{
					x1 += $(objTab).getWidth();
				}
				
				if (y2 > y1)
				{
					y1 += $(objTab).getHeight();
				}
				
				var dx = Math.abs((x2-x1));
				var dy = Math.abs((y2-y1));												
			}

			if (dx > 150 || dy > 150)
			{
				setSelectTabState(objTrigger, objTab, false, config);							
			}	 
		}
		event.stop();	
	});	
	
		/* kliknięcie poza rozwiniętym oknem */
	Event.observe(document, "click", function(event){
		if (!isMouseOverContainer(event, objTab))
		{
			setSelectTabState(objTrigger, objTab, false, config);						
		}
		
	});		
}


createVerticalMenu = function(menuItems, config)
{
	menuItems.each(function(item, index)
	{	
		$(item.trigger).observe('click', function(event)
		{			
			menuItems.each(function(i)
			{
				if (i.tab != item.tab)
				{
					setSelectTabState($(i.trigger), $(i.tab), false, config);								
				}								
			});
			event.stop();
		});
		
		bindTabMenuAction(item.trigger, item.tab, config);
	});
}