$(function()
{
	$('.dropdownItemTrigger').each(function()
	{
		// Make the drop down cart appear/disappear.
		var selector = $(this).attr('href');
		
		// Set natural height and other properties of hidable object.
		$(selector).data('naturalHeight', $(selector).height());
		$(selector).addClass('hidden');
		$(selector).css(
		{
			display: 'none', 
			bottom: 'auto'
		});
		
		// Create back reference.
		$(selector).data('trigger', $(this));
	});
	
	$('.dropdownItemTrigger').live('click', function(e)
	{
		e.preventDefault();
		
		var $trigger = $(this);
		
		// Don't do anything if the drop down item is already animating.
		if($trigger.hasClass('disabled')) return false;
		
		// Find direction.
		var direction = $trigger.hasClass('maximise') ? 1 : -1;
		
		// Make the drop down cart appear/disappear.
		var selector = $trigger.attr('href');
		
		$(selector).trigger('dropdowntoggle', [direction]);
	});
	
	$('.dropdownItem').live('dropdowntoggle', function(e, direction)
	{
		var $dropdownItem = $(this);
		var $trigger      = $dropdownItem.data('trigger');
		var $triggers     = $('.dropdownItemTrigger[href=\\' + $trigger.attr('href') + ']');
		
		// Ensure direction.
		if(isNaN(direction)) direction = $dropdownItem.hasClass('shown') ? -1 : 1;
		
		// Disable trigger.
		$triggers.addClass('disabled');
		
		// Set states.
		$triggers.toggleClass('maximise');
		$triggers.toggleClass('minimise');
		
		$dropdownItem.toggleClass('hidden', direction == -1);
		$dropdownItem.toggleClass('shown', direction == 1);
		
		// Calculate new position.
		//var currPosition = $dropdownItem.css('top').replace(/([a-z]+)/, '') * 1
		var currPosition = direction == 1 ? $dropdownItem.height() * -1 : 0;
		var displacement = $dropdownItem.height();//$dropdownItem.data('naturalHeight');
		
		var newPosition = currPosition + displacement * direction;
		
		// Toggle drop down item.
		$dropdownItem.css(
		{
			display: 'block', 
			top: currPosition
		}).animate(
		{
			top: newPosition
		}, 400, function()
		{
			$triggers.removeClass('disabled');
		});
	});
});
