text: /*global redux_change, redux*/
  
  (function( $ ) {
      "use strict";
  
      redux.field_objects = redux.field_objects || {};
      redux.field_objects.select = redux.field_objects.select || {};
  
      redux.field_objects.select.init = function( selector ) {
          if ( !selector ) {
              selector = $( document ).find( '.redux-container-select:visible' );
          }
          
          $( selector ).each(
              function() {
                  var el = $( this );
                  var parent = el;
                  
                  if ( !el.hasClass( 'redux-field-container' ) ) {
                      parent = el.parents( '.redux-field-container:first' );
                  }
                  if ( parent.is( ":hidden" ) ) { // Skip hidden fields
                      return;
                  }
                  if ( parent.hasClass( 'redux-field-init' ) ) {
                      parent.removeClass( 'redux-field-init' );
                  } else {
                      return;
                  }
                  
                  el.find( 'select.redux-select-item' ).each(
                      function() {
  
                          var default_params = {
                              width: 'resolve',
                              triggerChange: true,
                              allowClear: true
                          };
                          if ( $(this).attr('multiple') == "multiple" ) {
                              default_params.width = "100%";
                          }
  
                          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: redux.field_objects.select.addIcon,
                                      formatSelection: redux.field_objects.select.addIcon,
                                      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();
                              }
                          );
                      }
                  );
              }
          );
      };
  
      redux.field_objects.select.addIcon = function( icon ) {
          if ( icon.hasOwnProperty( 'id' ) ) {
              return "<span class='elusive'><i class='" + icon.id + "'></i>" + "&nbsp;&nbsp;" + icon.text + "</span>";
          }
      };
  })( jQuery );