CwCrop=new Class({Implements:[Options,Events],options:{minsize:{x:60,y:60},maxsize:{x:200,y:200},originalsize:{x:1,y:1},fixedratio:false,maxratio:{x:2,y:2},initialposition:{x:10,y:10},initialmax:false,classactive:"active",cropframe:"cropframe",imgframe:"imglayer",cropdims:"cropdims",cropbtn:"cropbtn",draghandle:"draghandle",resizehandle:"resizeHandleXY",onCrop:$empty},initialize:function(a){this.setOptions(a);if(!$(this.options.cropframe)||!$(this.options.imgframe)){return}this.elemsize=$(this.options.imgframe).getSize();if(this.elemsize.x==0){this.elemsize=$(this.options.imgframe).getOffsetParent().getSize()}this.orig_to_scaled={x:1,y:1};if(this.options.originalsize.x>1&&this.options.originalsize.y>1){this.orig_to_scaled.x=this.options.originalsize.x/this.elemsize.x;this.orig_to_scaled.y=this.options.originalsize.y/this.elemsize.y}this.options.maxsize.x=(this.options.maxsize.x*(1/this.orig_to_scaled.x)).limit(1,this.elemsize.x-2);this.options.maxsize.y=(this.options.maxsize.y*(1/this.orig_to_scaled.y)).limit(1,this.elemsize.y-2);this.options.minsize.x=(this.options.minsize.x*(1/this.orig_to_scaled.x)).limit(1,this.elemsize.x-2);this.options.minsize.y=(this.options.minsize.y*(1/this.orig_to_scaled.y)).limit(1,this.elemsize.y-2);this.limits={x:[this.options.minsize.x,this.options.maxsize.x],y:[this.options.minsize.y,this.options.maxsize.y]};if(this.options.initialmax){$(this.options.cropframe).setStyle("top",0);$(this.options.cropframe).setStyle("left",0);$(this.options.cropframe).setStyle("width",this.limits.x[1].toInt());$(this.options.cropframe).setStyle("height",this.limits.y[1].toInt())}else{$(this.options.cropframe).setStyle("top",this.options.initialposition.x);$(this.options.cropframe).setStyle("left",this.options.initialposition.y);$(this.options.cropframe).setStyle("width",this.limits.x[0].toInt());$(this.options.cropframe).setStyle("height",this.limits.y[0].toInt())}if(this.options.fixedratio){$(this.options.cropframe).setStyle("width",$(this.options.cropframe).getStyle("height").toInt()*this.options.fixedratio)}this.updateCropDims($(this.options.cropframe));this.myMove=new Drag.Move($(this.options.cropframe),{style:true,precalculate:true,snap:1,grid:false,container:$(this.options.imgframe),includeMargins:false,checkDroppables:false,handle:$(this.options.draghandle),onStart:function(b){b.addClass(this.options.classactive)}.bind(this),onDrag:function(b){this.moveBgImage(b);this.updateCropDims(b,true)}.bind(this),onComplete:function(b){b.removeClass(this.options.classactive);this.updateCropDims(b);this.recalcResize(b)}.bind(this)});this.moveBgImage($(this.options.cropframe));this.myResizeXY=$(this.options.cropframe).makeResizable({style:true,precalculate:true,snap:1,grid:false,handle:$(this.options.resizehandle),limit:this.limits,onStart:function(b){b.addClass(this.options.classactive)}.bind(this),onDrag:function(b,c){this.checkRatio(b,c);this.updateCropDims(b)}.bind(this),onComplete:function(b){b.removeClass(this.options.classactive)}.bind(this)});if($(this.options.cropbtn)){$(this.options.cropbtn).addEvent("click",function(){this.doCrop()}.bind(this))}},moveBgImage:function(a){a.setStyle("background-position","-"+(a.getStyle("left").toInt()+1)+"px -"+(a.getStyle("top").toInt()+1)+"px")},checkRatio:function(a,b){ratio=a.getStyle("width").toInt()/a.getStyle("height").toInt();if(this.options.fixedratio){if(ratio!=this.options.fixedratio){a.setStyle("width",a.getStyle("height").toInt()*this.options.fixedratio)}return}if(b.shift){if(ratio>1){a.setStyle("width",a.getStyle("height").toInt())}else{if(ratio<1){a.setStyle("height",a.getStyle("width").toInt())}}return}if(ratio>1&&ratio>this.options.maxratio.x){a.setStyle("width",a.getStyle("height").toInt()*this.options.maxratio.x)}else{if(ratio<1&&ratio<(1/this.options.maxratio.y)){a.setStyle("height",a.getStyle("width").toInt()*this.options.maxratio.y)}}},recalcResize:function(a){this.limits.x[1]=this.elemsize.x-(a.getStyle("left").toInt())-2;this.limits.y[1]=this.elemsize.y-(a.getStyle("top").toInt())-2;this.limits.x[1]=Math.round(Math.min(this.limits.x[1],this.options.maxsize.x));this.limits.y[1]=Math.round(Math.min(this.limits.y[1],this.options.maxsize.y));this.myResizeXY.options.limit=this.limits},updateCropDims:function(b,a){if(!$(this.options.cropdims)){return}if(a){xresized=Math.round(b.getStyle("left").toInt()*this.orig_to_scaled.x);yresized=Math.round(b.getStyle("top").toInt()*this.orig_to_scaled.y);out=xresized+", "+yresized}else{xresized=Math.round(b.getStyle("width").toInt()*this.orig_to_scaled.x);yresized=Math.round(b.getStyle("height").toInt()*this.orig_to_scaled.y);out=xresized+" x "+yresized}$(this.options.cropdims).set("html",out)},doCrop:function(){var d=$(this.options.cropframe);var a=Math.round(d.getStyle("left").toInt()*this.orig_to_scaled.x);var e=Math.round(d.getStyle("top").toInt()*this.orig_to_scaled.y);var b=Math.round(d.getStyle("width").toInt()*this.orig_to_scaled.x);var c=Math.round(d.getStyle("height").toInt()*this.orig_to_scaled.y);if(a>=0&&e>=0&&c>=this.options.minsize.y&&b>=this.options.minsize.x){this.fireEvent("onCrop",{x:a,y:e,w:b,h:c})}}});