text: /*
  	Copyright (c) 2004-2013, The Dojo Foundation All Rights Reserved.
  	Available via Academic Free License >= 2.1 OR the modified BSD license.
  	see: http://dojotoolkit.org/license for details
  */
  
  
  if(!dojo._hasResource["dojo.dnd.Manager"]){
  dojo._hasResource["dojo.dnd.Manager"]=true;
  dojo.provide("dojo.dnd.Manager");
  dojo.require("dojo.dnd.common");
  dojo.require("dojo.dnd.autoscroll");
  dojo.require("dojo.dnd.Avatar");
  dojo.declare("dojo.dnd.Manager",null,{constructor:function(){
  this.avatar=null;
  this.source=null;
  this.nodes=[];
  this.copy=true;
  this.target=null;
  this.canDropFlag=false;
  this.events=[];
  },OFFSET_X:16,OFFSET_Y:16,overSource:function(_1){
  if(this.avatar){
  this.target=(_1&&_1.targetState!="Disabled")?_1:null;
  this.canDropFlag=Boolean(this.target);
  this.avatar.update();
  }
  dojo.publish("/dnd/source/over",[_1]);
  },outSource:function(_2){
  if(this.avatar){
  if(this.target==_2){
  this.target=null;
  this.canDropFlag=false;
  this.avatar.update();
  dojo.publish("/dnd/source/over",[null]);
  }
  }else{
  dojo.publish("/dnd/source/over",[null]);
  }
  },startDrag:function(_3,_4,_5){
  this.source=_3;
  this.nodes=_4;
  this.copy=Boolean(_5);
  this.avatar=this.makeAvatar();
  dojo.body().appendChild(this.avatar.node);
  dojo.publish("/dnd/start",[_3,_4,this.copy]);
  this.events=[dojo.connect(dojo.doc,"onmousemove",this,"onMouseMove"),dojo.connect(dojo.doc,"onmouseup",this,"onMouseUp"),dojo.connect(dojo.doc,"onkeydown",this,"onKeyDown"),dojo.connect(dojo.doc,"onkeyup",this,"onKeyUp"),dojo.connect(dojo.doc,"ondragstart",dojo.stopEvent),dojo.connect(dojo.body(),"onselectstart",dojo.stopEvent)];
  var c="dojoDnd"+(_5?"Copy":"Move");
  dojo.addClass(dojo.body(),c);
  },canDrop:function(_6){
  var _7=Boolean(this.target&&_6);
  if(this.canDropFlag!=_7){
  this.canDropFlag=_7;
  this.avatar.update();
  }
  },stopDrag:function(){
  dojo.removeClass(dojo.body(),"dojoDndCopy");
  dojo.removeClass(dojo.body(),"dojoDndMove");
  dojo.forEach(this.events,dojo.disconnect);
  this.events=[];
  this.avatar.destroy();
  this.avatar=null;
  this.source=this.target=null;
  this.nodes=[];
  },makeAvatar:function(){
  return new dojo.dnd.Avatar(this);
  },updateAvatar:function(){
  this.avatar.update();
  },onMouseMove:function(e){
  var a=this.avatar;
  if(a){
  dojo.dnd.autoScrollNodes(e);
  var s=a.node.style;
  s.left=(e.pageX+this.OFFSET_X)+"px";
  s.top=(e.pageY+this.OFFSET_Y)+"px";
  var _8=Boolean(this.source.copyState(dojo.isCopyKey(e)));
  if(this.copy!=_8){
  this._setCopyStatus(_8);
  }
  }
  },onMouseUp:function(e){
  if(this.avatar){
  if(this.target&&this.canDropFlag){
  var _9=Boolean(this.source.copyState(dojo.isCopyKey(e))),_a=[this.source,this.nodes,_9,this.target];
  dojo.publish("/dnd/drop/before",_a);
  dojo.publish("/dnd/drop",_a);
  }else{
  dojo.publish("/dnd/cancel");
  }
  this.stopDrag();
  }
  },onKeyDown:function(e){
  if(this.avatar){
  switch(e.keyCode){
  case dojo.keys.CTRL:
  var _b=Boolean(this.source.copyState(true));
  if(this.copy!=_b){
  this._setCopyStatus(_b);
  }
  break;
  case dojo.keys.ESCAPE:
  dojo.publish("/dnd/cancel");
  this.stopDrag();
  break;
  }
  }
  },onKeyUp:function(e){
  if(this.avatar&&e.keyCode==dojo.keys.CTRL){
  var _c=Boolean(this.source.copyState(false));
  if(this.copy!=_c){
  this._setCopyStatus(_c);
  }
  }
  },_setCopyStatus:function(_d){
  this.copy=_d;
  this.source._markDndStatus(this.copy);
  this.updateAvatar();
  dojo.removeClass(dojo.body(),"dojoDnd"+(this.copy?"Move":"Copy"));
  dojo.addClass(dojo.body(),"dojoDnd"+(this.copy?"Copy":"Move"));
  }});
  dojo.dnd._manager=null;
  dojo.dnd.manager=function(){
  if(!dojo.dnd._manager){
  dojo.dnd._manager=new dojo.dnd.Manager();
  }
  return dojo.dnd._manager;
  };
  }
  