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