﻿(function ($) {

    $.fn.dropDownList = function (options) {

        var defaults = {};
        var options = $.extend(defaults, options);

        return this.each(function () {

            var $list = $(this);
            var $itemsContainer = $(">.items", $list);
            var $items = $(">.item", $itemsContainer);

            $itemsContainer.css("visibility", "hidden").show();

            if (!$items.filter(".selected").length)
                $items.first().addClass("selected");

            $list.prepend($items.filter(".selected").clone());

            var $selectedItem = $(">.selected", $list);

            var maxWidth = $itemsContainer.outerWidth(true);
            
            $list.width(maxWidth).data("drop-height", $itemsContainer.height());
            $itemsContainer.hide().css("visibility", "");

            $(">a", $selectedItem).click(function () { return false; });

            $(">a", $items).click(function () {

                var $link = $(this);
                var $item = $link.parent(".item");

                if (!$item.is(".selected")) {

                    $item.addClass("selected").siblings(".selected").removeClass("selected");
                    $selectedItem.remove();
                    $list.prepend($item.clone());
                    $selectedItem = $(">.selected", $list);

                    $list.trigger("mouseleave");

                } else {

                    return false;

                }

            });

            $list.mouseenter(function () {

                if (!$itemsContainer.is(":visible"))
                    $itemsContainer.height(0).show();

                $itemsContainer.stop().animate({

                    height: parseInt($list.data("drop-height"))

                }, {

                    duration: 200

                });

            }).mouseleave(function () {

                $itemsContainer.stop().animate({

                    height: 0

                }, {

                    duration: 200,
                    complete: function () {

                        if ($itemsContainer.height() == 0)
                            $itemsContainer.hide();

                    }

                });

            });

        });

    };

})(jQuery);
