/* global redux_change */

(function($) {
    "use strict";

    $.redux = $.redux || {};

    $(document).ready(function() {
        $.redux.select();
    });

    $.redux.select = function() {
        $('select.redux-select-item').each(function() {

            var default_params = {
                width:          'resolve',
                triggerChange:  true,
                allowClear:     true
            };

            if ($(this).siblings('.select2_params').size() > 0) {
                var select2_params = $(this).siblings('.select2_params').val();
                select2_params = JSON.parse(select2_params);
                default_params = $.extend({}, default_params, select2_params);
            }

            if ($(this).hasClass('font-icons')) {
                default_params = $.extend({}, {formatResult: addIconToSelect, formatSelection: addIconToSelect, escapeMarkup: function(m) {
                        return m;
                    }}, default_params);
            }

            $(this).select2(default_params);

            if ($(this).hasClass('select2-sortable')) {
                default_params = {};
                default_params.bindOrder = 'sortableStop';
                default_params.sortableOptions = {placeholder: 'ui-state-highlight'};
                $(this).select2Sortable(default_params);
            }

            $(this).on("change", function() {
                redux_change($($(this)));
                $(this).select2SortableOrder();
            });
        });
    };

    function addIconToSelect(icon) {
        if (icon.hasOwnProperty('id')) {
            return "<span class='elusive'><i class='" + icon.id + "'></i>" + "&nbsp;&nbsp;" + icon.id.toUpperCase() + "</span>";
        }
    }
})(jQuery);