(function($) {
$.widget('ui.emailtoqueue', {
      _create: function () {
          var self = this;
          self._buildTable();
          self._getProjects();
      },
      _getProjects: function() {
          var self = this;
          $.post('/otrs', {
              Action: 'AgentXJSON',
              Subaction: 'Projects'
          }, function(data) {
              var projects = data.projects;
              var td = $('<td></td>');

              var select = $('<select></select>').attr({
                  ID: 'email-select-project'
              }).change( function() {
                  var projectID = $(this).children('option:selected').val();
                  self._getProjectQueues(projectID);
                  self.element.triggerHandler('EmailToQueue', { 
                      QueueID: projectID
                  });
              }); 

              self._generateProjectQueuesHead();             

              for ( var i = 0; i < projects.length; i++ ) {
                  select.append( 
                    $('<option></option>')
                        .text(projects[i].name)
                        .val(projects[i].id)
                    );
              }
              self.element
                .css({float:'left'})
                .find('tr:first')
                .append( td.append( select ) );

              self._getProjectQueues(projects[0].id);
              self.defaultQueueID = projects[0].id;
              self._callback();
          });
      },
      _generateProjectQueuesHead: function() {
          var self = this;
          self.selectQueue = $('<select></select>').attr({
              ID: 'email-select-queue'
          }).change( function() {
              var queueID = $(this).children('option:selected').val();
              self.element.triggerHandler('EmailToQueue', { 
                  QueueID: queueID
              });
              
          });

          var td = $('<td></td>')
                        .append( self.selectQueue );

          if ( ! self.options.bulk ) {
              if (! self.options.nosubmit) 
                  td.append(self._generateButton() );
              else $('.apply-button-move').remove();

              self.element
                .find('table')
                .append(
                    $('<tr></tr>').append(
                        $('<td></td>').text('Раздел:')
                    )
                    .append( td )
                );
          } else {
              self.element
                .find('table')
                .append(
                    $('<tr></tr>').append(
                        $('<td></td>').text('Раздел:')
                    ).append(td)
                )
                .after( self._generateThreeDropdowns(data) );
          }          
      },    
      _getProjectQueues: function(projectID) {
          var self = this;  
          $.post('/otrs', {
              Action: 'AgentXJSON',
              Subaction: 'ProjectQueues',
              ProjectID: projectID,
              Bulk: self.options.bulk                
          }, function(data) {
              var queues = data.queues;
              self.selectQueue.empty();
                  if ( self.options.all )
                        self.selectQueue.append(                       
                            $('<option></option>')
                        );

                  for ( var i = 0; i < queues.length; i++ ) {
                      self.selectQueue.append( 
                        $('<option></option>')
                            .text(queues[i].name)
                            .val(queues[i].id)
                        );
                  }
          });
     },

      _generateThreeDropdowns: function(data) {
          var self = this;
          var table = $('<table></table>').css({float:'left'});
          var dd = data.dropdowns;

          var list = [ 
            { States: 'Статус' },
            { Users: 'Отвественный' },
            { Priorities: 'Приоритет' }
          ];

          for ( var item = 0; item < list.length; item++ ) {
              var key;
              var val;

              for ( p in list[item] ) {
                var key = p;
                var val = list[item][p];
              }

              var tr = $('<tr></tr>')
                .append( $('<td></td>')
                            .text( val + ':' )
                            );

              var select = $('<select></select>').attr({
                  ID: key
              });
              
              if ( 'Users' == key )
                select.append( $('<option></option>') );
              
              for ( var i in dd[key] ) {
                  select.append( 
                    $('<option></option>')
                        .text(dd[key][i])
                        .val(i)
                    );
              }

              if ( 'Priorities' == key ) {
                  select
                    .children('option:eq(2)')
                    .attr({selected: true});
              }

              tr.append( $('<td></td>').append( select ) );
              table.append(tr);
          }
          
          return table;
      },  
      _callback: function() {
          var self = this;
        if ( 'function' == typeof self.options.callback )
            self.options
                .callback
                .call(self.element.get(), { QueueID: self.defaultQueueID } ); 
      },      
      _generateButton: function() {
        var self = this;
        return $('<input/>')
            .addClass('apply-button-move')
            .attr({
                value: 'Применить',
                type: 'button'
            }).click( function() {
                var button = $(this);
                var queue = self.element
                    .find('select:last')
                    .children('option:selected');
                var queueID = queue.val();

                var qname = queue.text();
                var pname = self.element
                    .find('select:first')
                    .children('option:selected').text();
                var stateID = $('#SetState')
                    .children('option:selected').val() || 0;
                var priID = $('#SetPriority')
                    .children('option:selected').val() || 0;
                var userID = $('#SetOwner')
                    .children('option:selected').val() || 0;
                    
                if ( ! queueID ) {
                    alert('Не могу взять queueID - скажите Борису');
                    return false;
                }

                $.post('/otrs', { 
                    Action: 'AgentXJSON',
                    Subaction: 'ChangeQueue',
                    QueueID: queueID,
                    TicketID: self.options.TicketID,
                    user_id: userID,
                    ticket_state_id: stateID,
                    ticket_priority_id: priID
                }, function(data) {
                    if ( ! data.error ) {
                        button.after(
                            $('<span></span>')
                                .attr({ID:'success-message'})
                                .text('Перенесено в проект '
                                + pname + 
                                ' раздел ' + qname)
                        );
                        button.remove();
                    }
                });
            });
      },
      _buildTable: function() {
          var self = this;
          self.element
            .empty()
            .addClass('widget')
            .append(
              $('<table></table>')
                    .css({float:'left'})
                    .append(
                    $('<tr></tr>').append(
                        $('<td></td>').text('Проект:')
                    )
              )
          );
      }
});
})(jQuery);


