(function ($) {
    $.fn.extend({
        publicationCombo: function() {
            var elementToSelection = function(element) {
                var value = $(element).val();
                var text = $(element).text();
                return {'value': value, 'text': text};
            };

            var makeNode = function(parentElement) {
                return function(index, element) {
                    var selection = elementToSelection(element);
                    var item = $('<li class="amt-publication-selection"></li>');
                    item.text(selection.text);
                    item.click(function() {
                        parentElement.trigger('change', selection);
                    });
                    item.hover(function() {
                        item.addClass('over');
                    }, function() {
                        item.removeClass('over');
                    });
                    parentElement.append(item);
                };
            };

            return function() {
                var select = $(this);
                var input = $('<input type="hidden" name="publication_id" />');
                var heading = $('<div id="amt-selected-publication"></div>');
                var chevron = $('<div id="amt-selector-chevron"><span class="displace">V</span></div>');
                var list = $('<ul id="amt-publication-list" class="hide"></ul>');
                var container = $('<div id="amt-publication-selector" class="search-input"></div>').append(input, heading, chevron, list);
                var doc = $('body');

                var hideList = function() {
                    list.addClass('hide');
                };

                var toggleList = function(e) {
                    list.toggleClass('hide');
                    return false;
                };
    
                var setSelectedValue = function(selection) {
                    input.val(selection.value);
                    heading.text(selection.text);
                    heading.attr('title', selection.text);
                };

                var listSelectionChanged = function(e, selection) {
                    setSelectedValue(selection);
                    list.addClass('hide');
                    $('#search').submit();
                };

                doc.click(hideList);
                setSelectedValue(elementToSelection(select.children(':selected')));
                select.children('option').each(makeNode(list));
                list.bind('change', listSelectionChanged);
                chevron.click(toggleList);
                select.replaceWith(container);
            };
        }()
    });
}(jQuery));

jQuery(document).ready(function() {
    $('#search-sector').publicationCombo();
});

