/**
 * JQuery plugin for easy submenus.
 *
 * Usage:
 * $('ul.navMenu li a').submenu();
 *
 * or
 *
 * $.armSubmenus('navMenu');
 *
 * @author Mark Guinn <mark@adaircreative.com>
 * @package main
 * @date 2/2/11
 */
(function($){
	$.fn.submenu = function(myOptions) {
		var options = $.extend({
			offsetLeft:	0,
			offsetTop:	0,
			fadeDelay:	500
		}, myOptions);
		
   		return this.each(function() {
			var trig = $(this);
			var popup = (trig[0].nodeName=='LI') ? trig.children('ul') : trig.parent().children('ul');
			if (!popup || popup.length == 0) return;
			var isOver = false;
			var onLeave = function(){ if (!isOver) popup.hide(); }

			if (popup.children().length == 0) return;
			
			// position the popup correctly and hide it
			var trigPos = trig.offset();
			popup
				.hide()
				.appendTo(document.body)
				.addClass('submenuPopup')
				.css({
					position: 'absolute',
					left: trigPos.left + options.offsetLeft,
					top: trigPos.top + trig.outerHeight() + options.offsetTop
				})
			;

			// work out the hovering behavior
			trig.addClass('submenuTrig').hover(
			   function(){
					var trigPos = trig.offset();
				   isOver = true;
				   popup
						.css({
							left: trigPos.left + options.offsetLeft,
							top: trigPos.top + trig.outerHeight() + options.offsetTop
						})
					   	.show();
				   $('.submenuPopup').not(popup).hide();
			   },
			   function(){
				   isOver = false;
				   setTimeout(onLeave, options.fadeDelay);
			   }
			);

			popup.hover(
			   function(){
				   isOver = true;
			   },
			   function(){
				   isOver = false;
				   setTimeout(onLeave, options.fadeDelay);
			   }
			);
   		});
	};

	// easier global version
	$.armSubmenus = function(ulClass) {
		if (!ulClass) ulClass = 'navMenu';
		$('ul.'+ulClass+' li a').submenu();
	};

})(jQuery);

