(function($) {
$.widget('ui.bulkaction', {
      _create: function () {
          var self = this;
          self.element.empty();
          self.checkboxes = $('input[name*="checkbox"]');
          if ( ! self.checkboxes.length) return false;

          self.actions = [ 'Удалить', 'Переместить' ];
          self._buildSelect();
      },
      _buildSelect: function() {
          var self = this;
          var select = $('<select></select>').attr({
              ID: 'bulk-action-select'
          })
          .css({float:'left'})
          .change( function() {
              self.element.find('button:first').remove();
              
              if ( self.element.find('select').length > 1 ) {
                  self.element
                    .find('select:last')
                    .closest('DIV')
                    .remove(); 
              }

              self.element.append(
                self._generateButton()               
              );
              var action = self.element
                        .find('select:first')
                        .children('option:selected')
                        .val();
              
              if ( 2 == action ) { //move
                 self.element
                    .find('select:first')
                    .after(
                        $('<DIV></DIV>')
                            .attr({
                                ID: 'email-to-queue-bulk'
                            })
                            .css({float:'left'})
                            .emailtoqueue({
                                bulk: true
                            })
                    );
              }
          });
          for ( var i = 0; i < self.actions.length; i++ ) {
              select.append( 
                $('<option></option>')
                    .text(self.actions[i])
                    .val(i + 1)
                );
          }

          self.
            element
            .addClass('widget')
            .append( select )
            .append( self._generateButton() );
      },
      _generateButton: function() {
          var self = this;
          var action = self.element
                    .find('select:first')
                    .children('option:selected')
                    .val();

          return $('<button></button>')
            .addClass('apply-button')
            .click( function() {
                if ( ! self._getChecked(action) ) return false;
                var queueID = self.element
                    .find('select:eq(2)')
                    .children('option:selected')
                    .val() || 0;
                var state = self.element
                    .find('select:eq(3)')
                    .children('option:selected')
                    .val() || 0;
                var user = self.element
                    .find('select:eq(4)')
                    .children('option:selected')
                    .val() || 0;
                var pri = self.element
                    .find('select:eq(5)')
                    .children('option:selected')
                    .val() || 0;
                    
                $.post('/otrs', {
                    Action: 'AgentXJSON',
                    Subaction: 'BulkAction',
                    ActionType: action,
                    QueueID: queueID,
                    user_id: user,
                    ticket_priority_id: pri,
                    ticket_state_id: state,
                    ids: self.ids
                }, function(data) {
                    if ( ! data.error ) {
                        location.reload();
                    }
                    delete self.ids;
                });
            });
      },
      _getChecked: function(action) {
          var self = this;
          var checked = $('input[name*="checkbox"]:checked');
          if ( ! checked.length ) return false;
          self.ids = [];
          checked.each( function() {
              var arr = $(this).attr('name').split('-');
              self.ids.push(arr[1]);
          });
          return 1 == action ? confirm('Стереть сообщение(я) ' + self.ids.join(',') ) : true; 
      }
});
})(jQuery);          

