var Droppables={drops:[],remove:function(A){this.drops=this.drops.reject(function(B){return B.element==A})},add:function(B){B=$(B);var A=Object.extend({greedy:true,hoverclass:null},arguments[1]||{});if(A.containment){A._containers=[];var C=A.containment;if((typeof C=="object")&&(C.constructor==Array)){C.each(function(D){A._containers.push($(D))})}else{A._containers.push($(C))}}Element.makePositioned(B);A.element=B;this.drops.push(A)},isContained:function(C,B){var A=C.parentNode;return B._containers.detect(function(D){return A==D})},isAffected:function(C,B,D,A){return((A.element!=D)&&((!A._containers)||this.isContained(D,A))&&((!A.accept)||(Element.Class.has_any(D,A.accept)))&&Position.within(A.element,C,B))},deactivate:function(A){if(A.hoverclass){Element.Class.remove(A.element,A.hoverclass)}this.last_active=null},activate:function(A){if(this.last_active){this.deactivate(this.last_active)}if(A.hoverclass){Element.Class.add(A.element,A.hoverclass)}this.last_active=A},show:function(F,E){if(!this.drops.length){return }var C=Event.pointerX(F);var B=Event.pointerY(F);Position.prepare();var D=this.drops.length-1;do{var A=this.drops[D];if(this.isAffected(C,B,E,A)){if(A.onHover){A.onHover(E,A.element,Position.overlap(A.overlap,A.element))}if(A.greedy){this.activate(A);return }}}while(D--);if(this.last_active){this.deactivate(this.last_active)}},fire:function(B,A){if(!this.last_active){return }Position.prepare();if(this.isAffected(Event.pointerX(B),Event.pointerY(B),A,this.last_active)){if(this.last_active.onDrop){this.last_active.onDrop(A,this.last_active.element,B)}}},reset:function(){if(this.last_active){this.deactivate(this.last_active)}}};var Draggables={observers:[],addObserver:function(A){this.observers.push(A)},removeObserver:function(A){this.observers=this.observers.reject(function(B){return B.element==A})},notify:function(B,A){this.observers.invoke(B,A)}};var Draggable=Class.create();Draggable.prototype={initialize:function(B){var A=Object.extend({handle:false,starteffect:function(C){new Effect.Opacity(C,{duration:0.2,from:1,to:0.7})},reverteffect:function(E,D,C){var F=Math.sqrt(Math.abs(D^2)+Math.abs(C^2))*0.02;new Effect.MoveBy(E,-D,-C,{duration:F})},endeffect:function(C){new Effect.Opacity(C,{duration:0.2,from:0.7,to:1})},zindex:1000,revert:false},arguments[1]||{});this.element=$(B);if(A.handle&&(typeof A.handle=="string")){this.handle=Element.Class.childrenWith(this.element,A.handle)[0]}if(!this.handle){this.handle=$(A.handle)}if(!this.handle){this.handle=this.element}Element.makePositioned(this.element);this.offsetX=0;this.offsetY=0;this.originalLeft=this.currentLeft();this.originalTop=this.currentTop();this.originalX=this.element.offsetLeft;this.originalY=this.element.offsetTop;this.options=A;this.active=false;this.dragging=false;this.eventMouseDown=this.startDrag.bindAsEventListener(this);this.eventMouseUp=this.endDrag.bindAsEventListener(this);this.eventMouseMove=this.update.bindAsEventListener(this);this.eventKeypress=this.keyPress.bindAsEventListener(this);this.registerEvents()},destroy:function(){Event.stopObserving(this.handle,"mousedown",this.eventMouseDown);this.unregisterEvents()},registerEvents:function(){Event.observe(document,"mouseup",this.eventMouseUp);Event.observe(document,"mousemove",this.eventMouseMove);Event.observe(document,"keypress",this.eventKeypress);Event.observe(this.handle,"mousedown",this.eventMouseDown)},unregisterEvents:function(){},currentLeft:function(){return parseInt(this.element.style.left||"0")},currentTop:function(){return parseInt(this.element.style.top||"0")},startDrag:function(B){if(Event.isLeftClick(B)){var D=Event.element(B);if(D.tagName&&(D.tagName=="INPUT"||D.tagName=="SELECT"||D.tagName=="BUTTON"||D.tagName=="TEXTAREA")){return }this.active=true;var C=[Event.pointerX(B),Event.pointerY(B)];var A=Position.cumulativeOffset(this.element);this.offsetX=(C[0]-A[0]);this.offsetY=(C[1]-A[1]);Event.stop(B)}},finishDrag:function(B,C){this.active=false;this.dragging=false;if(this.options.ghosting){Position.relativize(this.element);Element.remove(this._clone);this._clone=null}if(C){Droppables.fire(B,this.element)}Draggables.notify("onEnd",this);var A=this.options.revert;if(A&&typeof A=="function"){A=A(this.element)}if(A&&this.options.reverteffect){this.options.reverteffect(this.element,this.currentTop()-this.originalTop,this.currentLeft()-this.originalLeft)}else{this.originalLeft=this.currentLeft();this.originalTop=this.currentTop()}if(this.options.zindex){this.element.style.zIndex=this.originalZ}if(this.options.endeffect){this.options.endeffect(this.element)}Droppables.reset()},keyPress:function(A){if(this.active){if(A.keyCode==Event.KEY_ESC){this.finishDrag(A,false);Event.stop(A)}}},endDrag:function(A){if(this.active&&this.dragging){this.finishDrag(A,true);Event.stop(A)}this.active=false;this.dragging=false},draw:function(C){var D=[Event.pointerX(C),Event.pointerY(C)];var B=Position.cumulativeOffset(this.element);B[0]-=this.currentLeft();B[1]-=this.currentTop();var A=this.element.style;if((!this.options.constraint)||(this.options.constraint=="horizontal")){A.left=(D[0]-B[0]-this.offsetX)+"px"}if((!this.options.constraint)||(this.options.constraint=="vertical")){A.top=(D[1]-B[1]-this.offsetY)+"px"}if(A.visibility=="hidden"){A.visibility=""}},update:function(B){if(this.active){if(!this.dragging){var A=this.element.style;this.dragging=true;if(Element.getStyle(this.element,"position")==""){A.position="relative"}if(this.options.zindex){this.options.originalZ=parseInt(Element.getStyle(this.element,"z-index")||0);A.zIndex=this.options.zindex}if(this.options.ghosting){this._clone=this.element.cloneNode(true);Position.absolutize(this.element);this.element.parentNode.insertBefore(this._clone,this.element)}Draggables.notify("onStart",this);if(this.options.starteffect){this.options.starteffect(this.element)}}Droppables.show(B,this.element);this.draw(B);if(this.options.change){this.options.change(this)}if(navigator.appVersion.indexOf("AppleWebKit")>0){window.scrollBy(0,0)}Event.stop(B)}}};var SortableObserver=Class.create();SortableObserver.prototype={initialize:function(B,A){this.element=$(B);this.observer=A;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={sortables:new Array(),options:function(A){A=$(A);return this.sortables.detect(function(B){return B.element==A})},destroy:function(A){A=$(A);this.sortables.findAll(function(B){return B.element==A}).each(function(B){Draggables.removeObserver(B.element);B.droppables.each(function(C){Droppables.remove(C)});B.draggables.invoke("destroy")});this.sortables=this.sortables.reject(function(B){return B.element==A})},create:function(C){C=$(C);var B=Object.extend({element:C,tag:"li",dropOnEmpty:false,tree:false,overlap:"vertical",constraint:"vertical",containment:C,handle:false,only:false,hoverclass:null,ghosting:false,format:null,onChange:function(){},onUpdate:function(){}},arguments[1]||{});this.destroy(C);var A={revert:true,ghosting:B.ghosting,constraint:B.constraint,handle:B.handle};if(B.starteffect){A.starteffect=B.starteffect}if(B.reverteffect){A.reverteffect=B.reverteffect}else{if(B.ghosting){A.reverteffect=function(E){E.style.top=0;E.style.left=0}}}if(B.endeffect){A.endeffect=B.endeffect}if(B.zindex){A.zindex=B.zindex}var D={overlap:B.overlap,containment:B.containment,hoverclass:B.hoverclass,onHover:Sortable.onHover,greedy:!B.dropOnEmpty};Element.cleanWhitespace(C);B.draggables=[];B.droppables=[];if(B.dropOnEmpty){Droppables.add(C,{containment:B.containment,onHover:Sortable.onEmptyHover,greedy:false});B.droppables.push(C)}(this.findElements(C,B)||[]).each(function(F){var E=B.handle?Element.Class.childrenWith(F,B.handle)[0]:F;B.draggables.push(new Draggable(F,Object.extend(A,{handle:E})));Droppables.add(F,D);B.droppables.push(F)});this.sortables.push(B);Draggables.addObserver(new SortableObserver(C,B.onUpdate))},findElements:function(B,A){if(!B.hasChildNodes()){return null}var C=[];$A(B.childNodes).each(function(E){if(E.tagName&&E.tagName==A.tag.toUpperCase()&&(!A.only||(Element.Class.has(E,A.only)))){C.push(E)}if(A.tree){var D=this.findElements(E,A);if(D){C.push(D)}}});return(C.length>0?C.flatten():null)},onHover:function(E,D,A){if(A>0.5){Sortable.mark(D,"before");if(D.previousSibling!=E){var B=E.parentNode;E.style.visibility="hidden";D.parentNode.insertBefore(E,D);if(D.parentNode!=B){Sortable.options(B).onChange(E)}Sortable.options(D.parentNode).onChange(E)}}else{Sortable.mark(D,"after");var C=D.nextSibling||null;if(C!=E){var B=E.parentNode;E.style.visibility="hidden";D.parentNode.insertBefore(E,C);if(D.parentNode!=B){Sortable.options(B).onChange(E)}Sortable.options(D.parentNode).onChange(E)}}},onEmptyHover:function(B,A){if(B.parentNode!=A){A.appendChild(B)}},unmark:function(){if(Sortable._marker){Element.hide(Sortable._marker)}},mark:function(B,A){var D=Sortable.options(B.parentNode);if(D&&!D.ghosting){return }if(!Sortable._marker){Sortable._marker=$("dropmarker")||document.createElement("DIV");Element.hide(Sortable._marker);Element.Class.add(Sortable._marker,"dropmarker");Sortable._marker.style.position="absolute";document.getElementsByTagName("body").item(0).appendChild(Sortable._marker)}var C=Position.cumulativeOffset(B);Sortable._marker.style.top=C[1]+"px";if(A=="after"){Sortable._marker.style.top=(C[1]+B.clientHeight)+"px"}Sortable._marker.style.left=C[0]+"px";Element.show(Sortable._marker)},serialize:function(C){C=$(C);var B=this.options(C);var A=Object.extend({tag:B.tag,only:B.only,name:C.id,format:B.format||/^[^_]*_(.*)$/},arguments[1]||{});return $(this.findElements(C,A)||[]).collect(function(D){return(encodeURIComponent(A.name)+"[]="+encodeURIComponent(D.id.match(A.format)?D.id.match(A.format)[1]:""))}).join("&")}};