if(!window.z_dragdrop_js){z_dragdrop_js=true;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(zk.opera||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(B,A,C){if(this[B+"Count"]>0){this.observers.each(function(D){if(D[B]){D[B](B,A,C)}})}if(A.options[B]){A.options[B](A,C)}},_cacheObserverCallbacks:function(){["onStart","onEnd","onDrag"].each(function(A){Draggables[A+"Count"]=Draggables.observers.select(function(B){return B[A]}).length})}};var Draggable=Class.create();Draggable._dragging={};Draggable.prototype={initialize:function(B){var C=zk.ie&&arguments[1]&&arguments[1].z_dragdrop;var D={handle:false,reverteffect:function(H,G,F){var E=H.style.position;var I=Math.sqrt(Math.abs(G^2)+Math.abs(F^2))*0.02;new Effect.Move(H,{x:-F,y:-G,duration:I,queue:{scope:"_draggable",position:"end"}});setTimeout(function(){if(C&&E!="absolute"&&E!="relative"){zkau._fixie4drop(H,E)}else{H.style.position=E}},I*1000+10)},endeffect:function(F){var E=typeof F._opacity=="number"?F._opacity:1;new Effect.Opacity(F,{duration:0.2,from:0.7,to:E,queue:{scope:"_draggable",position:"end"},afterFinish:function(){Draggable._dragging[F]=false}})},zindex:1000,revert:false,scroll:false,scrollSensitivity:20,scrollSpeed:15,snap:false,delay:0,overlay:false};if(!arguments[1]||typeof arguments[1].endeffect=="undefined"){Object.extend(D,{starteffect:function(E){E._opacity=Element.getOpacity(E);Draggable._dragging[E]=true;new Effect.Opacity(E,{duration:0.2,from:E._opacity,to:0.7})}})}var A=Object.extend(D,arguments[1]||{});this.element=$(B);if(A.handle&&(typeof A.handle=="string")){this.handle=this.element.down("."+A.handle,0)}if(!this.handle){this.handle=$(A.handle)}if(!this.handle){this.handle=this.element}if(A.scroll&&!A.scroll.scrollTo&&!A.scroll.outerHTML){A.scroll=$(A.scroll);this._isScrollChild=Element.childOf(this.element,A.scroll)}if(zk.opera||!A.z_dragdrop){Element.makePositioned(this.element)}this.delta=this.currentDelta();this.options=A;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([$int(Element.getStyle(this.element,"left")),$int(Element.getStyle(this.element,"top"))])},initDrag:function(A){if(typeof Draggable._dragging[this.element]!="undefined"&&Draggable._dragging[this.element]){return }if(Event.isLeftClick(A)){var C=Event.element(A);if((tag_name=C.tagName.toUpperCase())&&(tag_name=="INPUT"||tag_name=="SELECT"||tag_name=="OPTION"||tag_name=="BUTTON"||tag_name=="TEXTAREA")){return }for(var E=C;E&&E!=this.element;E=E.parentNode){if(Element.getStyle(E,"position")=="absolute"){return }}var B=[Event.pointerX(A),Event.pointerY(A)];if(this.options.ignoredrag&&this.options.ignoredrag(this.element,B,A)){return }var D=Position.cumulativeOffset(this.element);this.offset=[0,1].map(function(F){return(B[F]-D[F])});Draggables.activate(this);if(zkau.currentFocus&&Event.element(A)!=zkau.currentFocus&&typeof zkau.currentFocus.blur=="function"){zkau.currentFocus.blur()}Event.stop(A);zkau.autoZIndex(C,false,true)}},startDrag:function(B){zk.disableSelection(document.body);if(this.options.overlay){this.domOverlay=document.createElement("DIV");document.body.appendChild(this.domOverlay);zk.setOuterHTML(this.domOverlay,'<div class="dd-overlay" id="zk_dd_overlay"></div>');this.domOverlay=$e("zk_dd_overlay");if(zk.gecko){this.domOverlay.style.MozUserSelect="none"}this.domOverlay.style.width=zk.pageWidth()+"px";this.domOverlay.style.height=zk.pageHeight()+"px"}this.dragging=true;if(this.options.ghosting){var C=true;if(typeof this.options.ghosting=="function"){C=this.options.ghosting(this,true,B)}if(C){this._clone=this.element.cloneNode(true);this.z_orgpos=this.element.style.position;if(this.z_orgpos!="absolute"){Position.absolutize(this.element)}this.element.parentNode.insertBefore(this._clone,this.element)}}if(this.options.zindex){this.originalZ=$int(Element.getStyle(this.element,"z-index"));this.element.style.zIndex=this.options.zindex}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,this.handle)}},updateDrag:function(event,pointer){if(!this.dragging){this.startDrag(event)}Position.prepare();Draggables.notify("onDrag",this,event);this.draw(pointer,event);if(this.options.change){this.options.change(this,pointer,event)}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(navigator.appVersion.indexOf("AppleWebKit")>0){window.scrollBy(0,0)}Event.stop(event)},finishDrag:function(B,F){this.dragging=false;if(this.domOverlay){zk.remove(this.domOverlay)}delete this.domOverlay;zk.enableSelection(document.body);setTimeout("zk.clearSelection()",0);if(this.options.ghosting){var E=true;if(typeof this.options.ghosting=="function"){E=this.options.ghosting(this,false)}if(E){if(this.z_orgpos!="absolute"){Position.relativize(this.element);this.element.style.position=this.z_orgpos}Element.remove(this._clone);this._clone=null}}Draggables.notify("onEnd",this,B);var D=[Event.pointerX(B),Event.pointerY(B)];var A=this.options.revert;if(A&&typeof A=="function"){A=A(this.element,D,B)}var C=this.currentDelta();if(A&&this.options.reverteffect){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}if(this.options.endeffect){this.options.endeffect(this.element,B)}Draggables.deactivate(this)},keyPress:function(A){if(Event.keyCode(A)!=27){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(A,D){var H=Position.cumulativeOffset(this.element);if(this.options.ghosting){var C=Position.realOffset(this.element);H[0]+=C[0]-Position.deltaX;H[1]+=C[1]-Position.deltaY}var G=this.currentDelta();H[0]-=G[0];H[1]-=G[1];if(this.options.scroll&&(this.options.scroll!=window&&this._isScrollChild)){H[0]-=this.options.scroll.scrollLeft-this.originalScrollLeft;H[1]-=this.options.scroll.scrollTop-this.originalScrollTop}var F=[0,1].map(function(I){return(A[I]-H[I]-this.offset[I])}.bind(this));if(this.options.snap){if(typeof this.options.snap=="function"){F=this.options.snap(F[0],F[1],this)}else{if(this.options.snap instanceof Array){F=F.map(function(I,J){return Math.round(I/this.options.snap[J])*this.options.snap[J]}.bind(this))}else{F=F.map(function(I){return Math.round(I/this.options.snap)*this.options.snap}.bind(this))}}}if(this.z_scrl){F[0]-=this.z_scrl[0];F[1]-=this.z_scrl[1]}var B=this.element.style;if(typeof this.options.draw=="function"){this.options.draw(this,F,D)}else{if(typeof this.options.constraint=="function"){var E=this.options.constraint(this,F,D);if(E){F=E}B.left=F[0]+"px";B.top=F[1]+"px"}else{if((!this.options.constraint)||(this.options.constraint=="horizontal")){B.left=F[0]+"px"}if((!this.options.constraint)||(this.options.constraint=="vertical")){B.top=F[1]+"px"}}}if(B.visibility=="hidden"){B.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();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}}}};
