var Droppables={drops:[],remove:function(E){this.drops=this.drops.reject(function(r){return r.element==$(E);});},add:function(r){r=$(r);var E=Object.extend({greedy:true,hoverclass:null,tree:false},arguments[1]||{});if(E.containment){E._containers=[];var e=E.containment;if((typeof e=="object")&&(e.constructor==Array)){e.each(function(A){E._containers.push($(A));});}else{E._containers.push($(e));}}if(E.accept){E.accept=[E.accept].flatten();}Element.makePositioned(r);E.element=r;this.drops.push(E);},findDeepestChild:function(E){deepest=E[0];for(i=1;i<E.length;++i){if(Element.isParent(E[i].element,deepest.element)){deepest=E[i];}}return deepest;},isContained:function(r,E){var e;if(E.tree){e=r.treeNode;}else{e=r.parentNode;}return E._containers.detect(function(A){return e==A;});},isAffected:function(E,e,r){return ((r.element!=e)&&((!r._containers)||this.isContained(e,r))&&((!r.accept)||(Element.classNames(e).detect(function(A){return r.accept.include(A);})))&&Position.within(r.element,E[0],E[1]));},deactivate:function(E){if(E.hoverclass){Element.removeClassName(E.element,E.hoverclass);}this.last_active=null;},activate:function(E){if(E.hoverclass){Element.addClassName(E.element,E.hoverclass);}this.last_active=E;},show:function(E,r){if(!this.drops.length){return ;}var e=[];if(this.last_active){this.deactivate(this.last_active);}this.drops.each(function(A){if(Droppables.isAffected(E,r,A)){e.push(A);}});if(e.length>0){drop=Droppables.findDeepestChild(e);Position.within(drop.element,E[0],E[1]);if(drop.onHover){drop.onHover(r,drop.element,Position.overlap(drop.overlap,drop.element));}Droppables.activate(drop);}},fire:function(r,E){if(!this.last_active){return ;}Position.prepare();if(this.isAffected([Event.pointerX(r),Event.pointerY(r)],E,this.last_active)){if(this.last_active.onDrop){this.last_active.onDrop(E,this.last_active.element,r);}}},reset:function(){if(this.last_active){this.deactivate(this.last_active);}}};var Draggables={drags:[],observers:[],register:function(E){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(E);},unregister:function(E){this.drags=this.drags.reject(function(r){return r==E;});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(E){window.focus();this.activeDraggable=E;},deactivate:function(){this.activeDraggable=null;},updateDrag:function(E){if(!this.activeDraggable){return ;}var r=[Event.pointerX(E),Event.pointerY(E)];if(this._lastPointer&&(this._lastPointer.inspect()==r.inspect())){return ;}this._lastPointer=r;this.activeDraggable.updateDrag(E,r);},endDrag:function(E){if(!this.activeDraggable){return ;}this._lastPointer=null;this.activeDraggable.endDrag(E);this.activeDraggable=null;},keyPress:function(E){if(this.activeDraggable){this.activeDraggable.keyPress(E);}},addObserver:function(E){this.observers.push(E);this._cacheObserverCallbacks();},removeObserver:function(E){this.observers=this.observers.reject(function(r){return r.element==E;});this._cacheObserverCallbacks();},notify:function(r,E,e){if(this[r+"Count"]>0){this.observers.each(function(A){if(A[r]){A[r](r,E,e);}});}},_cacheObserverCallbacks:function(){["onStart","onEnd","onDrag"].each(function(E){Draggables[E+"Count"]=Draggables.observers.select(function(r){return r[E];}).length;});}};var Draggable=Class.create();Draggable.prototype={initialize:function(r){var E=Object.extend({handle:false,starteffect:function(A){new Effect.Opacity(A,{duration:0.2,from:1,to:0.7});},reverteffect:function(Z,T,A){var q=Math.sqrt(Math.abs(T^2)+Math.abs(A^2))*0.02;Z._revert=new Effect.Move(Z,{x:-A,y:-T,duration:q});},endeffect:function(A){new Effect.Opacity(A,{duration:0.2,from:0.7,to:1});},zindex:1000,revert:false,scroll:false,scrollSensitivity:20,scrollSpeed:15,snap:false},arguments[1]||{});this.element=$(r);if(E.handle&&(typeof E.handle=="string")){var e=Element.childrenWithClassName(this.element,E.handle,true);if(e.length>0){this.handle=e[0];}}if(!this.handle){this.handle=$(E.handle);}if(!this.handle){this.handle=this.element;}if(E.scroll&&!E.scroll.scrollTo&&!E.scroll.outerHTML){E.scroll=$(E.scroll);}Element.makePositioned(this.element);this.delta=this.currentDelta();this.options=E;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(E){if(Event.isLeftClick(E)){var e=Event.element(E);if(e.tagName&&(e.tagName=="INPUT"||e.tagName=="SELECT"||e.tagName=="OPTION"||e.tagName=="BUTTON"||e.tagName=="TEXTAREA")){return ;}if(this.element._revert){this.element._revert.cancel();this.element._revert=null;}var r=[Event.pointerX(E),Event.pointerY(E)];var A=Position.cumulativeOffset(this.element);this.offset=[0,1].map(function(T){return (r[T]-A[T]);});Draggables.activate(this);Event.stop(E);}},startDrag:function(r){this.dragging=true;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);Position.absolutize(this.element);this.element.parentNode.insertBefore(this._clone,this.element);}if(this.options.scroll){if(this.options.scroll==window){var E=this._getWindowScroll(this.options.scroll);this.originalScrollLeft=E.left;this.originalScrollTop=E.top;}else{this.originalScrollLeft=this.options.scroll.scrollLeft;this.originalScrollTop=this.options.scroll.scrollTop;}}Draggables.notify("onStart",this,r);if(this.options.starteffect){this.options.starteffect(this.element);}},updateDrag:function(event,pointer){if(!this.dragging){this.startDrag(event);}Position.prepare();Droppables.show(pointer,this.element);Draggables.notify("onDrag",this,event);this.draw(pointer);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;p[1]+=this.options.scroll.scrollTop;p.push(p[0]+this.options.scroll.offsetWidth);p.push(p[1]+this.options.scroll.offsetHeight);}var speed=[0,0];if(pointer[0]<(p[0]+this.options.scrollSensitivity)){speed[0]=pointer[0]-(p[0]+this.options.scrollSensitivity);}if(pointer[1]<(p[1]+this.options.scrollSensitivity)){speed[1]=pointer[1]-(p[1]+this.options.scrollSensitivity);}if(pointer[0]>(p[2]-this.options.scrollSensitivity)){speed[0]=pointer[0]-(p[2]-this.options.scrollSensitivity);}if(pointer[1]>(p[3]-this.options.scrollSensitivity)){speed[1]=pointer[1]-(p[3]-this.options.scrollSensitivity);}this.startScrolling(speed);}if(navigator.appVersion.indexOf("AppleWebKit")>0){window.scrollBy(0,0);}Event.stop(event);},finishDrag:function(r,A){this.dragging=false;if(this.options.ghosting){Position.relativize(this.element);Element.remove(this._clone);this._clone=null;}if(A){Droppables.fire(r,this.element);}Draggables.notify("onEnd",this,r);var E=this.options.revert;if(E&&typeof E=="function"){E=E(this.element);}var e=this.currentDelta();if(E&&this.options.reverteffect){this.options.reverteffect(this.element,e[1]-this.delta[1],e[0]-this.delta[0]);}else{this.delta=e;}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(E){if(E.keyCode!=Event.KEY_ESC){return ;}this.finishDrag(E,false);Event.stop(E);},endDrag:function(E){if(!this.dragging){return ;}this.stopScrolling();this.finishDrag(E,true);Event.stop(E);},draw:function(E){var T=Position.cumulativeOffset(this.element);var A=this.currentDelta();T[0]-=A[0];T[1]-=A[1];if(this.options.scroll&&(this.options.scroll!=window)){T[0]-=this.options.scroll.scrollLeft-this.originalScrollLeft;T[1]-=this.options.scroll.scrollTop-this.originalScrollTop;}var e=[0,1].map(function(Z){return (E[Z]-T[Z]-this.offset[Z]);}.bind(this));if(this.options.snap){if(typeof this.options.snap=="function"){e=this.options.snap(e[0],e[1]);}else{if(this.options.snap instanceof Array){e=e.map(function(Z,q){return Math.round(Z/this.options.snap[q])*this.options.snap[q];}.bind(this));}else{e=e.map(function(Z){return Math.round(Z/this.options.snap)*this.options.snap;}.bind(this));}}}var r=this.element.style;if((!this.options.constraint)||(this.options.constraint=="horizontal")){r.left=e[0]+"px";}if((!this.options.constraint)||(this.options.constraint=="vertical")){r.top=e[1]+"px";}if(r.visibility=="hidden"){r.visibility="";}},stopScrolling:function(){if(this.scrollInterval){clearInterval(this.scrollInterval);this.scrollInterval=null;Draggables._lastScrollPointer=null;}},startScrolling:function(E){this.scrollSpeed=[E[0]*this.options.scrollSpeed,E[1]*this.options.scrollSpeed];this.lastScrolled=new Date();this.scrollInterval=setInterval(this.scroll.bind(this),10);},scroll:function(){var current=new Date();var delta=current-this.lastScrolled;this.lastScrolled=current;if(this.options.scroll==window){with(this._getWindowScroll(this.options.scroll)){if(this.scrollSpeed[0]||this.scrollSpeed[1]){var d=delta/1000;this.options.scroll.scrollTo(left+d*this.scrollSpeed[0],top+d*this.scrollSpeed[1]);}}}else{this.options.scroll.scrollLeft+=this.scrollSpeed[0]*delta/1000;this.options.scroll.scrollTop+=this.scrollSpeed[1]*delta/1000;}Position.prepare();Droppables.show(Draggables._lastPointer,this.element);Draggables.notify("onDrag",this);Draggables._lastScrollPointer=Draggables._lastScrollPointer||$A(Draggables._lastPointer);Draggables._lastScrollPointer[0]+=this.scrollSpeed[0]*delta/1000;Draggables._lastScrollPointer[1]+=this.scrollSpeed[1]*delta/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};}};var SortableObserver=Class.create();SortableObserver.prototype={initialize:function(r,E){this.element=$(r);this.observer=E;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:{},_findRootElement:function(E){while(E.tagName!="BODY"){if(E.id&&Sortable.sortables[E.id]){return E;}E=E.parentNode;}},options:function(E){E=Sortable._findRootElement($(E));if(!E){return ;}return Sortable.sortables[E.id];},destroy:function(E){var r=Sortable.options(E);if(r){Draggables.removeObserver(r.element);r.droppables.each(function(e){Droppables.remove(e);});r.draggables.invoke("destroy");delete Sortable.sortables[r.element.id];}},create:function(e){e=$(e);var r=Object.extend({element:e,tag:"li",dropOnEmpty:false,tree:false,treeTag:"ul",overlap:"vertical",constraint:"vertical",containment:e,handle:false,only:false,hoverclass:null,ghosting:false,scroll:false,scrollSensitivity:20,scrollSpeed:15,format:/^[^_]*_(.*)$/,onChange:Prototype.emptyFunction,onUpdate:Prototype.emptyFunction},arguments[1]||{});this.destroy(e);var E={revert:true,scroll:r.scroll,scrollSpeed:r.scrollSpeed,scrollSensitivity:r.scrollSensitivity,ghosting:r.ghosting,constraint:r.constraint,handle:r.handle};if(r.starteffect){E.starteffect=r.starteffect;}if(r.reverteffect){E.reverteffect=r.reverteffect;}else{if(r.ghosting){E.reverteffect=function(Z){Z.style.top=0;Z.style.left=0;};}}if(r.endeffect){E.endeffect=r.endeffect;}if(r.zindex){E.zindex=r.zindex;}var A={overlap:r.overlap,containment:r.containment,tree:r.tree,hoverclass:r.hoverclass,onHover:Sortable.onHover};var T={onHover:Sortable.onEmptyHover,overlap:r.overlap,containment:r.containment,hoverclass:r.hoverclass};Element.cleanWhitespace(e);r.draggables=[];r.droppables=[];if(r.dropOnEmpty||r.tree){Droppables.add(e,T);r.droppables.push(e);}(this.findElements(e,r)||[]).each(function(q){var Z=r.handle?Element.childrenWithClassName(q,r.handle)[0]:q;r.draggables.push(new Draggable(q,Object.extend(E,{handle:Z})));Droppables.add(q,A);if(r.tree){q.treeNode=e;}r.droppables.push(q);});if(r.tree){(Sortable.findTreeElements(e,r)||[]).each(function(Z){Droppables.add(Z,T);Z.treeNode=e;r.droppables.push(Z);});}this.sortables[e.id]=r;Draggables.addObserver(new SortableObserver(e,r.onUpdate));},findElements:function(r,E){return Element.findChildren(r,E.only,E.tree?true:false,E.tag);},findTreeElements:function(r,E){return Element.findChildren(r,E.only,E.tree?true:false,E.treeTag);},onHover:function(T,A,E){if(Element.isParent(A,T)){return ;}if(E>0.33&&E<0.66&&Sortable.options(A).tree){return ;}else{if(E>0.5){Sortable.mark(A,"before");if(A.previousSibling!=T){var r=T.parentNode;T.style.visibility="hidden";A.parentNode.insertBefore(T,A);if(A.parentNode!=r){Sortable.options(r).onChange(T);}Sortable.options(A.parentNode).onChange(T);}}else{Sortable.mark(A,"after");var e=A.nextSibling||null;if(e!=T){var r=T.parentNode;T.style.visibility="hidden";A.parentNode.insertBefore(T,e);if(A.parentNode!=r){Sortable.options(r).onChange(T);}Sortable.options(A.parentNode).onChange(T);}}}},onEmptyHover:function(T,q,v){var m=T.parentNode;var E=Sortable.options(q);if(!Element.isParent(q,T)){var Z;var e=Sortable.findElements(q,{tag:E.tag});var r=null;if(e){var A=Element.offsetSize(q,E.overlap)*(1-v);for(Z=0;Z<e.length;Z+=1){if(A-Element.offsetSize(e[Z],E.overlap)>=0){A-=Element.offsetSize(e[Z],E.overlap);}else{if(A-(Element.offsetSize(e[Z],E.overlap)/2)>=0){r=Z+1<e.length?e[Z+1]:null;break;}else{r=e[Z];break;}}}}q.insertBefore(T,r);Sortable.options(m).onChange(T);E.onChange(T);}},unmark:function(){if(Sortable._marker){Element.hide(Sortable._marker);}},mark:function(r,E){var A=Sortable.options(r.parentNode);if(A&&!A.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 e=Position.cumulativeOffset(r);Sortable._marker.style.left=e[0]+"px";Sortable._marker.style.top=e[1]+"px";if(E=="after"){if(A.overlap=="horizontal"){Sortable._marker.style.left=(e[0]+r.clientWidth)+"px";}else{Sortable._marker.style.top=(e[1]+r.clientHeight)+"px";}}Element.show(Sortable._marker);},_tree:function(T,r,Z){var A=Sortable.findElements(T,r)||[];for(var e=0;e<A.length;++e){var E=A[e].id.match(r.format);if(!E){continue;}var q={id:encodeURIComponent(E?E[1]:null),element:T,parent:Z,children:new Array,position:Z.children.length,container:Sortable._findChildrenElement(A[e],r.treeTag.toUpperCase())};if(q.container){this._tree(q.container,r,q);}Z.children.push(q);}return Z;},_findChildrenElement:function(e,E){if(e&&e.hasChildNodes){for(var r=0;r<e.childNodes.length;++r){if(e.childNodes[r].tagName==E){return e.childNodes[r];}}}return null;},tree:function(A){A=$(A);var e=this.options(A);var r=Object.extend({tag:e.tag,treeTag:e.treeTag,only:e.only,name:A.id,format:e.format},arguments[1]||{});var E={id:null,parent:null,children:new Array,container:A,position:0};return Sortable._tree(A,r,E);},_constructIndex:function(r){var E="";do{if(r.id){E="["+r.position+"]"+E;}}while((r=r.parent)!=null);return E;},sequence:function(r){r=$(r);var E=Object.extend(this.options(r),arguments[1]||{});return $(this.findElements(r,E)||[]).map(function(e){return e.id.match(E.format)?e.id.match(E.format)[1]:"";});},setSequence:function(r,e){r=$(r);var E=Object.extend(this.options(r),arguments[2]||{});var A={};this.findElements(r,E).each(function(T){if(T.id.match(E.format)){A[T.id.match(E.format)[1]]=[T,T.parentNode];}T.parentNode.removeChild(T);});e.each(function(T){var Z=A[T];if(Z){Z[1].appendChild(Z[0]);delete A[T];}});},serialize:function(e){e=$(e);var r=Object.extend(Sortable.options(e),arguments[1]||{});var E=encodeURIComponent((arguments[1]&&arguments[1].name)?arguments[1].name:e.id);if(r.tree){return Sortable.tree(e,arguments[1]).children.map(function(A){return [E+Sortable._constructIndex(A)+"="+encodeURIComponent(A.id)].concat(A.children.map(arguments.callee));}).flatten().join("&");}else{return Sortable.sequence(e,arguments[1]).map(function(A){return E+"[]="+encodeURIComponent(A);}).join("&");}}};Element.isParent=function(r,E){if(!r.parentNode||r==E){return false;}if(r.parentNode==E){return true;}return Element.isParent(r.parentNode,E);};Element.findChildren=function(A,r,E,e){if(!A.hasChildNodes()){return null;}e=e.toUpperCase();if(r){r=[r].flatten();}var T=[];$A(A.childNodes).each(function(q){if(q.tagName&&q.tagName.toUpperCase()==e&&(!r||(Element.classNames(q).detect(function(m){return r.include(m);})))){T.push(q);}if(E){var Z=Element.findChildren(q,r,E,e);if(Z){T.push(Z);}}});return (T.length>0?T.flatten():[]);};Element.offsetSize=function(E,r){if(r=="vertical"||r=="height"){return E.offsetHeight;}else{return E.offsetWidth;}};