var Droppables={drops:[],remove:function(i){var I=this;I.drops=I.drops.reject(function(I){return I.element==$(i)})},add:function(l){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)){I.each(function(I){i._containers.push($(I))})}else{i._containers.push($(I))}}
if(i.accept)i.accept=[i.accept].flatten();Element.makePositioned(l);i.element=l;this.drops.push(i)},isContained:function(i,l){var I=i.parentNode;return l._containers.detect(function(i){return I==i})},isAffected:function(l,i,I){return((I.element!=i)&&((!I._containers)||this.isContained(i,I))&&((!I.accept)||(Element.classNames(i).detect(function(i){return I.accept.include(i)})))&&Position.within(I.element,l[0],l[1]))},deactivate:function(i){if(i.hoverclass)Element.removeClassName(i.element,i.hoverclass);this.last_active=null},activate:function(i){if(i.hoverclass)Element.addClassName(i.element,i.hoverclass);this.last_active=i},show:function(I,i){var l=this;if(!l.drops.length)return;if(l.last_active)l.deactivate(l.last_active);l.drops.each(function(l){if(Droppables.isAffected(I,i,l)){if(l.onHover)l.onHover(i,l.element,Position.overlap(l.overlap,l.element));if(l.greedy){Droppables.activate(l);throw $break}}})},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,I)},reset:function(){var i=this;if(i.last_active)i.deactivate(i.last_active)}},Draggables={drags:[],observers:[],register:function(i){var I=this;if(I.drags.length==0){I.eventMouseUp=I.endDrag.bindAsEventListener(I);I.eventMouseMove=I.updateDrag.bindAsEventListener(I);I.eventKeypress=I.keyPress.bindAsEventListener(I);Event.observe(document,"mouseup",I.eventMouseUp);Event.observe(document,"mousemove",I.eventMouseMove);Event.observe(document,"keypress",I.eventKeypress)}
I.drags.push(i)},unregister:function(i){var I=this;I.drags=I.drags.reject(function(I){return I==i});if(I.drags.length==0){Event.stopObserving(document,"mouseup",I.eventMouseUp);Event.stopObserving(document,"mousemove",I.eventMouseMove);Event.stopObserving(document,"keypress",I.eventKeypress)}},activate:function(i){window.focus();this.activeDraggable=i},deactivate:function(i){this.activeDraggable=null},updateDrag:function(I){var l=this;if(!l.activeDraggable)return;var i=[Event.pointerX(I),Event.pointerY(I)];if(l._lastPointer&&(l._lastPointer.inspect()==i.inspect()))return;l._lastPointer=i;l.activeDraggable.updateDrag(I,i)},endDrag:function(i){var I=this;if(!I.activeDraggable)return;I._lastPointer=null;I.activeDraggable.endDrag(i)},keyPress:function(i){var I=this;if(I.activeDraggable)I.activeDraggable.keyPress(i)},addObserver:function(i){var I=this;I.observers.push(i);I._cacheObserverCallbacks()},removeObserver:function(i){var I=this;I.observers=I.observers.reject(function(I){return I.element==i});I._cacheObserverCallbacks()},notify:function(i,I,l){var o=this;if(o[i+'Count']>0)o.observers.each(function(o){if(o[i])o[i](i,I,l)})},_cacheObserverCallbacks:function(){['onStart','onEnd','onDrag'].each(function(i){Draggables[i+'Count']=Draggables.observers.select(function(I){return I[i]}).length})}},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;l._revert=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,snap:false},arguments[1]||{});l.element=$(I);if(i.handle&&(typeof i.handle=='string'))l.handle=Element.childrenWithClassName(l.element,i.handle)[0];if(!l.handle)l.handle=$(i.handle);if(!l.handle)l.handle=l.element;Element.makePositioned(l.element);l.delta=l.currentDelta();l.options=i;l.dragging=false;l.eventMouseDown=l.initDrag.bindAsEventListener(l);Event.observe(l.handle,"mousedown",l.eventMouseDown);Draggables.register(l)},destroy:function(){var i=this;Event.stopObserving(i.handle,"mousedown",i.eventMouseDown);Draggables.unregister(i)},currentDelta:function(){var i=this;return([parseInt(i.element.style.left||'0'),parseInt(i.element.style.top||'0')])},initDrag:function(i){var O=this;if(Event.isLeftClick(i)){var I=Event.element(i);if(I.tagName&&(I.tagName=='INPUT'||I.tagName=='SELECT'||I.tagName=='BUTTON'||I.tagName=='TEXTAREA'))return;if(O.element._revert){O.element._revert.cancel();O.element._revert=null}
var l=[Event.pointerX(i),Event.pointerY(i)],o=Position.cumulativeOffset(O.element);O.offset=[0,1].map(function(i){return(l[i]-o[i])});Draggables.activate(O);Event.stop(i)}},startDrag:function(i){var I=this;I.dragging=true;if(I.options.zindex){I.originalZ=parseInt(Element.getStyle(I.element,'z-index')||0);I.element.style.zIndex=I.options.zindex}
if(I.options.ghosting){I._clone=I.element.cloneNode(true);Position.absolutize(I.element);I.element.parentNode.insertBefore(I._clone,I.element)}
Draggables.notify('onStart',I,i);if(I.options.starteffect)I.options.starteffect(I.element)},updateDrag:function(I,i){var l=this;if(!l.dragging)l.startDrag(I);Position.prepare();Droppables.show(i,l.element);Draggables.notify('onDrag',l,I);l.draw(i);if(l.options.change)l.options.change(l);if(navigator.appVersion.indexOf('AppleWebKit')>0)window.scrollBy(0,0);Event.stop(I)},finishDrag:function(l,I){var O=this;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,l);var i=O.options.revert;if(i&&typeof i=='function')i=i(O.element);var o=O.currentDelta();if(i&&O.options.reverteffect){O.options.reverteffect(O.element,o[1]-O.delta[1],o[0]-O.delta[0])}else{O.delta=o}
if(O.options.zindex)O.element.style.zIndex=O.originalZ;if(O.options.endeffect)O.options.endeffect(O.element);Draggables.deactivate(O);Droppables.reset()},keyPress:function(i){if(!i.keyCode==Event.KEY_ESC)return;this.finishDrag(i,false);Event.stop(i)},endDrag:function(i){var I=this;if(!I.dragging)return;I.finishDrag(i,true);Event.stop(i)},draw:function(l){var c=this,I=Position.cumulativeOffset(c.element),O=c.currentDelta();I[0]-=O[0];I[1]-=O[1];var o=[0,1].map(function(i){return(l[i]-I[i]-this.offset[i])}.bind(c));if(c.options.snap){if(typeof c.options.snap=='function'){o=c.options.snap(o[0],o[1])}else{if(c.options.snap instanceof Array){o=o.map(function(I,l){var i=this;return Math.round(I/i.options.snap[l])*i.options.snap[l]}.bind(c))}else{o=o.map(function(I){var i=this;return Math.round(I/i.options.snap)*i.options.snap}.bind(c))}}}
var i=c.element.style;if((!c.options.constraint)||(c.options.constraint=='horizontal'))i.left=o[0]+"px";if((!c.options.constraint)||(c.options.constraint=='vertical'))i.top=o[1]+"px";if(i.visibility=="hidden")i.visibility=""}}
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){i=$(i);return this.sortables.detect(function(I){return I.element==i})},destroy:function(i){var I=this;i=$(i);I.sortables.findAll(function(I){return I.element==i}).each(function(i){Draggables.removeObserver(i.element);i.droppables.each(function(i){Droppables.remove(i)});i.draggables.invoke('destroy')});I.sortables=I.sortables.reject(function(I){return I.element==i})},create:function(l){var O=this;l=$(l);var i=Object.extend({element:l,tag:'li',dropOnEmpty:false,tree:false,overlap:'vertical',constraint:'vertical',containment:l,handle:false,only:false,hoverclass:null,ghosting:false,format:null,onChange:Prototype.emptyFunction,onUpdate:Prototype.emptyFunction},arguments[1]||{});O.destroy(l);var I={revert:true,ghosting:i.ghosting,constraint:i.constraint,handle:i.handle};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)}(O.findElements(l,i)||[]).each(function(O){var l=i.handle?Element.childrenWithClassName(O,i.handle)[0]:O;i.draggables.push(new Draggable(O,Object.extend(I,{handle:l})));Droppables.add(O,o);i.droppables.push(O)});O.sortables.push(i);Draggables.addObserver(new SortableObserver(l,i.onUpdate))},findElements:function(I,l){if(!I.hasChildNodes())return null;var i=[];$A(I.childNodes).each(function(o){if(o.tagName&&o.tagName.toUpperCase()==l.tag.toUpperCase()&&(!l.only||(Element.hasClassName(o,l.only))))i.push(o);if(l.tree){var I=this.findElements(o,l);if(I)i.push(I)}});return(i.length>0?i.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,l){if(i.parentNode!=l){var I=i.parentNode;l.appendChild(i);Sortable.options(I).onChange(i);Sortable.options(l).onChange(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.addClassName(Sortable._marker,'dropmarker');Sortable._marker.style.position='absolute';document.getElementsByTagName("body").item(0).appendChild(Sortable._marker)}
var i=Position.cumulativeOffset(l);Sortable._marker.style.left=i[0]+'px';Sortable._marker.style.top=i[1]+'px';if(o=='after')if(I.overlap=='horizontal')Sortable._marker.style.left=(i[0]+l.clientWidth)+'px';else
Sortable._marker.style.top=(i[1]+l.clientHeight)+'px';Element.show(Sortable._marker)},serialize:function(I){var o=this;I=$(I);var i=o.options(I),l=Object.extend({tag:i.tag,only:i.only,name:I.id,format:i.format||/^[^_]*_(.*)$/},arguments[1]||{});return $(o.findElements(I,l)||[]).map(function(i){return(encodeURIComponent(l.name)+"[]="+encodeURIComponent(i.id.match(l.format)?i.id.match(l.format)[1]:''))}).join("&")}}