if(Object.isUndefined(Effect)){throw ("dragdrop.js requires including script.aculo.us' effects.js library")}var Droppables={drops:[],remove:function(B){this.drops=this.drops.reject(function(A){return A.element==$(B)})},add:function(F){F=$(F);var D=Object.extend({greedy:true,hoverclass:null,tree:false},arguments[1]||{});if(D.containment){D._containers=[];var E=D.containment;if(Object.isArray(E)){E.each(function(A){D._containers.push($(A))})}else{D._containers.push($(E))}}if(D.accept){D.accept=[D.accept].flatten()}Element.makePositioned(F);D.element=F;this.drops.push(D)},findDeepestChild:function(B){deepest=B[0];for(i=1;i<B.length;++i){if(Element.isParent(B[i].element,deepest.element)){deepest=B[i]}}return deepest},isContained:function(F,D){var E;if(D.tree){E=F.treeNode}else{E=F.parentNode}return D._containers.detect(function(A){return E==A})},isAffected:function(F,D,E){return((E.element!=D)&&((!E._containers)||this.isContained(D,E))&&((!E.accept)||(Element.classNames(D).detect(function(A){return E.accept.include(A)
})))&&Position.within(E.element,F[0],F[1]))},deactivate:function(B){if(B.hoverclass){Element.removeClassName(B.element,B.hoverclass)}this.last_active=null},activate:function(B){if(B.hoverclass){Element.addClassName(B.element,B.hoverclass)}this.last_active=B},show:function(E,F){if(!this.drops.length){return }var H,G=[];this.drops.each(function(A){if(Droppables.isAffected(E,F,A)){G.push(A)}});if(G.length>0){H=Droppables.findDeepestChild(G)}if(this.last_active&&this.last_active!=H){this.deactivate(this.last_active)}if(H){Position.within(H.element,E[0],E[1]);if(H.onHover){H.onHover(F,H.element,Position.overlap(H.overlap,H.element))}if(H!=this.last_active){Droppables.activate(H)}}},fire:function(D,C){if(!this.last_active){return }Position.prepare();if(this.isAffected([Event.pointerX(D),Event.pointerY(D)],C,this.last_active)){if(this.last_active.onDrop){this.last_active.onDrop(C,this.last_active.element,D);return true}}},reset:function(){if(this.last_active){this.deactivate(this.last_active)}}};var Draggables={drags:[],observers:[],register:function(B){if(this.drags.length==0){this.eventMouseUp=this.endDrag.bindAsEventListener(this);
this.eventMouseMove=this.updateDrag.bindAsEventListener(this);this.eventKeypress=this.keyPress.bindAsEventListener(this);Event.observe(document,"mouseup",this.eventMouseUp);Event.observe(document,"mousemove",this.eventMouseMove);Event.observe(document,"keypress",this.eventKeypress)}this.drags.push(B)},unregister:function(B){this.drags=this.drags.reject(function(A){return A==B});if(this.drags.length==0){Event.stopObserving(document,"mouseup",this.eventMouseUp);Event.stopObserving(document,"mousemove",this.eventMouseMove);Event.stopObserving(document,"keypress",this.eventKeypress)}},activate:function(B){if(B.options.delay){this._timeout=setTimeout(function(){Draggables._timeout=null;window.focus();Draggables.activeDraggable=B}.bind(this),B.options.delay)}else{window.focus();this.activeDraggable=B}},deactivate:function(){this.activeDraggable=null},updateDrag:function(D){if(!this.activeDraggable){return }var C=[Event.pointerX(D),Event.pointerY(D)];if(this._lastPointer&&(this._lastPointer.inspect()==C.inspect())){return 
}this._lastPointer=C;this.activeDraggable.updateDrag(D,C)},endDrag:function(B){if(this._timeout){clearTimeout(this._timeout);this._timeout=null}if(!this.activeDraggable){return }this._lastPointer=null;this.activeDraggable.endDrag(B);this.activeDraggable=null},keyPress:function(B){if(this.activeDraggable){this.activeDraggable.keyPress(B)}},addObserver:function(B){this.observers.push(B);this._cacheObserverCallbacks()},removeObserver:function(B){this.observers=this.observers.reject(function(A){return A.element==B});this._cacheObserverCallbacks()},notify:function(F,D,E){if(this[F+"Count"]>0){this.observers.each(function(A){if(A[F]){A[F](F,D,E)}})}if(D.options[F]){D.options[F](D,E)}},_cacheObserverCallbacks:function(){["onStart","onEnd","onDrag"].each(function(B){Draggables[B+"Count"]=Draggables.observers.select(function(A){return A[B]}).length})}};var Draggable=Class.create({initialize:function(E){var F={handle:false,reverteffect:function(C,H,A){var B=Math.sqrt(Math.abs(H^2)+Math.abs(A^2))*0.02;new Effect.Move(C,{x:-A,y:-H,duration:B,queue:{scope:"_draggable",position:"end"}})
},endeffect:function(A){var B=Object.isNumber(A._opacity)?A._opacity:1;new Effect.Opacity(A,{duration:0.2,from:0.7,to:B,queue:{scope:"_draggable",position:"end"},afterFinish:function(){Draggable._dragging[A]=false}})},zindex:1000,revert:false,quiet:false,scroll:false,scrollSensitivity:20,scrollSpeed:15,snap:false,delay:0};if(!arguments[1]||Object.isUndefined(arguments[1].endeffect)){Object.extend(F,{starteffect:function(A){A._opacity=Element.getOpacity(A);Draggable._dragging[A]=true;new Effect.Opacity(A,{duration:0.2,from:A._opacity,to:0.7})}})}var D=Object.extend(F,arguments[1]||{});this.element=$(E);if(D.handle&&Object.isString(D.handle)){this.handle=this.element.down("."+D.handle,0)}if(!this.handle){this.handle=$(D.handle)}if(!this.handle){this.handle=this.element}if(D.scroll&&!D.scroll.scrollTo&&!D.scroll.outerHTML){D.scroll=$(D.scroll);this._isScrollChild=Element.childOf(this.element,D.scroll)}Element.makePositioned(this.element);this.options=D;this.dragging=false;this.eventMouseDown=this.initDrag.bindAsEventListener(this);
Event.observe(this.handle,"mousedown",this.eventMouseDown);Draggables.register(this)},destroy:function(){Event.stopObserving(this.handle,"mousedown",this.eventMouseDown);Draggables.unregister(this)},currentDelta:function(){return([parseInt(Element.getStyle(this.element,"left")||"0"),parseInt(Element.getStyle(this.element,"top")||"0")])},initDrag:function(H){if(!Object.isUndefined(Draggable._dragging[this.element])&&Draggable._dragging[this.element]){return }if(Event.isLeftClick(H)){var E=Event.element(H);if((tag_name=E.tagName.toUpperCase())&&(tag_name=="INPUT"||tag_name=="SELECT"||tag_name=="OPTION"||tag_name=="BUTTON"||tag_name=="TEXTAREA")){return }var F=[Event.pointerX(H),Event.pointerY(H)];var G=Position.cumulativeOffset(this.element);this.offset=[0,1].map(function(A){return(F[A]-G[A])});Draggables.activate(this);Event.stop(H)}},startDrag:function(D){this.dragging=true;if(!this.delta){this.delta=this.currentDelta()}if(this.options.zindex){this.originalZ=parseInt(Element.getStyle(this.element,"z-index")||0);
this.element.style.zIndex=this.options.zindex}if(this.options.ghosting){this._clone=this.element.cloneNode(true);this._originallyAbsolute=(this.element.getStyle("position")=="absolute");if(!this._originallyAbsolute){Position.absolutize(this.element)}this.element.parentNode.insertBefore(this._clone,this.element)}if(this.options.scroll){if(this.options.scroll==window){var C=this._getWindowScroll(this.options.scroll);this.originalScrollLeft=C.left;this.originalScrollTop=C.top}else{this.originalScrollLeft=this.options.scroll.scrollLeft;this.originalScrollTop=this.options.scroll.scrollTop}}Draggables.notify("onStart",this,D);if(this.options.starteffect){this.options.starteffect(this.element)}},updateDrag:function(a,b){if(!this.dragging){this.startDrag(a)}if(!this.options.quiet){Position.prepare();Droppables.show(b,this.element)}Draggables.notify("onDrag",this,a);this.draw(b);if(this.options.change){this.options.change(this)}if(this.options.scroll){this.stopScrolling();var p;if(this.options.scroll==window){with(this._getWindowScroll(this.options.scroll)){p=[left,top,left+width,top+height]
}}else{p=Position.page(this.options.scroll);p[0]+=this.options.scroll.scrollLeft+Position.deltaX;p[1]+=this.options.scroll.scrollTop+Position.deltaY;p.push(p[0]+this.options.scroll.offsetWidth);p.push(p[1]+this.options.scroll.offsetHeight)}var c=[0,0];if(b[0]<(p[0]+this.options.scrollSensitivity)){c[0]=b[0]-(p[0]+this.options.scrollSensitivity)}if(b[1]<(p[1]+this.options.scrollSensitivity)){c[1]=b[1]-(p[1]+this.options.scrollSensitivity)}if(b[0]>(p[2]-this.options.scrollSensitivity)){c[0]=b[0]-(p[2]-this.options.scrollSensitivity)}if(b[1]>(p[3]-this.options.scrollSensitivity)){c[1]=b[1]-(p[3]-this.options.scrollSensitivity)}this.startScrolling(c)}if(Prototype.Browser.WebKit){window.scrollBy(0,0)}Event.stop(a)},finishDrag:function(L,G){this.dragging=false;if(this.options.quiet){Position.prepare();var H=[Event.pointerX(L),Event.pointerY(L)];Droppables.show(H,this.element)}if(this.options.ghosting){if(!this._originallyAbsolute){Position.relativize(this.element)}delete this._originallyAbsolute;Element.remove(this._clone);
this._clone=null}var J=false;if(G){J=Droppables.fire(L,this.element);if(!J){J=false}}if(J&&this.options.onDropped){this.options.onDropped(this.element)}Draggables.notify("onEnd",this,L);var K=this.options.revert;if(K&&Object.isFunction(K)){K=K(this.element)}var I=this.currentDelta();if(K&&this.options.reverteffect){if(J==0||K!="failure"){this.options.reverteffect(this.element,I[1]-this.delta[1],I[0]-this.delta[0])}}else{this.delta=I}if(this.options.zindex){this.element.style.zIndex=this.originalZ}if(this.options.endeffect){this.options.endeffect(this.element)}Draggables.deactivate(this);Droppables.reset()},keyPress:function(B){if(B.keyCode!=Event.KEY_ESC){return }this.finishDrag(B,false);Event.stop(B)},endDrag:function(B){if(!this.dragging){return }this.stopScrolling();this.finishDrag(B,true);Event.stop(B)},draw:function(L){var G=Position.cumulativeOffset(this.element);if(this.options.ghosting){var K=Position.realOffset(this.element);G[0]+=K[0]-Position.deltaX;G[1]+=K[1]-Position.deltaY}var I=this.currentDelta();
G[0]-=I[0];G[1]-=I[1];if(this.options.scroll&&(this.options.scroll!=window&&this._isScrollChild)){G[0]-=this.options.scroll.scrollLeft-this.originalScrollLeft;G[1]-=this.options.scroll.scrollTop-this.originalScrollTop}var J=[0,1].map(function(A){return(L[A]-G[A]-this.offset[A])}.bind(this));if(this.options.snap){if(Object.isFunction(this.options.snap)){J=this.options.snap(J[0],J[1],this)}else{if(Object.isArray(this.options.snap)){J=J.map(function(B,A){return(B/this.options.snap[A]).round()*this.options.snap[A]}.bind(this))}else{J=J.map(function(A){return(A/this.options.snap).round()*this.options.snap}.bind(this))}}}var H=this.element.style;if((!this.options.constraint)||(this.options.constraint=="horizontal")){H.left=J[0]+"px"}if((!this.options.constraint)||(this.options.constraint=="vertical")){H.top=J[1]+"px"}if(H.visibility=="hidden"){H.visibility=""}},stopScrolling:function(){if(this.scrollInterval){clearInterval(this.scrollInterval);this.scrollInterval=null;Draggables._lastScrollPointer=null}},startScrolling:function(B){if(!(B[0]||B[1])){return 
}this.scrollSpeed=[B[0]*this.options.scrollSpeed,B[1]*this.options.scrollSpeed];this.lastScrolled=new Date();this.scrollInterval=setInterval(this.scroll.bind(this),10)},scroll:function(){var a=new Date();var b=a-this.lastScrolled;this.lastScrolled=a;if(this.options.scroll==window){with(this._getWindowScroll(this.options.scroll)){if(this.scrollSpeed[0]||this.scrollSpeed[1]){var d=b/1000;this.options.scroll.scrollTo(left+d*this.scrollSpeed[0],top+d*this.scrollSpeed[1])}}}else{this.options.scroll.scrollLeft+=this.scrollSpeed[0]*b/1000;this.options.scroll.scrollTop+=this.scrollSpeed[1]*b/1000}Position.prepare();Droppables.show(Draggables._lastPointer,this.element);Draggables.notify("onDrag",this);if(this._isScrollChild){Draggables._lastScrollPointer=Draggables._lastScrollPointer||$A(Draggables._lastPointer);Draggables._lastScrollPointer[0]+=this.scrollSpeed[0]*b/1000;Draggables._lastScrollPointer[1]+=this.scrollSpeed[1]*b/1000;if(Draggables._lastScrollPointer[0]<0){Draggables._lastScrollPointer[0]=0}if(Draggables._lastScrollPointer[1]<0){Draggables._lastScrollPointer[1]=0
}this.draw(Draggables._lastScrollPointer)}if(this.options.change){this.options.change(this)}},_getWindowScroll:function(w){var T,L,W,H;with(w.document){if(w.document.documentElement&&documentElement.scrollTop){T=documentElement.scrollTop;L=documentElement.scrollLeft}else{if(w.document.body){T=body.scrollTop;L=body.scrollLeft}}if(w.innerWidth){W=w.innerWidth;H=w.innerHeight}else{if(w.document.documentElement&&documentElement.clientWidth){W=documentElement.clientWidth;H=documentElement.clientHeight}else{W=body.offsetWidth;H=body.offsetHeight}}}return{top:T,left:L,width:W,height:H}}});Draggable._dragging={};var SortableObserver=Class.create({initialize:function(D,C){this.element=$(D);this.observer=C;this.lastValue=Sortable.serialize(this.element)},onStart:function(){this.lastValue=Sortable.serialize(this.element)},onEnd:function(){Sortable.unmark();if(this.lastValue!=Sortable.serialize(this.element)){this.observer(this.element)}}});var Sortable={SERIALIZE_RULE:/^[^_\-](?:[A-Za-z0-9\-\_]*)[_](.*)$/,sortables:{},_findRootElement:function(B){while(B.tagName.toUpperCase()!="BODY"){if(B.id&&Sortable.sortables[B.id]){return B
}B=B.parentNode}},options:function(B){B=Sortable._findRootElement($(B));if(!B){return }return Sortable.sortables[B.id]},destroy:function(C){var D=Sortable.options(C);if(D){Draggables.removeObserver(D.element);D.droppables.each(function(A){Droppables.remove(A)});D.draggables.invoke("destroy");delete Sortable.sortables[D.element.id]}},create:function(F){F=$(F);var G=Object.extend({element:F,tag:"li",dropOnEmpty:false,tree:false,treeTag:"ul",overlap:"vertical",constraint:"vertical",containment:F,handle:false,only:false,delay:0,hoverclass:null,ghosting:false,quiet:false,scroll:false,scrollSensitivity:20,scrollSpeed:15,format:this.SERIALIZE_RULE,elements:false,handles:false,onChange:Prototype.emptyFunction,onUpdate:Prototype.emptyFunction},arguments[1]||{});this.destroy(F);var H={revert:true,quiet:G.quiet,scroll:G.scroll,scrollSpeed:G.scrollSpeed,scrollSensitivity:G.scrollSensitivity,delay:G.delay,ghosting:G.ghosting,constraint:G.constraint,handle:G.handle};if(G.starteffect){H.starteffect=G.starteffect}if(G.reverteffect){H.reverteffect=G.reverteffect
}else{if(G.ghosting){H.reverteffect=function(A){A.style.top=0;A.style.left=0}}}if(G.endeffect){H.endeffect=G.endeffect}if(G.zindex){H.zindex=G.zindex}var I={overlap:G.overlap,containment:G.containment,tree:G.tree,hoverclass:G.hoverclass,onHover:Sortable.onHover};var J={onHover:Sortable.onEmptyHover,overlap:G.overlap,containment:G.containment,hoverclass:G.hoverclass};Element.cleanWhitespace(F);G.draggables=[];G.droppables=[];if(G.dropOnEmpty||G.tree){Droppables.add(F,J);G.droppables.push(F)}(G.elements||this.findElements(F,G)||[]).each(function(A,B){var C=G.handles?$(G.handles[B]):(G.handle?$(A).select("."+G.handle)[0]:A);G.draggables.push(new Draggable(A,Object.extend(H,{handle:C})));Droppables.add(A,I);if(G.tree){A.treeNode=F}G.droppables.push(A)});if(G.tree){(Sortable.findTreeElements(F,G)||[]).each(function(A){Droppables.add(A,J);A.treeNode=F;G.droppables.push(A)})}this.sortables[F.id]=G;Draggables.addObserver(new SortableObserver(F,G.onUpdate))},findElements:function(D,C){return Element.findChildren(D,C.only,C.tree?true:false,C.tag)
},findTreeElements:function(D,C){return Element.findChildren(D,C.only,C.tree?true:false,C.treeTag)},onHover:function(J,F,G){if(Element.isParent(F,J)){return }if(G>0.33&&G<0.66&&Sortable.options(F).tree){return }else{if(G>0.5){Sortable.mark(F,"before");if(F.previousSibling!=J){var H=J.parentNode;J.style.visibility="hidden";F.parentNode.insertBefore(J,F);if(F.parentNode!=H){Sortable.options(H).onChange(J)}Sortable.options(F.parentNode).onChange(J)}}else{Sortable.mark(F,"after");var I=F.nextSibling||null;if(I!=J){var H=J.parentNode;J.style.visibility="hidden";F.parentNode.insertBefore(J,I);if(F.parentNode!=H){Sortable.options(H).onChange(J)}Sortable.options(F.parentNode).onChange(J)}}}},onEmptyHover:function(N,O,P){var Q=N.parentNode;var R=Sortable.options(O);if(!Element.isParent(O,N)){var J;var K=Sortable.findElements(O,{tag:R.tag,only:R.only});var L=null;if(K){var M=Element.offsetSize(O,R.overlap)*(1-P);for(J=0;J<K.length;J+=1){if(M-Element.offsetSize(K[J],R.overlap)>=0){M-=Element.offsetSize(K[J],R.overlap)}else{if(M-(Element.offsetSize(K[J],R.overlap)/2)>=0){L=J+1<K.length?K[J+1]:null;
break}else{L=K[J];break}}}}O.insertBefore(N,L);Sortable.options(Q).onChange(N);R.onChange(N)}},unmark:function(){if(Sortable._marker){Sortable._marker.hide()}},mark:function(H,E){var F=Sortable.options(H.parentNode);if(F&&!F.ghosting){return }if(!Sortable._marker){Sortable._marker=($("dropmarker")||Element.extend(document.createElement("DIV"))).hide().addClassName("dropmarker").setStyle({position:"absolute"});document.getElementsByTagName("body").item(0).appendChild(Sortable._marker)}var G=Position.cumulativeOffset(H);Sortable._marker.setStyle({left:G[0]+"px",top:G[1]+"px"});if(E=="after"){if(F.overlap=="horizontal"){Sortable._marker.setStyle({left:(G[0]+H.clientWidth)+"px"})}else{Sortable._marker.setStyle({top:(G[1]+H.clientHeight)+"px"})}}Sortable._marker.show()},_tree:function(N,H,I){var J=Sortable.findElements(N,H)||[];for(var M=0;M<J.length;++M){var K=J[M].id.match(H.format);if(!K){continue}var L={id:encodeURIComponent(K?K[1]:null),element:N,parent:I,children:[],position:I.children.length,container:$(J[M]).down(H.treeTag)};
if(L.container){this._tree(L.container,H,L)}I.children.push(L)}return I},tree:function(H){H=$(H);var E=this.options(H);var F=Object.extend({tag:E.tag,treeTag:E.treeTag,only:E.only,name:H.id,format:E.format},arguments[1]||{});var G={id:null,parent:null,children:[],container:H,position:0};return Sortable._tree(H,F,G)},_constructIndex:function(D){var C="";do{if(D.id){C="["+D.position+"]"+C}}while((D=D.parent)!=null);return C},sequence:function(C){C=$(C);var D=Object.extend(this.options(C),arguments[1]||{});return $(this.findElements(C,D)||[]).map(function(A){return A.id.match(D.format)?A.id.match(D.format)[1]:""})},setSequence:function(E,F){E=$(E);var G=Object.extend(this.options(E),arguments[2]||{});var H={};this.findElements(E,G).each(function(A){if(A.id.match(G.format)){H[A.id.match(G.format)[1]]=[A,A.parentNode]}A.parentNode.removeChild(A)});F.each(function(B){var A=H[B];if(A){A[1].appendChild(A[0]);delete H[B]}})},serialize:function(D){D=$(D);var E=Object.extend(Sortable.options(D),arguments[1]||{});var F=encodeURIComponent((arguments[1]&&arguments[1].name)?arguments[1].name:D.id);
if(E.tree){return Sortable.tree(D,arguments[1]).children.map(function(A){return[F+Sortable._constructIndex(A)+"[id]="+encodeURIComponent(A.id)].concat(A.children.map(arguments.callee))}).flatten().join("&")}else{return Sortable.sequence(D,arguments[1]).map(function(A){return F+"[]="+encodeURIComponent(A)}).join("&")}}};Element.isParent=function(D,C){if(!D.parentNode||D==C){return false}if(D.parentNode==C){return true}return Element.isParent(D.parentNode,C)};Element.findChildren=function(F,G,H,I){if(!F.hasChildNodes()){return null}I=I.toUpperCase();if(G){G=[G].flatten()}var J=[];$A(F.childNodes).each(function(A){if(A.tagName&&A.tagName.toUpperCase()==I&&(!G||(Element.classNames(A).detect(function(C){return G.include(C)})))){J.push(A)}if(H){var B=Element.findChildren(A,G,H,I);if(B){J.push(B)}}});return(J.length>0?J.flatten():[])};Element.offsetSize=function(D,C){return D["offset"+((C=="vertical"||C=="height")?"Height":"Width")]};