/**
 * jQuery Plug-in
 *
 * Required:
 * "outerClick" Plug-in
 * @see jQuery custom event, http://plugins.jquery.com/project/outerClick
 *
 * Usage:
 * $("li#explore").superDropdown();
 */
(function ($) {	
    $.fn.superDropdown = function (pluginOptions) {
		var opts = $.extend({}, $.fn.superDropdown.defaults, pluginOptions);
        var item = $(this);
		var anchor = item.find(opts.buttonAnchor);
		var element = item.find(opts.dropdownClass);
        
		// development phase (without "displayNone" class)
		if ($(element).is(":visible")) {
			item.addClass(opts.openClass);
			anchor.click();
		}

        if (item.hasClass(opts.openClass)) {
            item.outerClick(function () {
                closeElement();
            });
        }

		anchor.bind("click", function (e) {
            if (!item.hasClass(opts.openClass)) {
                openElement();
            } else {
                closeElement();
            }
            if (!opts.useHover || anchor.attr("href", "#")) {
                e.preventDefault();
            }
            e.stopImmediatePropagation();
        });
        
		if (opts.useHover) {
            anchor.hover(openElement, function () {});
            item.hover(function () {}, closeElement);
        }
        
		function openElement() {
            item.addClass(opts.openClass);
            if ($(element).hasClass("displayNone")) {
                $(element).removeClass("displayNone");
                item.outerClick(function () {
                    closeElement();
                });
            }
            $(element).show();
        }

        function closeElement() {
            anchor.unbind("outerClick");
            item.removeClass(opts.openClass);
            $(element).addClass("displayNone");
            $(element).hide();
        }
    };

	// expose plugin defaults
	$.fn.superDropdown.defaults = {
        dropdownClass: "div.superDropdown",
        openClass: "open",
        buttonAnchor: "a:eq(0)",
        useHover: true
	};
})(jQuery);
