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;
  				}).hoverClass("closeHover");
  				
  				$task.hoverClass("hover");
  			});
  		}
  	});
  	$.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._taskBar.find(".taskbarLeft").hoverClass("taskbarLeftHover");
  				this._taskBar.find(".taskbarRight").hoverClass("taskbarRightHover");
  			}
  			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(true);
  		},
  		/**
  		 * 在任务栏上新加一个任务
  		 * @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>#title#</span></div><div class="close">Close</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);
  