(function(a){a.fn.drag=function(b,c,d){var e=typeof b=="string"?b:"",g=a.isFunction(b)?b:a.isFunction(c)?c:null;if(e.indexOf("drag")!==0)e="drag"+e;d=(b==g?c:d)||{};return g?this.bind(e,d,g):this.trigger(e)};var b=a.event,c=b.special,d=c.drag={defaults:{which:1,distance:0,not:":input",handle:null,relative:false,drop:true,click:false},datakey:"dragdata",livekey:"livedrag",add:function(c){var e=a.data(this,d.datakey),g=c.data||{};e.related+=1;if(!e.live&&c.selector){e.live=true;b.add(this,"draginit."+d.livekey,d.delegate)}a.each(d.defaults,function(a){if(g[a]!==undefined)e[a]=g[a]})},remove:function(){a.data(this,d.datakey).related-=1},setup:function(){if(!a.data(this,d.datakey)){var c=a.extend({related:0},d.defaults);a.data(this,d.datakey,c);b.add(this,"mousedown",d.init,c);this.attachEvent&&this.attachEvent("ondragstart",d.dontstart)}},teardown:function(){if(!a.data(this,d.datakey).related){a.removeData(this,d.datakey);b.remove(this,"mousedown",d.init);b.remove(this,"draginit",d.delegate);d.textselect(true);this.detachEvent&&this.detachEvent("ondragstart",d.dontstart)}},init:function(e){var g=e.data,j;if(!(g.which>0&&e.which!=g.which))if(!a(e.target).is(g.not))if(!(g.handle&&!a(e.target).closest(g.handle,e.currentTarget).length)){g.propagates=1;g.interactions=[d.interaction(this,g)];g.target=e.target;g.pageX=e.pageX;g.pageY=e.pageY;g.dragging=null;j=d.hijack(e,"draginit",g);if(g.propagates){if((j=d.flatten(j))&&j.length){g.interactions=[];a.each(j,function(){g.interactions.push(d.interaction(this,g))})}g.propagates=g.interactions.length;g.drop!==false&&c.drop&&c.drop.handler(e,g);d.textselect(false);b.add(document,"mousemove mouseup",d.handler,g);return false}}},interaction:function(b,c){return{drag:b,callback:new d.callback,droppable:[],offset:a(b)[c.relative?"position":"offset"]()||{top:0,left:0}}},handler:function(a){var e=a.data;switch(a.type){case!e.dragging&&"mousemove":if(Math.pow(a.pageX-e.pageX,2)+Math.pow(a.pageY-e.pageY,2)<Math.pow(e.distance,2))break;a.target=e.target;d.hijack(a,"dragstart",e);if(e.propagates)e.dragging=true;case"mousemove":if(e.dragging){d.hijack(a,"drag",e);if(e.propagates){e.drop!==false&&c.drop&&c.drop.handler(a,e);break}a.type="mouseup"};case"mouseup":b.remove(document,"mousemove mouseup",d.handler);if(e.dragging){e.drop!==false&&c.drop&&c.drop.handler(a,e);d.hijack(a,"dragend",e)}d.textselect(true);if(e.click===false&&e.dragging){jQuery.event.triggered=true;setTimeout(function(){jQuery.event.triggered=false},20);e.dragging=false}break}},delegate:function(c){var e=[],g,h=a.data(this,"events")||{};a.each(h.live||[],function(h,j){if(j.preType.indexOf("drag")===0)if(g=a(c.target).closest(j.selector,c.currentTarget)[0]){b.add(g,j.origType+"."+d.livekey,j.origHandler,j.data);a.inArray(g,e)<0&&e.push(g)}});if(!e.length)return false;return a(e).bind("dragend."+d.livekey,function(){b.remove(this,"."+d.livekey)})},hijack:function(c,e,g,h,j){if(g){var k={event:c.originalEvent,type:c.type},l=e.indexOf("drop")?"drag":"drop",m,n=h||0,o,p;h=!isNaN(h)?h:g.interactions.length;c.type=e;c.originalEvent=null;g.results=[];do if(o=g.interactions[n])if(!(e!=="dragend"&&o.cancelled)){p=d.properties(c,g,o);o.results=[];a(j||o[l]||g.droppable).each(function(h,j){m=(p.target=j)?b.handle.call(j,c,p):null;if(m===false){if(l=="drag"){o.cancelled=true;g.propagates-=1}if(e=="drop")o[l][h]=null}else if(e=="dropinit")o.droppable.push(d.element(m)||j);if(e=="dragstart")o.proxy=a(d.element(m)||o.drag)[0];o.results.push(m);delete c.result;if(e!=="dropinit")return m});g.results[n]=d.flatten(o.results);if(e=="dropinit")o.droppable=d.flatten(o.droppable);e=="dragstart"&&!o.cancelled&&p.update()}while(++n<h);c.type=k.type;c.originalEvent=k.event;return d.flatten(g.results)}},properties:function(a,b,c){var e=c.callback;e.drag=c.drag;e.proxy=c.proxy||c.drag;e.startX=b.pageX;e.startY=b.pageY;e.deltaX=a.pageX-b.pageX;e.deltaY=a.pageY-b.pageY;e.originalX=c.offset.left;e.originalY=c.offset.top;e.offsetX=a.pageX-(b.pageX-e.originalX);e.offsetY=a.pageY-(b.pageY-e.originalY);e.drop=d.flatten((c.drop||[]).slice());e.available=d.flatten((c.droppable||[]).slice());return e},element:function(a){if(a&&(a.jquery||a.nodeType==1))return a},flatten:function(b){return a.map(b,function(b){return b&&b.jquery?a.makeArray(b):b&&b.length?d.flatten(b):b})},textselect:function(b){a(document)[b?"unbind":"bind"]("selectstart",d.dontstart).attr("unselectable",b?"off":"on").css("MozUserSelect",b?"":"none")},dontstart:function(){return false},callback:function(){}};d.callback.prototype={update:function(){c.drop&&this.available.length&&a.each(this.available,function(a){c.drop.locate(this,a)})}};c.draginit=c.dragstart=c.dragend=d})(jQuery)
