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