/*
	jQuery List DragSort v0.3
	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 I={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 J=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+J-F.draggedItem.outerHeight();F.placeHolderItem=F.draggedItem.clone().html("&nbsp;").css({visibility:"hidden",height:F.draggedItem.height()}).attr("placeHolder",true);F.draggedItem.after(F.placeHolderItem);F.draggedItem.css({position:"absolute",opacity:0.8});A(B).each(function(M,L){L.ensureNotEmpty();L.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(J,M){var L=M-this.offset.top;var K=J-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.css({top:L,left:K})},buildPositionTable:function(){var J=this.draggedItem==null?null:this.draggedItem.get(0);var K=new Array();A(this.container).find(D.itemSelector).each(function(L,N){if(N!=J){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(M){if(F.draggedItem==null){return false}F.setPos(M.pageX,M.pageY);var L=F.findPos(M.pageX,M.pageY);var K=F;for(var J=0;L==-1&&D.dragBetween&&J<B.length;J++){L=B[J].findPos(M.pageX,M.pageY);K=B[J]}if(L==-1||A(K.pos[L].elm).attr("placeHolder")){return false}if(E==null||E.top>F.draggedItem.offset().top||E.left>F.draggedItem.offset().left){A(K.pos[L].elm).before(F.placeHolderItem)}else{A(K.pos[L].elm).after(F.placeHolderItem)}A(B).each(function(O,N){N.ensureNotEmpty();N.buildPositionTable()});E=F.draggedItem.offset();return false},findPos:function(J,L){for(var K=0;K<this.pos.length;K++){if(this.pos[K].left<J&&this.pos[K].right>J&&this.pos[K].top<L&&this.pos[K].bottom>L){return K}}return -1},ensureNotEmpty:function(){if(!D.dragBetween){return }var J=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!=J){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()}}}};I.init();B.push(I)});return this};A.fn.dragsort.defaults={itemSelector:"li",dragSelector:"li",dragEnd:function(){},dragBetween:false}})(jQuery);

