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