!function(t){t.fn.dragsort=function(e){if("destroy"==e)return void t(this.selector).trigger("dragsort-uninit");var r=t.extend({},t.fn.dragsort.defaults,e),o=[],a=null,i=null;return this.each(function(e,n){t(n).is("table")&&1==t(n).children().size()&&t(n).children().is("tbody")&&(n=t(n).children().get(0));var d={draggedItem:null,placeHolderItem:null,pos:null,offset:null,offsetLimit:null,scroll:null,container:n,init:function(){r.tagName=0==t(this.container).children().size()?"li":t(this.container).children().get(0).tagName.toLowerCase(),""==r.itemSelector&&(r.itemSelector=r.tagName),""==r.dragSelector&&(r.dragSelector=r.tagName),""==r.placeHolderTemplate&&(r.placeHolderTemplate="<"+r.tagName+"> "+r.tagName+">"),t(this.container).attr("data-listidx",e).mousedown(this.grabItem).bind("dragsort-uninit",this.uninit),this.styleDragHandlers(!0)},uninit:function(){var e=o[t(this).attr("data-listidx")];t(e.container).unbind("mousedown",e.grabItem).unbind("dragsort-uninit"),e.styleDragHandlers(!1)},getItems:function(){return t(this.container).children(r.itemSelector)},styleDragHandlers:function(e){this.getItems().map(function(){return t(this).is(r.dragSelector)?this:t(this).find(r.dragSelector).get()}).css("cursor",e?"pointer":"")},grabItem:function(e){var a=o[t(this).attr("data-listidx")],i=t(e.target).closest("[data-listidx] > "+r.tagName).get(0),n=a.getItems().filter(function(){return this==i}).size()>0;if(!(1!=e.which||t(e.target).is(r.dragSelectorExclude)||t(e.target).closest(r.dragSelectorExclude).size()>0)&&n){e.preventDefault();for(var d=e.target;!t(d).is(r.dragSelector);){if(d==this)return;d=d.parentNode}t(d).attr("data-cursor",t(d).css("cursor")),t(d).css("cursor","move");var l=this,s=function(){a.dragStart.call(l,e),t(a.container).unbind("mousemove",s)};t(a.container).mousemove(s).mouseup(function(){t(a.container).unbind("mousemove",s),t(d).css("cursor",t(d).attr("data-cursor"))})}},dragStart:function(e){null!=a&&null!=a.draggedItem&&a.dropItem(),a=o[t(this).attr("data-listidx")],a.draggedItem=t(e.target).closest("[data-listidx] > "+r.tagName),a.draggedItem.attr("data-origpos",t(this).attr("data-listidx")+"-"+t(a.container).children().index(a.draggedItem));var i=parseInt(a.draggedItem.css("marginTop")),n=parseInt(a.draggedItem.css("marginLeft"));if(a.offset=a.draggedItem.offset(),a.offset.top=e.pageY-a.offset.top+(isNaN(i)?0:i)-1,a.offset.left=e.pageX-a.offset.left+(isNaN(n)?0:n)-1,!r.dragBetween){var d=0==t(a.container).outerHeight()?Math.max(1,Math.round(.5+a.getItems().size()*a.draggedItem.outerWidth()/t(a.container).outerWidth()))*a.draggedItem.outerHeight():t(a.container).outerHeight();a.offsetLimit=t(a.container).offset(),a.offsetLimit.right=a.offsetLimit.left+t(a.container).outerWidth()-a.draggedItem.outerWidth(),a.offsetLimit.bottom=a.offsetLimit.top+d-a.draggedItem.outerHeight()}var l=a.draggedItem.height(),s=a.draggedItem.width();if("tr"==r.tagName?(a.draggedItem.children().each(function(){t(this).width(t(this).width())}),a.placeHolderItem=a.draggedItem.clone().attr("data-placeholder",!0),a.draggedItem.after(a.placeHolderItem),a.placeHolderItem.children().each(function(){t(this).css({borderWidth:0,width:t(this).width()+1,height:t(this).height()+1}).html(" ")})):(a.draggedItem.after(r.placeHolderTemplate),a.placeHolderItem=a.draggedItem.next().css({height:l,width:s}).attr("data-placeholder",!0)),"td"==r.tagName){var c=a.draggedItem.closest("table").get(0);t("
").appendTo("body").children().append(a.draggedItem)}var g=a.draggedItem.attr("style");a.draggedItem.attr("data-origstyle",g?g:""),a.draggedItem.css({position:"absolute",opacity:.8,"z-index":999,height:l,width:s}),a.scroll={moveX:0,moveY:0,maxX:t(document).width()-t(window).width(),maxY:t(document).height()-t(window).height()},a.scroll.scrollY=window.setInterval(function(){if(r.scrollContainer!=window)return void t(r.scrollContainer).scrollTop(t(r.scrollContainer).scrollTop()+a.scroll.moveY);var e=t(r.scrollContainer).scrollTop();(a.scroll.moveY>0&&e0)&&(t(r.scrollContainer).scrollTop(e+a.scroll.moveY),a.draggedItem.css("top",a.draggedItem.offset().top+a.scroll.moveY+1))},10),a.scroll.scrollX=window.setInterval(function(){if(r.scrollContainer!=window)return void t(r.scrollContainer).scrollLeft(t(r.scrollContainer).scrollLeft()+a.scroll.moveX);var e=t(r.scrollContainer).scrollLeft();(a.scroll.moveX>0&&e0)&&(t(r.scrollContainer).scrollLeft(e+a.scroll.moveX),a.draggedItem.css("left",a.draggedItem.offset().left+a.scroll.moveX+1))},10),t(o).each(function(t,e){e.createDropTargets(),e.buildPositionTable()}),a.setPos(e.pageX,e.pageY),t(document).bind("mousemove",a.swapItems),t(document).bind("mouseup",a.dropItem),r.scrollContainer!=window&&t(window).bind("wheel",a.wheel)},setPos:function(e,o){var i=o-this.offset.top,n=e-this.offset.left;r.dragBetween||(i=Math.min(this.offsetLimit.bottom,Math.max(i,this.offsetLimit.top)),n=Math.min(this.offsetLimit.right,Math.max(n,this.offsetLimit.left)));var d=this.draggedItem.offsetParent().not("body").offset();if(null!=d&&(i-=d.top,n-=d.left),r.scrollContainer==window)o-=t(window).scrollTop(),e-=t(window).scrollLeft(),o=Math.max(0,o-t(window).height()+5)+Math.min(0,o-5),e=Math.max(0,e-t(window).width()+5)+Math.min(0,e-5);else{var l=t(r.scrollContainer),s=l.offset();o=Math.max(0,o-l.height()-s.top)+Math.min(0,o-s.top),e=Math.max(0,e-l.width()-s.left)+Math.min(0,e-s.left)}a.scroll.moveX=0==e?0:e*r.scrollSpeed/Math.abs(e),a.scroll.moveY=0==o?0:o*r.scrollSpeed/Math.abs(o),this.draggedItem.css({top:i,left:n})},wheel:function(e){if(a&&r.scrollContainer!=window){var o=t(r.scrollContainer),i=o.offset();if(e=e.originalEvent,e.clientX>i.left&&e.clientXi.top&&e.clientY0?n.before(a.draggedItem):0==i[1]?t(o[i[0]].container).prepend(a.draggedItem):t(o[i[0]].container).append(a.draggedItem)}return a.draggedItem.removeAttr("data-origpos"),a.draggedItem=null,t(document).unbind("mousemove",a.swapItems),t(document).unbind("mouseup",a.dropItem),r.scrollContainer!=window&&t(window).unbind("wheel",a.wheel),!1}},swapItems:function(e){if(null==a.draggedItem)return!1;a.setPos(e.pageX,e.pageY);for(var n=a.findPos(e.pageX,e.pageY),d=a,l=0;n==-1&&r.dragBetween&&la.draggedItem.offset().top||i.left>a.draggedItem.offset().left?t(d.pos[n].elm).before(a.placeHolderItem):t(d.pos[n].elm).after(a.placeHolderItem),c.each(function(){var e=s().eq(this.idx).get(0);this!=e&&s().index(this)t&&this.pos[r].tope)return r;return-1},createDropTargets:function(){r.dragBetween&&t(o).each(function(){var e=t(this.container).find("[data-placeholder]"),o=t(this.container).find("[data-droptarget]");e.size()>0&&o.size()>0?o.remove():0==e.size()&&0==o.size()&&("td"==r.tagName?t(r.placeHolderTemplate).attr("data-droptarget",!0).appendTo(this.container):t(this.container).append(a.placeHolderItem.removeAttr("data-placeholder").clone().attr("data-droptarget",!0)),a.placeHolderItem.attr("data-placeholder",!0))})}};d.init(),o.push(d)}),this},t.fn.dragsort.defaults={itemSelector:"",dragSelector:"",dragSelectorExclude:"input, textarea",dragEnd:function(){},dragBetween:!1,placeHolderTemplate:"",scrollContainer:window,scrollSpeed:5}}(jQuery);