$(function()
{
	// Toggle drop down menus when trigger is clicked.
	$('.dropdownHolder .dropdownTrigger').click(function(e)
	{
		$(this).parents('.dropdownHolder').trigger('toggle', [e, $(this)]);
	});
	
	// Close all dropdown menus when clicking outside of them.
	$('body').click(function(e)
	{
	//	var $target = $(e.target);
	//	if($target.parents('.dropdownItem.active').size() == 0 && !$target.hasClass('dropdownTrigger'))
	//		$('.dropdownHolder').trigger('close');
	});
	
	// Custom Events: toggle, close, open.
	$('.dropdownHolder').bind('toggle', function(e, oe, trigger, options)
	{
		if(oe) oe.preventDefault();
		
		$this              = $(trigger);
		$dropdownHolder    = $(this);
		$dropdownHolderSet = $dropdownHolder.parents('.dropdownHolderSet');
		
		// Get the state of what the drop down item is now meant to be in.
		var toggleMode = !$this.hasClass('active');
		
		// Close all active dropdowns in the current set.
		$dropdownHolderSet.find('.dropdownHolder').not($dropdownHolder).trigger('close');
		
		// Toggle current triggered dropdown item.
		//$('.dropdownItem, .dropdownTrigger', $dropdownHolder).add($dropdownHolder).toggleClass('active', toggleMode);
		$dropdownHolder.trigger(toggleMode ? 'open' : 'close', [oe, trigger, options]);
	});
	
	$('.dropdownHolder').bind('close', function(e, oe, trigger, options)
	{
		if(oe) oe.preventDefault();
		
		// Close all active dropdowns in the current set.
		//$(this).find('.dropdownItem, .dropdownTrigger').add(this).removeClass('active');
		
		// Animate out if animation items are found.
		if($(this).find('.animateIn').length)
		{
			$(this).find('.animateIn').animate({opacity: 0}, 150, function()
			{
				var $dropdownHolder = $(this).parents('.dropdownHolder');
				$dropdownHolder.find('.dropdownItem, .dropdownTrigger').add($dropdownHolder).removeClass('active');
				$dropdownHolder.find('.animateIn').removeClass('animating');
			});
		}
		else
		{
			// Just disappear.
			$(this).find('.dropdownItem, .dropdownTrigger').add(this).removeClass('active');
		}
	});
	
	$('.dropdownHolder').bind('open', function(e, oe, trigger, options)
	{
		if(oe) oe.preventDefault();
		
		// Close all active dropdowns in the current set.
		$(this).find('.dropdownItem, .dropdownTrigger').add(this).addClass('active');
		$(this).find('.animateIn').addClass('animating').animate({opacity: 1}, 150);
	});
});
