(function(a){a.fn.dragsort=function(c){if(c=="destroy"){a(this.selector).trigger("dragsort-uninit");return}var d=a.extend({},a.fn.dragsort.defaults,c);var b=[];var f=null,e=null;this.each(function(h,g){if(a(g).is("table")&&a(g).children().size()==1&&a(g).children().is("tbody")){g=a(g).children().get(0)}var j={draggedItem:null,placeHolderItem:null,pos:null,offset:null,offsetLimit:null,scroll:null,container:g,init:function(){var i=a(this.container).children().size()==0?"li":a(this.container).children(":first").get(0).tagName.toLowerCase();if(d.itemSelector==""){d.itemSelector=i}if(d.dragSelector==""){d.dragSelector=i}if(d.placeHolderTemplate==""){d.placeHolderTemplate="<"+i+"> "+i+">"}a(this.container).attr("data-listidx",h).mousedown(this.grabItem).bind("dragsort-uninit",this.uninit);this.styleDragHandlers(true)},uninit:function(){var i=b[a(this).attr("data-listidx")];a(i.container).unbind("mousedown",i.grabItem).unbind("dragsort-uninit");i.styleDragHandlers(false)},getItems:function(){return a(this.container).children(d.itemSelector)},styleDragHandlers:function(i){this.getItems().map(function(){return a(this).is(d.dragSelector)?this:a(this).find(d.dragSelector).get()}).css("cursor",i?"pointer":"")},grabItem:function(n){if(n.which!=1||a(n.target).is(d.dragSelectorExclude)||a(n.target).closest(d.dragSelectorExclude).size()>0||a(n.target).closest(d.itemSelector).size()==0){return}n.preventDefault();var i=n.target;while(!a(i).is(d.dragSelector)){if(i==this){return}i=i.parentNode}a(i).attr("data-cursor",a(i).css("cursor"));a(i).css("cursor","move");var m=b[a(this).attr("data-listidx")];var l=this;var k=function(){m.dragStart.call(l,n);a(m.container).unbind("mousemove",k)};a(m.container).mousemove(k).mouseup(function(){a(m.container).unbind("mousemove",k);a(i).css("cursor",a(i).attr("data-cursor"))})},dragStart:function(o){if(f!=null&&f.draggedItem!=null){f.dropItem()}f=b[a(this).attr("data-listidx")];f.draggedItem=a(o.target).closest(d.itemSelector);f.draggedItem.attr("data-origpos",a(this).attr("data-listidx")+"-"+f.getItems().index(f.draggedItem));var i=parseInt(f.draggedItem.css("marginTop"));var l=parseInt(f.draggedItem.css("marginLeft"));f.offset=f.draggedItem.offset();f.offset.top=o.pageY-f.offset.top+(isNaN(i)?0:i)-1;f.offset.left=o.pageX-f.offset.left+(isNaN(l)?0:l)-1;if(!d.dragBetween){var t=a(f.container).outerHeight()==0?Math.max(1,Math.round(0.5+f.getItems().size()*f.draggedItem.outerWidth()/a(f.container).outerWidth()))*f.draggedItem.outerHeight():a(f.container).outerHeight();f.offsetLimit=a(f.container).offset();f.offsetLimit.right=f.offsetLimit.left+a(f.container).outerWidth()-f.draggedItem.outerWidth();f.offsetLimit.bottom=f.offsetLimit.top+t-f.draggedItem.outerHeight()}var m=f.draggedItem.outerHeight();var s=f.draggedItem.outerWidth();if(d.itemSelector=="tr"){f.draggedItem.children().each(function(){a(this).width(a(this).width())});f.placeHolderItem=f.draggedItem.clone().attr("data-placeholder",true);f.draggedItem.after(f.placeHolderItem);f.placeHolderItem.children().each(function(){a(this).css({borderWidth:0,width:a(this).width()+1,height:a(this).height()+1}).html(" ")})}else{f.draggedItem.after(d.placeHolderTemplate);f.placeHolderItem=f.draggedItem.next().attr("data-placeholder",true)}if(d.itemSelector=="td"){var p=f.draggedItem.closest("table").get(0);a("
").appendTo("body").children().append(f.draggedItem)}if(a(f.container).hasClass("buttons")){var r=f.draggedItem.parent().parent();var k=a(""+f.draggedItem.html()+"");f.draggedItem=k;f.draggedItem.find(".close").show();f.draggedItem.appendTo(r)}var q=f.draggedItem.attr("style");f.draggedItem.attr("data-origstyle",q?q:"");f.draggedItem.css({position:"absolute",opacity:0.8,"z-index":999,height:m,width:s});f.scroll={moveX:0,moveY:0,maxX:a(document).width()-a(window).width(),maxY:a(document).height()-a(window).height()};f.scroll.scrollY=window.setInterval(function(){if(d.scrollContainer!=window){a(d.scrollContainer).scrollTop(a(d.scrollContainer).scrollTop()+f.scroll.moveY);return}var n=a(d.scrollContainer).scrollTop();if(f.scroll.moveY>0&&n0){a(d.scrollContainer).scrollTop(n+f.scroll.moveY);f.draggedItem.css("top",f.draggedItem.offset().top+f.scroll.moveY+1)}},10);f.scroll.scrollX=window.setInterval(function(){if(d.scrollContainer!=window){a(d.scrollContainer).scrollLeft(a(d.scrollContainer).scrollLeft()+f.scroll.moveX);return}var n=a(d.scrollContainer).scrollLeft();if(f.scroll.moveX>0&&n0){a(d.scrollContainer).scrollLeft(n+f.scroll.moveX);f.draggedItem.css("left",f.draggedItem.offset().left+f.scroll.moveX+1)}},10);a(b).each(function(u,n){n.createDropTargets();n.buildPositionTable()});f.setPos(o.pageX,o.pageY);a(document).bind("mousemove",f.swapItems);a(document).bind("mouseup",f.dropItem);if(d.scrollContainer!=window){a(window).bind("DOMMouseScroll mousewheel",f.wheel)}},setPos:function(k,o){var m=o-this.offset.top;var l=k-this.offset.left;if(!a(this.draggedItem).find(".close").hasClass("hide")){m+=a(d.scrollContainer).scrollTop()}if(!d.dragBetween){m=Math.min(this.offsetLimit.bottom,Math.max(m,this.offsetLimit.top));l=Math.min(this.offsetLimit.right,Math.max(l,this.offsetLimit.left))}this.draggedItem.parents().each(function(){if(a(this).css("position")!="static"&&(!a.browser.mozilla||a(this).css("display")!="table")){var p=a(this).offset();m-=p.top;l-=p.left;return false}});if(d.scrollContainer==window){o-=a(window).scrollTop();k-=a(window).scrollLeft();o=Math.max(0,o-a(window).height()+5)+Math.min(0,o-5);k=Math.max(0,k-a(window).width()+5)+Math.min(0,k-5)}else{var i=a(d.scrollContainer);var n=i.offset();o=Math.max(0,o-i.height()-n.top)+Math.min(0,o-n.top);k=Math.max(0,k-i.width()-n.left)+Math.min(0,k-n.left)}f.scroll.moveX=k==0?0:k*d.scrollSpeed/Math.abs(k);f.scroll.moveY=o==0?0:o*d.scrollSpeed/Math.abs(o);this.draggedItem.css({top:m,left:l})},wheel:function(k){if((a.browser.safari||a.browser.mozilla)&&f&&d.scrollContainer!=window){var i=a(d.scrollContainer);var l=i.offset();if(k.pageX>l.left&&k.pageXl.top&&k.pageYf.draggedItem.offset().top||e.left>f.draggedItem.offset().left){a(n.pos[o].elm).before(f.placeHolderItem)}else{a(n.pos[o].elm).after(f.placeHolderItem)}m.each(function(){var i=k().eq(this.idx).get(0);if(this!=i&&k().index(this)k&&this.pos[l].topm){return l}}return -1},createDropTargets:function(){if(!d.dragBetween){return}a(b).each(function(){var l=a(this.container).find("[data-placeholder]");var i=a(this.container).find("[data-droptarget]");if(l.size()>0&&i.size()>0){i.remove()}else{if(l.size()==0&&i.size()==0){if(d.itemSelector=="td"){a(d.placeHolderTemplate).attr("data-droptarget",true).appendTo(this.container)}else{var k=f.placeHolderItem.removeAttr("data-placeholder").clone()}if(a(this.container).children().length==0){k.css({height:40})}a(this.container).append(k.attr("data-droptarget",true));f.placeHolderItem.attr("data-placeholder",true)}}})}};j.init();b.push(j)});return this};a.fn.dragsort.defaults={itemSelector:"",dragSelector:"",dragSelectorExclude:"input, textarea",dragEnd:function(){},dragBetween:false,placeHolderTemplate:"",scrollContainer:window,scrollSpeed:5}})(jQuery);