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