text: /**
   * @author Roger Wu
   * @version 1.0
   */
  (function($){
  
      $.fn.extend({
          jTask:function(options){
              return this.each(function(){
                  var $task = $(this);
                  var id = $task.attr("id");
                  $task.click(function(e){
                      var dialog = $("body").data(id);
                      if ($task.hasClass("selected")) {
                          $("a.minimize", dialog).trigger("click");
                      } else {
                          if (dialog.is(":hidden")) {
                              $.taskBar.restoreDialog(dialog);
                          } else
                              $(dialog).trigger("click");
                      }
                      $.taskBar.scrollCurrent($(this));
                      return false;
                  });
                  $("div.close", $task).click(function(e){
                      $.pdialog.close(id)
                      return false;
                  });
              });
          }
      });
      $.taskBar = {
          _taskBar:null,
          _taskBox:null,
          _prevBut:null,
          _nextBut:null,
          _op:{id:"taskbar", taskBox:"div.taskbarContent",prevBut:".taskbarLeft",prevDis:"taskbarLeftDisabled", nextBut:".taskbarRight",nextDis:"taskbarRightDisabled", selected:"selected",boxMargin:"taskbarMargin"},
          init:function(options) {
              var $this = this;
              $.extend(this._op, options);
              this._taskBar = $("#" + this._op.id);
              if (this._taskBar.size() == 0) {
                  this._taskBar = $(DWZ.frag["taskbar"]).appendTo($("#layout"));
              }
              this._taskBox = this._taskBar.find(this._op.taskBox);
              this._taskList = this._taskBox.find(">ul");
              this._prevBut = this._taskBar.find(this._op.prevBut);
              this._nextBut = this._taskBar.find(this._op.nextBut);
              this._prevBut.click(function(e){$this.scrollLeft()});
              this._nextBut.click(function(e){$this.scrollRight()});
  
              this._contextmenu(this._taskBox); // taskBar右键菜单
          },
  
          _contextmenu:function(obj) {
              $(obj).contextMenu('dialogCM', {
                  bindings:{
                      closeCurrent:function(t,m){
                          var obj = t.isTag("li")?t:$.taskBar._getCurrent();
                          $("div.close", obj).trigger("click");
                      },
                      closeOther:function(t,m){
                          var selector = t.isTag("li")?("#" +t.attr("id")):".selected";
                          var tasks = $.taskBar._taskList.find(">li:not(:"+selector+")");
                          tasks.each(function(i){
                              $("div.close",tasks[i]).trigger("click");
                          });
                      },
                      closeAll:function(t,m){
                          var tasks = $.taskBar._getTasks();
                          tasks.each(function(i){
                              $("div.close",tasks[i]).trigger("click");
                          });
                      }
                  },
                  ctrSub:function(t,m){
                      var mCur = m.find("[rel='closeCurrent']");
                      var mOther = m.find("[rel='closeOther']");
                      if(!$.taskBar._getCurrent()[0]) {
                          mCur.addClass("disabled");
                          mOther.addClass("disabled");
                      } else {
                          if($.taskBar._getTasks().size() == 1)
                              mOther.addClass("disabled");
                      }
                  }
              });
          },
          _scrollCurrent:function(){
              var iW = this._tasksW(this._getTasks());
              if (iW > this._getTaskBarW()) {
                  var $this = this;
                  var lTask = $(">li:last-child", this._taskList);
                  var left = this._getTaskBarW() - lTask.position().left - lTask.outerWidth(true);
                  this._taskList.animate({
                      left: left + 'px'
                  }, 200, function(){
                      $this._ctrlScrollBut();
                  });
              } else {
                  this._ctrlScrollBut();
              }
          },
          _getTaskBarW:function(){
              return this._taskBox.width()- (this._prevBut.is(":hidden")?this._prevBut.width()+2:0) - (this._nextBut.is(":hidden")?this._nextBut.width()+2:0);
          },
          _scrollTask:function(task){
              var $this = this;
              if(task.position().left + this._getLeft()+task.outerWidth() > this._getBarWidth()) {
                  var left = this._getTaskBarW()- task.position().left  - task.outerWidth(true) - 2;
                  this._taskList.animate({left: left + 'px'}, 200, function(){
                      $this._ctrlScrollBut();
                  });
              } else if(task.position().left + this._getLeft() < 0) {
                  var left = this._getLeft()-(task.position().left + this._getLeft());
                  this._taskList.animate({left: left + 'px'}, 200, function(){
                      $this._ctrlScrollBut();
                  });
              }
          },
          /**
           * 控制左右移动按钮何时显示与隐藏
           */
          _ctrlScrollBut:function(){
              var iW = this._tasksW(this._getTasks());
              if (this._getTaskBarW() > iW) {
                  this._taskBox.removeClass(this._op.boxMargin);
                  this._nextBut.hide();
                  this._prevBut.hide();
                  if(this._getTasks().eq(0)[0])this._scrollTask(this._getTasks().eq(0));
              } else {
                  this._taskBox.addClass(this._op.boxMargin);
                  this._nextBut.show().removeClass(this._op.nextDis);
                  this._prevBut.show().removeClass(this._op.prevDis);
                  if (this._getLeft() >= 0){
                      this._prevBut.addClass(this._op.prevDis);
                  }
                  if (this._getLeft() <= this._getTaskBarW() - iW) {
                      this._nextBut.addClass(this._op.nextDis);
                  } 
              }
          },
          _getLeft: function(){
              return this._taskList.position().left;
          },
          /**
           * 取得第一个完全显示在taskbar上的任务
           */
          _visibleStart: function(){
              var iLeft = this._getLeft();
              var jTasks = this._getTasks();
              for (var i=0; i<jTasks.size(); i++){
                  if (jTasks.eq(i).position().left + jTasks.eq(i).outerWidth(true) + iLeft >= 0) return jTasks.eq(i);
              }
              return jTasks.eq(0);
          },
          /**
           * 取得最后一个完全显示在taskbar上的任务
           */
          _visibleEnd: function(){
              var iLeft = this._getLeft();
              var jTasks = this._getTasks();
              for (var i=0; i<jTasks.size(); i++){
                  if (jTasks.eq(i).position().left + jTasks.eq(i).outerWidth(true) + iLeft > this._getBarWidth()) return jTasks.eq(i);
              }
              return jTasks.eq(jTasks.size()-1);
          },
          /**
           * 取得所有的任务
           */
          _getTasks:function(){
              return this._taskList.find(">li");
          },
          /**
           * 计算所传入的所有任务的宽度和
           * @param {Object} jTasks
           */
          _tasksW:function(jTasks){
              var iW = 0;
              jTasks.each(function(){
                  iW += $(this).outerWidth(true);
              });
              return iW;
          },
          _getBarWidth: function() {
              return this._taskBar.innerWidth();
          },
          /**
           * 在任务栏上新加一个任务
           * @param {Object} id
           * @param {Object} title
           */
          addDialog: function(id, title){
              this.show();
              var task = $("#"+id,this._taskList);
              if (!task[0]) {
                  var taskFrag = '<li id="#taskid#"><div class="taskbutton"><span><i class="fa fa-caret-square-o-down"></i> #title#</span></div><div class="close"><i class="fa fa-times-circle"></i></div></li>';
                  this._taskList.append(taskFrag.replace("#taskid#", id).replace("#title#", title));
                  task = $("#"+id,this._taskList);
                  task.jTask();
              } else {
                  $(">div>span", task).text(title);
              }
              this._contextmenu(task);
              this.switchTask(id);
              this._scrollTask(task);
          },
          /**
           * 关闭一个任务
           * @param {Object} id
           */
          closeDialog: function(obj){
              var task = (typeof obj == 'string')? $("#"+obj, this._taskList):obj;
              task.remove();
              if(this._getTasks().size() == 0){
                  this.hide();
              }            
              this._scrollCurrent();
          },
          /**
           * 
           * @param {Object} id or dialog
           */
          restoreDialog:function(obj){
              var dialog = (typeof obj == 'string')?$("body").data(obj):obj;
              var id = (typeof obj == 'string')?obj:dialog.data("id");
              var task = $.taskBar.getTask(id);
              $(".resizable").css({top: $(window).height()-60,left:$(task).position().left,height:$(task).outerHeight(),width:$(task).outerWidth()
              }).show().animate({top:$(dialog).css("top"),left: $(dialog).css("left"),width:$(dialog).css("width"),height:$(dialog).css("height")},250,function(){
                  $(this).hide();
                  $(dialog).show();
                  $.pdialog.attachShadow(dialog);
              });
              $.taskBar.switchTask(id);
          },
          /**
           * 把任务变成不是当前的
           * @param {Object} id
           */
          inactive:function(id){
              $("#" + id, this._taskList).removeClass("selected");
          },
          /**
           * 向左移一个任务
           */
          scrollLeft: function(){
              var task = this._visibleStart();
              this._scrollTask(task);
          },
          /**
           * 向右移一个任务
           */
          scrollRight: function(){
              var task = this._visibleEnd();
              this._scrollTask(task);
          },
          /**
           * 移出当前点击的任务
           * @param {Object} task
           */
          scrollCurrent:function(task){
              this._scrollTask(task);
          },
          /**
           * 切换任务
           * @param {Object} id
           */
          switchTask:function(id) {
              this._getCurrent().removeClass("selected");
              this.getTask(id).addClass("selected");
          },
          _getCurrent:function() {
              return this._taskList.find(">.selected");
          },
          getTask:function(id) {
              return $("#" + id, this._taskList);
          },
          /**
           * 显示任务栏
           */
          show:function(){
              if (this._taskBar.is(":hidden")) {
                  this._taskBar.css("top", $(window).height() - 34 + this._taskBar.outerHeight()).show();
                  this._taskBar.animate({
                      top: $(window).height() - this._taskBar.outerHeight()
                  }, 500);
              }
          },
          /**
           * 隐藏任务栏
           */
          hide:function(){
              this._taskBar.animate({
                  top: $(window).height() - 29 + this._taskBar.outerHeight(true)
              }, 500,function(){
                  $.taskBar._taskBar.hide();
              });
          }
      }
  })(jQuery);