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