(function($)
{
	$.fn.gmenu = function(opts)
	{
		opts = $.extend({}, $.fn.gmenu.defaults, opts);

        var arrow = $(['<span class="', opts.indicatorClass, '">&nbsp;</span>'].join(''));

		return this.each(function()
		{
			var elems;
			if (opts.foldedClass == '')
			{
				elems = $('li:has(ul)', this);
			} else
			{	
				elems = $('.' + opts.foldedClass + ' li:has(ul), li.' + opts.foldedClass + ':has(ul)', this);
			}
            if (opts.noHide) {
                elems.hover(
		            function() { $("." + opts.hoverClass).removeClass(opts.hoverClass); $(this).addClass(opts.hoverClass); $('>ul', this).animate({opacity: 'show', speed: 'slow'}) },
    		        function() { /*$(this).removeClass(opts.hoverClass); $('>ul', this).animate({opacity: 'hide', speed: 'slow'})*/ }
                )
            } else
            {
                elems.hover(
		            function() { $(this).addClass(opts.hoverClass); $('>ul', this).animate({opacity: 'show'}, opts.showSpeed) },
    		        function() { $('>ul', this).animate({opacity: 'hide'}, opts.hideSpeed, function() { $(this).removeClass(opts.hoverClass) }) }
                )
            }
			if (opts.addArrow)
			{	
				elems.each( function()
		        {
			        $('>a:first-child', this).addClass(opts.subLinkClass).append(arrow.clone());
				});
			}
		});

	};
    
	$.fn.gmenu.defaults = {
        hoverClass:     'g-hover',
		subLinkClass:   'g-with-ul',
        indicatorClass: 'g-sub-indicator',
		foldedClass:	'',
		addArrow:		true,
		noHide:		    false,
        showSpeed:      600,
        hideSpeed:      600
	};
    
})(jQuery);


