if(Object.isUndefined(Effect)){throw ("dragdrop.js requires including script.aculo.us' effects.js library")}var Droppables={drops:[],remove:function(a){this.drops=this.drops.reject(function(b){return b.element==$(a)})},add:function(c){c=$(c);var b=Object.extend({greedy:true,hoverclass:null,tree:false},arguments[1]||{});if(b.containment){b._containers=[];var a=b.containment;if(Object.isArray(a)){a.each(function(d){b._containers.push($(d))})}else{b._containers.push($(a))}}if(b.accept){b.accept=[b.accept].flatten()}Element.makePositioned(c);b.element=c;this.drops.push(b)},findDeepestChild:function(a){deepest=a[0];for(i=1;i<a.length;++i){if(Element.isParent(a[i].element,deepest.element)){deepest=a[i]}}return deepest},isContained:function(c,b){var a;if(b.tree){a=c.treeNode}else{a=c.parentNode}return b._containers.detect(function(d){return a==d})},isAffected:function(b,a,c){return((c.element!=a)&&((!c._containers)||this.isContained(a,c))&&((!c.accept)||(Element.classNames(a).detect(function(d){return c.accept.include(d)})))&&Position.within(c.element,b[0],b[1]))},deactivate:function(a){if(a.hoverclass){Element.removeClassName(a.element,a.hoverclass)}this.last_active=null},activate:function(a){if(a.hoverclass){Element.addClassName(a.element,a.hoverclass)}this.last_active=a},show:function(c,a){if(!this.drops.length){return}var d,b=[];this.drops.each(function(e){if(Droppables.isAffected(c,a,e)){b.push(e)}});if(b.length>0){d=Droppables.findDeepestChild(b)}if(this.last_active&&this.last_active!=d){this.deactivate(this.last_active)}if(d){Position.within(d.element,c[0],c[1]);if(d.onHover){d.onHover(a,d.element,Position.overlap(d.overlap,d.element))}if(d!=this.last_active){Droppables.activate(d)}}},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);return true}}},reset:function(){if(this.last_active){this.deactivate(this.last_active)}}};var Draggables={drags:[],observers:[],register:function(a){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(a)},unregister:function(a){this.drags=this.drags.reject(function(b){return b==a});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(a){if(a.options.delay){this._timeout=setTimeout(function(){Draggables._timeout=null;window.focus();Draggables.activeDraggable=a}.bind(this),a.options.delay)}else{window.focus();this.activeDraggable=a}},deactivate:function(){this.activeDraggable=null},updateDrag:function(a){if(!this.activeDraggable){return}var b=[Event.pointerX(a),Event.pointerY(a)];if(this._lastPointer&&(this._lastPointer.inspect()==b.inspect())){return}this._lastPointer=b;this.activeDraggable.updateDrag(a,b)},endDrag:function(a){if(this._timeout){clearTimeout(this._timeout);this._timeout=null}if(!this.activeDraggable){return}this._lastPointer=null;this.activeDraggable.endDrag(a);this.activeDraggable=null},keyPress:function(a){if(this.activeDraggable){this.activeDraggable.keyPress(a)}},addObserver:function(a){this.observers.push(a);this._cacheObserverCallbacks()},removeObserver:function(a){this.observers=this.observers.reject(function(b){return b.element==a});this._cacheObserverCallbacks()},notify:function(c,b,a){if(this[c+"Count"]>0){this.observers.each(function(d){if(d[c]){d[c](c,b,a)}})}if(b.options[c]){b.options[c](b,a)}},_cacheObserverCallbacks:function(){["onStart","onEnd","onDrag"].each(function(a){Draggables[a+"Count"]=Draggables.observers.select(function(b){return b[a]}).length})}};var Draggable=Class.create({initialize:function(c){var a={handle:false,reverteffect:function(d,g,f){var e=Math.sqrt(Math.abs(g^2)+Math.abs(f^2))*0.02;new Effect.Move(d,{x:-f,y:-g,duration:e,queue:{scope:"_draggable",position:"end"}})},endeffect:function(e){var d=Object.isNumber(e._opacity)?e._opacity:1;new Effect.Opacity(e,{duration:0.2,from:0.7,to:d,queue:{scope:"_draggable",position:"end"},afterFinish:function(){Draggable._dragging[e]=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(a,{starteffect:function(d){d._opacity=Element.getOpacity(d);Draggable._dragging[d]=true;new Effect.Opacity(d,{duration:0.2,from:d._opacity,to:0.7})}})}var b=Object.extend(a,arguments[1]||{});this.element=$(c);if(b.handle&&Object.isString(b.handle)){this.handle=this.element.down("."+b.handle,0)}if(!this.handle){this.handle=$(b.handle)}if(!this.handle){this.handle=this.element}if(b.scroll&&!b.scroll.scrollTo&&!b.scroll.outerHTML){b.scroll=$(b.scroll);this._isScrollChild=Element.childOf(this.element,b.scroll)}Element.makePositioned(this.element);this.options=b;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(c){if(!Object.isUndefined(Draggable._dragging[this.element])&&Draggable._dragging[this.element]){return}if(Event.isLeftClick(c)){var a=Event.element(c);if((tag_name=a.tagName.toUpperCase())&&(tag_name=="INPUT"||tag_name=="SELECT"||tag_name=="OPTION"||tag_name=="BUTTON"||tag_name=="TEXTAREA")){return}var d=[Event.pointerX(c),Event.pointerY(c)];var b=Position.cumulativeOffset(this.element);this.offset=[0,1].map(function(e){return(d[e]-b[e])});Draggables.activate(this);Event.stop(c)}},startDrag:function(b){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 a=this._getWindowScroll(this.options.scroll);this.originalScrollLeft=a.left;this.originalScrollTop=a.top}else{this.originalScrollLeft=this.options.scroll.scrollLeft;this.originalScrollTop=this.options.scroll.scrollTop}}Draggables.notify("onStart",this,b);if(this.options.starteffect){this.options.starteffect(this.element)}},updateDrag:function(event,pointer){if(!this.dragging){this.startDrag(event)}if(!this.options.quiet){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+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 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(Prototype.Browser.WebKit){window.scrollBy(0,0)}Event.stop(event)},finishDrag:function(g,c){this.dragging=false;if(this.options.quiet){Position.prepare();var b=[Event.pointerX(g),Event.pointerY(g)];Droppables.show(b,this.element)}if(this.options.ghosting){if(!this._originallyAbsolute){Position.relativize(this.element)}delete this._originallyAbsolute;Element.remove(this._clone);this._clone=null}var e=false;if(c){e=Droppables.fire(g,this.element);if(!e){e=false}}if(e&&this.options.onDropped){this.options.onDropped(this.element)}Draggables.notify("onEnd",this,g);var f=this.options.revert;if(f&&Object.isFunction(f)){f=f(this.element)}var a=this.currentDelta();if(f&&this.options.reverteffect){if(e==0||f!="failure"){this.options.reverteffect(this.element,a[1]-this.delta[1],a[0]-this.delta[0])}}else{this.delta=a}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(a){if(a.keyCode!=Event.KEY_ESC){return}this.finishDrag(a,false);Event.stop(a)},endDrag:function(a){if(!this.dragging){return}this.stopScrolling();this.finishDrag(a,true);Event.stop(a)},draw:function(f){var e=Position.cumulativeOffset(this.element);if(this.options.ghosting){var a=Position.realOffset(this.element);e[0]+=a[0]-Position.deltaX;e[1]+=a[1]-Position.deltaY}var c=this.currentDelta();e[0]-=c[0];e[1]-=c[1];if(this.options.scroll&&(this.options.scroll!=window&&this._isScrollChild)){e[0]-=this.options.scroll.scrollLeft-this.originalScrollLeft;e[1]-=this.options.scroll.scrollTop-this.originalScrollTop}var b=[0,1].map(function(d){return(f[d]-e[d]-this.offset[d])}.bind(this));if(this.options.snap){if(Object.isFunction(this.options.snap)){b=this.options.snap(b[0],b[1],this)}else{if(Object.isArray(this.options.snap)){b=b.map(function(d,h){return(d/this.options.snap[h]).round()*this.options.snap[h]}.bind(this))}else{b=b.map(function(d){return(d/this.options.snap).round()*this.options.snap}.bind(this))}}}var g=this.element.style;if((!this.options.constraint)||(this.options.constraint=="horizontal")){g.left=b[0]+"px"}if((!this.options.constraint)||(this.options.constraint=="vertical")){g.top=b[1]+"px"}if(g.visibility=="hidden"){g.visibility=""}},stopScrolling:function(){if(this.scrollInterval){clearInterval(this.scrollInterval);this.scrollInterval=null;Draggables._lastScrollPointer=null}},startScrolling:function(a){if(!(a[0]||a[1])){return}this.scrollSpeed=[a[0]*this.options.scrollSpeed,a[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);if(this._isScrollChild){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}}});Draggable._dragging={};var SortableObserver=Class.create({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={SERIALIZE_RULE:/^[^_\-](?:[A-Za-z0-9\-\_]*)[_](.*)$/,sortables:{},_findRootElement:function(a){while(a.tagName.toUpperCase()!="BODY"){if(a.id&&Sortable.sortables[a.id]){return a}a=a.parentNode}},options:function(a){a=Sortable._findRootElement($(a));if(!a){return}return Sortable.sortables[a.id]},destroy:function(a){a=$(a);var b=Sortable.sortables[a.id];if(b){Draggables.removeObserver(b.element);b.droppables.each(function(c){Droppables.remove(c)});b.draggables.invoke("destroy");delete Sortable.sortables[b.element.id]}},create:function(a){a=$(a);var e=Object.extend({element:a,tag:"li",dropOnEmpty:false,tree:false,treeTag:"ul",overlap:"vertical",constraint:"vertical",containment:a,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(a);var d={revert:true,quiet:e.quiet,scroll:e.scroll,scrollSpeed:e.scrollSpeed,scrollSensitivity:e.scrollSensitivity,delay:e.delay,ghosting:e.ghosting,constraint:e.constraint,handle:e.handle};if(e.starteffect){d.starteffect=e.starteffect}if(e.reverteffect){d.reverteffect=e.reverteffect}else{if(e.ghosting){d.reverteffect=function(f){f.style.top=0;f.style.left=0}}}if(e.endeffect){d.endeffect=e.endeffect}if(e.zindex){d.zindex=e.zindex}var b={overlap:e.overlap,containment:e.containment,tree:e.tree,hoverclass:e.hoverclass,onHover:Sortable.onHover};var c={onHover:Sortable.onEmptyHover,overlap:e.overlap,containment:e.containment,hoverclass:e.hoverclass};Element.cleanWhitespace(a);e.draggables=[];e.droppables=[];if(e.dropOnEmpty||e.tree){Droppables.add(a,c);e.droppables.push(a)}(e.elements||this.findElements(a,e)||[]).each(function(g,h){var f=e.handles?$(e.handles[h]):(e.handle?$(g).select("."+e.handle)[0]:g);e.draggables.push(new Draggable(g,Object.extend(d,{handle:f})));Droppables.add(g,b);if(e.tree){g.treeNode=a}e.droppables.push(g)});if(e.tree){(Sortable.findTreeElements(a,e)||[]).each(function(f){Droppables.add(f,c);f.treeNode=a;e.droppables.push(f)})}this.sortables[a.id]=e;Draggables.addObserver(new SortableObserver(a,e.onUpdate))},findElements:function(b,a){return Element.findChildren(b,a.only,a.tree?true:false,a.tag)},findTreeElements:function(b,a){return Element.findChildren(b,a.only,a.tree?true:false,a.treeTag)},onHover:function(c,b,d){if(Element.isParent(b,c)){return}if(d>0.33&&d<0.66&&Sortable.options(b).tree){return}else{if(d>0.5){Sortable.mark(b,"before");if(b.previousSibling!=c){var e=c.parentNode;c.style.visibility="hidden";b.parentNode.insertBefore(c,b);if(b.parentNode!=e){Sortable.options(e).onChange(c)}Sortable.options(b.parentNode).onChange(c)}}else{Sortable.mark(b,"after");var a=b.nextSibling||null;if(a!=c){var e=c.parentNode;c.style.visibility="hidden";b.parentNode.insertBefore(c,a);if(b.parentNode!=e){Sortable.options(e).onChange(c)}Sortable.options(b.parentNode).onChange(c)}}}},onEmptyHover:function(d,f,g){var h=d.parentNode;var j=Sortable.options(f);if(!Element.isParent(f,d)){var e;var b=Sortable.findElements(f,{tag:j.tag,only:j.only});var a=null;if(b){var c=Element.offsetSize(f,j.overlap)*(1-g);for(e=0;e<b.length;e+=1){if(c-Element.offsetSize(b[e],j.overlap)>=0){c-=Element.offsetSize(b[e],j.overlap)}else{if(c-(Element.offsetSize(b[e],j.overlap)/2)>=0){a=e+1<b.length?b[e+1]:null;break}else{a=b[e];break}}}}f.insertBefore(d,a);Sortable.options(h).onChange(d);j.onChange(d)}},unmark:function(){if(Sortable._marker){Sortable._marker.hide()}},mark:function(d,c){var b=Sortable.options(d.parentNode);if(b&&!b.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 a=Position.cumulativeOffset(d);Sortable._marker.setStyle({left:a[0]+"px",top:a[1]+"px"});if(c=="after"){if(b.overlap=="horizontal"){Sortable._marker.setStyle({left:(a[0]+d.clientWidth)+"px"})}else{Sortable._marker.setStyle({top:(a[1]+d.clientHeight)+"px"})}}Sortable._marker.show()},_tree:function(a,e,b){var g=Sortable.findElements(a,e)||[];for(var f=0;f<g.length;++f){var d=g[f].id.match(e.format);if(!d){continue}var c={id:encodeURIComponent(d?d[1]:null),element:a,parent:b,children:[],position:b.children.length,container:$(g[f]).down(e.treeTag)};if(c.container){this._tree(c.container,e,c)}b.children.push(c)}return b},tree:function(b){b=$(b);var a=this.options(b);var d=Object.extend({tag:a.tag,treeTag:a.treeTag,only:a.only,name:b.id,format:a.format},arguments[1]||{});var c={id:null,parent:null,children:[],container:b,position:0};return Sortable._tree(b,d,c)},_constructIndex:function(b){var a="";do{if(b.id){a="["+b.position+"]"+a}}while((b=b.parent)!=null);return a},sequence:function(b){b=$(b);var a=Object.extend(this.options(b),arguments[1]||{});return $(this.findElements(b,a)||[]).map(function(c){return c.id.match(a.format)?c.id.match(a.format)[1]:""})},setSequence:function(d,a){d=$(d);var c=Object.extend(this.options(d),arguments[2]||{});var b={};this.findElements(d,c).each(function(e){if(e.id.match(c.format)){b[e.id.match(c.format)[1]]=[e,e.parentNode]}e.parentNode.removeChild(e)});a.each(function(e){var f=b[e];if(f){f[1].appendChild(f[0]);delete b[e]}})},serialize:function(a){a=$(a);var c=Object.extend(Sortable.options(a),arguments[1]||{});var b=encodeURIComponent((arguments[1]&&arguments[1].name)?arguments[1].name:a.id);if(c.tree){return Sortable.tree(a,arguments[1]).children.map(function(d){return[b+Sortable._constructIndex(d)+"[id]="+encodeURIComponent(d.id)].concat(d.children.map(arguments.callee))}).flatten().join("&")}else{return Sortable.sequence(a,arguments[1]).map(function(d){return b+"[]="+encodeURIComponent(d)}).join("&")}}};Element.isParent=function(b,a){if(!b.parentNode||b==a){return false}if(b.parentNode==a){return true}return Element.isParent(b.parentNode,a)};Element.findChildren=function(b,e,d,a){if(!b.hasChildNodes()){return null}a=a.toUpperCase();if(e){e=[e].flatten()}var c=[];$A(b.childNodes).each(function(g){if(g.tagName&&g.tagName.toUpperCase()==a&&(!e||(Element.classNames(g).detect(function(h){return e.include(h)})))){c.push(g)}if(d){var f=Element.findChildren(g,e,d,a);if(f){c.push(f)}}});return(c.length>0?c.flatten():[])};Element.offsetSize=function(a,b){return a["offset"+((b=="vertical"||b=="height")?"Height":"Width")]};