/*
	jQuery List DragSort v0.3.7
	Website: http://dragsort.codeplex.com/
	License: http://dragsort.codeplex.com/license
*/
(function(a){a.fn.dragsort=function(c){var d=a.extend({},a.fn.dragsort.defaults,c);var b=new Array();var f=null,e=null;this.each(function(h,g){var j={draggedItem:null,placeHolderItem:null,pos:null,offset:null,offsetLimit:null,container:g,init:function(){a(this.container).attr("listIdx",h).find(d.dragSelector).css("cursor","pointer").mousedown(this.grabItem)},grabItem:function(k){if(k.button==2){return}if(f!=null&&f.draggedItem!=null){f.dropItem()}a(this).css("cursor","move");f=b[a(this).parents("*[listIdx]").attr("listIdx")];f.draggedItem=a(this).is(d.itemSelector)?a(this):a(this).parents(d.itemSelector);f.offset=f.draggedItem.offset();f.offset.top=k.pageY-f.offset.top;f.offset.left=k.pageX-f.offset.left;var i=a(f.container).outerHeight()==0?Math.max(1,Math.round(0.5+a(f.container).find(d.itemSelector).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+i-f.draggedItem.outerHeight();f.placeHolderItem=f.draggedItem.clone().html(d.placeHolderTemplate).addClass(d.placeHolderClass).css("height",f.draggedItem.height()).attr("placeHolder",true);f.draggedItem.after(f.placeHolderItem);f.draggedItem.css({position:"absolute",opacity:0.8});a(b).each(function(n,m){m.ensureNotEmpty();m.buildPositionTable()});f.setPos(k.pageX,k.pageY);a(document).bind("selectstart",f.stopBubble);a(document).bind("mousemove",f.swapItems);a(document).bind("mouseup",f.dropItem);return false},setPos:function(i,m){var l=m-this.offset.top;var k=i-this.offset.left;if(!d.dragBetween){l=Math.min(this.offsetLimit.bottom,Math.max(l,this.offsetLimit.top));k=Math.min(this.offsetLimit.right,Math.max(k,this.offsetLimit.left))}this.draggedItem.parents().each(function(){if(a(this).css("position")!="static"&&(!a.browser.mozilla||a(this).css("display")!="table")){var n=a(this).offset();l-=n.top;k-=n.left;return false}});this.draggedItem.css({top:l,left:k})},buildPositionTable:function(){var i=this.draggedItem==null?null:this.draggedItem.get(0);var k=new Array();a(this.container).find(d.itemSelector).each(function(l,n){if(n!=i){var m=a(n).offset();m.right=m.left+a(n).width();m.bottom=m.top+a(n).height();m.elm=n;k.push(m)}});this.pos=k},dropItem:function(){if(f.draggedItem==null){return}a(f.container).find(d.dragSelector).css("cursor","pointer");f.placeHolderItem.before(f.draggedItem);f.draggedItem.css({position:"",top:"",left:"",opacity:""});f.placeHolderItem.remove();a("*[emptyPlaceHolder]").remove();d.dragEnd.apply(f.draggedItem);f.draggedItem=null;a(document).unbind("selectstart",f.stopBubble);a(document).unbind("mousemove",f.swapItems);a(document).unbind("mouseup",f.dropItem);return false},stopBubble:function(){return false},swapItems:function(n){if(f.draggedItem==null){return false}f.setPos(n.pageX,n.pageY);var m=f.findPos(n.pageX,n.pageY);var l=f;for(var k=0;m==-1&&d.dragBetween&&k<b.length;k++){m=b[k].findPos(n.pageX,n.pageY);l=b[k]}if(m==-1||a(l.pos[m].elm).attr("placeHolder")){return false}if(e==null||e.top>f.draggedItem.offset().top||e.left>f.draggedItem.offset().left){a(l.pos[m].elm).before(f.placeHolderItem)}else{a(l.pos[m].elm).after(f.placeHolderItem)}a(b).each(function(p,o){o.ensureNotEmpty();o.buildPositionTable()});e=f.draggedItem.offset();return false},findPos:function(k,m){for(var l=0;l<this.pos.length;l++){if(this.pos[l].left<k&&this.pos[l].right>k&&this.pos[l].top<m&&this.pos[l].bottom>m){return l}}return -1},ensureNotEmpty:function(){if(!d.dragBetween){return}var i=this.draggedItem==null?null:this.draggedItem.get(0);var l=null,k=true;a(this.container).find(d.itemSelector).each(function(m,n){if(a(n).attr("emptyPlaceHolder")){l=n}else{if(n!=i){k=false}}});if(k&&l==null){a(this.container).append(f.placeHolderItem.clone().removeAttr("placeHolder").attr("emptyPlaceHolder",true))}else{if(!k&&l!=null){a(l).remove()}}}};j.init();b.push(j)});return this};a.fn.dragsort.defaults={itemSelector:"li",dragSelector:"li",dragEnd:function(){},dragBetween:false,placeHolderClass:"placeHolder",placeHolderTemplate:"&nbsp;"}})(jQuery);
