﻿var DragDrop={};DragDrop.Drop=new Class.create();DragDrop.Drop.prototype={initialize:function(a){this.options={element:'',handle:'',conbox:null,lockX:false,lockY:false,haveHandLen:false,maxMin_warp:{left:0,top:0},isClickDrop:false,postionScale:null,zindex:1000};Object.extend(this.options,a||{});this.element=$(this.options.element);this.handle=$(this.options.handle);this.conbox=$(this.options.conbox);this.lockX=this.options.lockX;this.lockY=this.options.lockY;if(!this.element)this.element=this.handle;this.minleft=this.maxleft=this.mintop=this.maxtop=0;this.firstDrap=true;if(this.conbox){var b=Position.cumulativeOffset(this.conbox);this.minleft=b[0]+this.parseStyle(this.conbox,'border-left-width');this.maxleft=this.minleft+this.conbox.clientWidth-this.element.offsetWidth;this.mintop=b[1]+this.parseStyle(this.conbox,'border-top-width');this.maxtop=this.mintop+this.conbox.clientHeight-this.element.offsetHeight}if(this.options.haveHandLen){var W=Math.round(this.element.offsetWidth/2);var H=Math.round(this.element.offsetHeight/2);this.minleft-=W;this.maxleft+=W+this.options.maxMin_warp.left;this.mintop-=H;this.maxtop+=H+this.options.maxMin_warp.top}if(this.options.postionScale!=null)this.initPostion(this.options.postionScale);this.eventMouseDown=this.MouseDown.bindAsEventListener(this);this.eventMouseMove=this.MouseMove.bindAsEventListener(this);this.eventMouseUp=this.MouseUp.bindAsEventListener(this);this.eventMouseClick=this.MouseClick.bindAsEventListener(this);Event.observe(this.handle,"mousedown",this.eventMouseDown);Event.observe(document,"mouseup",this.eventMouseUp);if(this.options.isClickDrop){if(this.conbox)Event.observe(this.conbox,"click",this.eventMouseClick);else Event.observe(document,"click",this.eventMouseClick)}},MouseDown:function(a){if(Event.isLeftClick(a)){var b=Event.element(a);if((tag_name=b.tagName.toUpperCase())&&(tag_name=='INPUT'||tag_name=='SELECT'||tag_name=='OPTION'||tag_name=='BUTTON'||tag_name=='TEXTAREA'))return;this.dis=[Event.pointerX(a)-this.currentDelta()[0],Event.pointerY(a)-this.currentDelta()[1]];if(!this.reg)this.register();Event.stop(a)}},MouseMove:function(a){var b=[Event.pointerX(a),Event.pointerY(a)];var c=b[0]-this.dis[0];var d=b[1]-this.dis[1];if(this.conbox){c=Math.min(Math.max(c,this.minleft),this.maxleft);d=Math.min(Math.max(d,this.mintop),this.maxtop)}this.setSty(c,d);Event.stop(a)},MouseUp:function(){if(this.reg){this.unregister();if(this.MouseUpEvent)this.MouseUpEvent()}},MouseClick:function(a){this.dis=this.options.haveHandLen?[Math.round(this.element.offsetWidth/2),Math.round(this.element.offsetHeight/2)]:[0,0];this.MouseMove(a);if(this.MouseUpEvent)this.MouseUpEvent()},register:function(){Event.observe(document,"mousemove",this.eventMouseMove);this.reg=true},unregister:function(){Event.stopObserving(document,"mousemove",this.eventMouseMove);this.reg=false},setSty:function(a,b){if(this.firstDrap){this.element.setStyle({left:this.currentDelta()[0]+'px',top:this.currentDelta()[1]+'px',margin:0});this.firstDrap=false}var c={};if(!this.lockX)Object.extend(c,{left:a+'px'});if(!this.lockY)Object.extend(c,{top:b+'px'});this.element.setStyle(c)},currentDelta:function(){return([parseInt(this.element.offsetLeft||'0'),parseInt(this.element.offsetTop||'0')])},parseStyle:function(a,b){var v=Math.floor(a.getStyle(b).replace('px',''));return isNaN(v)?0:v},initPostion:function(a){var b=$A(arguments)[1]?$A(arguments)[1]:a;var c=[document.body.clientWidth,document.body.clientHeight];if(this.conbox)c=[this.conbox.clientWidth,this.conbox.clientHeight];var d=[a*c[0],b*c[1]];this.setSty(d[0]+this.minleft,d[1]+this.mintop)},resetPosition:function(){if(this.firstDrap)return;var a=$A(arguments).first();var b=Position.cumulativeOffset(this.conbox);if(!this.lockX)this.element.setStyle({top:b[1]+a.top+'px'});else this.element.setStyle({top:b[0]+a.left+'px'})},scale:function(){var a,eleLen;var b=Position.cumulativeOffset(this.conbox);if(!this.lockX){a=this.conbox.clientWidth;eleLen=this.currentDelta()[0]-b[0]-this.parseStyle(this.conbox,'border-left-width');eleLen+=Math.round(this.element.offsetWidth/2)}else{a=this.conbox.clientHeight;eleLen=this.currentDelta()[1]-b[1]-this.parseStyle(this.conbox,'border-top-width');eleLen+=Math.round(this.element.offsetHeight/2)}return(eleLen/a)}};