var CropDraggable=Class.create();Object.extend(Object.extend(CropDraggable.prototype,Draggable.prototype),{initialize:function(a){this.options=Object.extend({drawMethod:function(){}},arguments[1]||{});this.element=$(a);this.handle=this.element;this.delta=this.currentDelta();this.dragging=false;this.eventMouseDown=this.initDrag.bindAsEventListener(this);Event.observe(this.handle,"mousedown",this.eventMouseDown);Draggables.register(this)},draw:function(a){var b=Position.cumulativeOffset(this.element);var d=this.currentDelta();b[0]-=d[0];b[1]-=d[1];var p=[0,1].map(function(i){return(a[i]-b[i]-this.offset[i])}.bind(this));this.options.drawMethod(p)}});var Cropper={};Cropper.Img=Class.create();Cropper.Img.prototype={initialize:function(b,c){this.options=Object.extend({ratioDim:{x:0,y:0},minWidth:0,minHeight:0,displayOnInit:false,onEndCrop:Prototype.emptyFunction,captureKeys:true,onloadCoords:null,maxWidth:0,maxHeight:0},c||{});this.img=$(b);this.clickCoords={x:0,y:0};this.dragging=false;this.resizing=false;this.isWebKit=/Konqueror|Safari|KHTML/.test(navigator.userAgent);this.isIE=/MSIE/.test(navigator.userAgent);this.isOpera8=/Opera\s[1-8]/.test(navigator.userAgent);this.ratioX=0;this.ratioY=0;this.attached=false;this.fixedWidth=(this.options.maxWidth>0&&(this.options.minWidth>=this.options.maxWidth));this.fixedHeight=(this.options.maxHeight>0&&(this.options.minHeight>=this.options.maxHeight));if(typeof this.img=="undefined"){return}$A(document.getElementsByTagName("script")).each(function(s){if(s.src.match(/cropper\.js/)){var a=s.src.replace(/cropper\.js(.*)?/,"")}});if(this.options.ratioDim.x>0&&this.options.ratioDim.y>0){var d=this.getGCD(this.options.ratioDim.x,this.options.ratioDim.y);this.ratioX=this.options.ratioDim.x/d;this.ratioY=this.options.ratioDim.y/d}this.subInitialize();if(this.img.complete||this.isWebKit){this.onLoad()}else{Event.observe(this.img,"load",this.onLoad.bindAsEventListener(this))}},getGCD:function(a,b){if(b==0){return a}return this.getGCD(b,a%b)},onLoad:function(){var a="imgCrop_";var b=this.img.parentNode;var c="";if(this.isOpera8){c=" opera8"}this.imgWrap=Builder.node("div",{"class":a+"wrap"+c});this.north=Builder.node("div",{"class":a+"overlay "+a+"north"},[Builder.node("span")]);this.east=Builder.node("div",{"class":a+"overlay "+a+"east"},[Builder.node("span")]);this.south=Builder.node("div",{"class":a+"overlay "+a+"south"},[Builder.node("span")]);this.west=Builder.node("div",{"class":a+"overlay "+a+"west"},[Builder.node("span")]);var d=[this.north,this.east,this.south,this.west];this.dragArea=Builder.node("div",{"class":a+"dragArea"},d);this.handleN=Builder.node("div",{"class":a+"handle "+a+"handleN"});this.handleNE=Builder.node("div",{"class":a+"handle "+a+"handleNE"});this.handleE=Builder.node("div",{"class":a+"handle "+a+"handleE"});this.handleSE=Builder.node("div",{"class":a+"handle "+a+"handleSE"});this.handleS=Builder.node("div",{"class":a+"handle "+a+"handleS"});this.handleSW=Builder.node("div",{"class":a+"handle "+a+"handleSW"});this.handleW=Builder.node("div",{"class":a+"handle "+a+"handleW"});this.handleNW=Builder.node("div",{"class":a+"handle "+a+"handleNW"});this.selArea=Builder.node("div",{"class":a+"selArea"},[Builder.node("div",{"class":a+"marqueeHoriz "+a+"marqueeNorth"},[Builder.node("span")]),Builder.node("div",{"class":a+"marqueeVert "+a+"marqueeEast"},[Builder.node("span")]),Builder.node("div",{"class":a+"marqueeHoriz "+a+"marqueeSouth"},[Builder.node("span")]),Builder.node("div",{"class":a+"marqueeVert "+a+"marqueeWest"},[Builder.node("span")]),this.handleN,this.handleNE,this.handleE,this.handleSE,this.handleS,this.handleSW,this.handleW,this.handleNW,Builder.node("div",{"class":a+"clickArea"})]);this.imgWrap.appendChild(this.img);this.imgWrap.appendChild(this.dragArea);this.dragArea.appendChild(this.selArea);this.dragArea.appendChild(Builder.node("div",{"class":a+"clickArea"}));b.appendChild(this.imgWrap);this.startDragBind=this.startDrag.bindAsEventListener(this);Event.observe(this.dragArea,"mousedown",this.startDragBind);this.onDragBind=this.onDrag.bindAsEventListener(this);Event.observe(document,"mousemove",this.onDragBind);this.endCropBind=this.endCrop.bindAsEventListener(this);Event.observe(document,"mouseup",this.endCropBind);this.resizeBind=this.startResize.bindAsEventListener(this);this.handles=[this.handleN,this.handleNE,this.handleE,this.handleSE,this.handleS,this.handleSW,this.handleW,this.handleNW];this.registerHandles(true);if(this.options.captureKeys){this.keysBind=this.handleKeys.bindAsEventListener(this);Event.observe(document,"keypress",this.keysBind)}new CropDraggable(this.selArea,{drawMethod:this.moveArea.bindAsEventListener(this)});this.setParams()},registerHandles:function(a){for(var i=0;i<this.handles.length;i++){var b=$(this.handles[i]);if(a){var c=false;if(this.fixedWidth&&this.fixedHeight){c=true}else{if(this.fixedWidth||this.fixedHeight){var d=b.className.match(/([S|N][E|W])$/);var e=b.className.match(/(E|W)$/);var f=b.className.match(/(N|S)$/);if(d){c=true}else{if(this.fixedWidth&&e){c=true}else{if(this.fixedHeight&&f){c=true}}}}}if(c){b.hide()}else{Event.observe(b,"mousedown",this.resizeBind)}}else{b.show();Event.stopObserving(b,"mousedown",this.resizeBind)}}},setParams:function(){this.imgW=this.img.width;this.imgH=this.img.height;$(this.north).setStyle({height:0});$(this.east).setStyle({width:0,height:0});$(this.south).setStyle({height:0});$(this.west).setStyle({width:0,height:0});$(this.imgWrap).setStyle({"width":this.imgW+"px","height":this.imgH+"px"});$(this.selArea).hide();var a={x1:0,y1:0,x2:0,y2:0};var b=false;if(this.options.onloadCoords!=null){a=this.cloneCoords(this.options.onloadCoords);b=true}else{if(this.options.ratioDim.x>0&&this.options.ratioDim.y>0){a.x1=Math.ceil((this.imgW-this.options.ratioDim.x)/2);a.y1=Math.ceil((this.imgH-this.options.ratioDim.y)/2);a.x2=a.x1+this.options.ratioDim.x;a.y2=a.y1+this.options.ratioDim.y;b=true}}this.setAreaCoords(a,false,false,1);if(this.options.displayOnInit&&b){this.selArea.show();this.drawArea();this.endCrop()}this.attached=true},remove:function(){if(this.attached){this.attached=false;this.imgWrap.parentNode.insertBefore(this.img,this.imgWrap);this.imgWrap.parentNode.removeChild(this.imgWrap);Event.stopObserving(this.dragArea,"mousedown",this.startDragBind);Event.stopObserving(document,"mousemove",this.onDragBind);Event.stopObserving(document,"mouseup",this.endCropBind);this.registerHandles(false);if(this.options.captureKeys){Event.stopObserving(document,"keypress",this.keysBind)}}},reset:function(){if(!this.attached){this.onLoad()}else{this.setParams()}this.endCrop()},handleKeys:function(e){var a={x:0,y:0};if(!this.dragging){switch(e.keyCode){case(37):a.x=-1;break;case(38):a.y=-1;break;case(39):a.x=1;break;case(40):a.y=1;break}if(a.x!=0||a.y!=0){if(e.shiftKey){a.x*=10;a.y*=10}this.moveArea([this.areaCoords.x1+a.x,this.areaCoords.y1+a.y]);Event.stop(e)}}},calcW:function(){return(this.areaCoords.x2-this.areaCoords.x1)},calcH:function(){return(this.areaCoords.y2-this.areaCoords.y1)},moveArea:function(a){this.setAreaCoords({x1:a[0],y1:a[1],x2:a[0]+this.calcW(),y2:a[1]+this.calcH()},true,false);this.drawArea()},cloneCoords:function(a){return{x1:a.x1,y1:a.y1,x2:a.x2,y2:a.y2}},setAreaCoords:function(a,b,c,d,e){if(b){var f=a.x2-a.x1;var g=a.y2-a.y1;if(a.x1<0){a.x1=0;a.x2=f}if(a.y1<0){a.y1=0;a.y2=g}if(a.x2>this.imgW){a.x2=this.imgW;a.x1=this.imgW-f}if(a.y2>this.imgH){a.y2=this.imgH;a.y1=this.imgH-g}}else{if(a.x1<0){a.x1=0}if(a.y1<0){a.y1=0}if(a.x2>this.imgW){a.x2=this.imgW}if(a.y2>this.imgH){a.y2=this.imgH}if(d!=null){if(this.ratioX>0){this.applyRatio(a,{x:this.ratioX,y:this.ratioY},d,e)}else{if(c){this.applyRatio(a,{x:1,y:1},d,e)}}var h=[this.options.minWidth,this.options.minHeight];var i=[this.options.maxWidth,this.options.maxHeight];if(h[0]>0||h[1]>0||i[0]>0||i[1]>0){var j={a1:a.x1,a2:a.x2};var k={a1:a.y1,a2:a.y2};var l={min:0,max:this.imgW};var m={min:0,max:this.imgH};if((h[0]!=0||h[1]!=0)&&c){if(h[0]>0){h[1]=h[0]}else{if(h[1]>0){h[0]=h[1]}}}if((i[0]!=0||i[0]!=0)&&c){if(i[0]>0&&i[0]<=i[1]){i[1]=i[0]}else{if(i[1]>0&&i[1]<=i[0]){i[0]=i[1]}}}if(h[0]>0){this.applyDimRestriction(j,h[0],d.x,l,"min")}if(h[1]>1){this.applyDimRestriction(k,h[1],d.y,m,"min")}if(i[0]>0){this.applyDimRestriction(j,i[0],d.x,l,"max")}if(i[1]>1){this.applyDimRestriction(k,i[1],d.y,m,"max")}a={x1:j.a1,y1:k.a1,x2:j.a2,y2:k.a2}}}}this.areaCoords=a},applyDimRestriction:function(a,b,c,d,e){var f;if(e=="min"){f=((a.a2-a.a1)<b)}else{f=((a.a2-a.a1)>b)}if(f){if(c==1){a.a2=a.a1+b}else{a.a1=a.a2-b}if(a.a1<d.min){a.a1=d.min;a.a2=b}else{if(a.a2>d.max){a.a1=d.max-b;a.a2=d.max}}}},applyRatio:function(a,b,c,d){var e;if(d=="N"||d=="S"){e=this.applyRatioToAxis({a1:a.y1,b1:a.x1,a2:a.y2,b2:a.x2},{a:b.y,b:b.x},{a:c.y,b:c.x},{min:0,max:this.imgW});a.x1=e.b1;a.y1=e.a1;a.x2=e.b2;a.y2=e.a2}else{e=this.applyRatioToAxis({a1:a.x1,b1:a.y1,a2:a.x2,b2:a.y2},{a:b.x,b:b.y},{a:c.x,b:c.y},{min:0,max:this.imgH});a.x1=e.a1;a.y1=e.b1;a.x2=e.a2;a.y2=e.b2}},applyRatioToAxis:function(a,b,c,d){var e=Object.extend(a,{});var f=e.a2-e.a1;var g=Math.floor(f*b.b/b.a);var h;var i;var j=null;if(c.b==1){h=e.b1+g;if(h>d.max){h=d.max;j=h-e.b1}e.b2=h}else{h=e.b2-g;if(h<d.min){h=d.min;j=h+e.b2}e.b1=h}if(j!=null){i=Math.floor(j*b.a/b.b);if(c.a==1){e.a2=e.a1+i}else{e.a1=e.a1=e.a2-i}}return e},drawArea:function(){var a=this.calcW();var b=this.calcH();var c="px";var d=[this.areaCoords.x1+c,this.areaCoords.y1+c,a+c,b+c,this.areaCoords.x2+c,this.areaCoords.y2+c,(this.img.width-this.areaCoords.x2)+c,(this.img.height-this.areaCoords.y2)+c];var e=this.selArea.style;e.left=d[0];e.top=d[1];e.width=d[2];e.height=d[3];var f=Math.ceil((a-6)/2)+c;var g=Math.ceil((b-6)/2)+c;this.handleN.style.left=f;this.handleE.style.top=g;this.handleS.style.left=f;this.handleW.style.top=g;this.north.style.height=d[1];var h=this.east.style;h.top=d[1];h.height=d[3];h.left=d[4];h.width=d[6];var i=this.south.style;i.top=d[5];i.height=d[7];var j=this.west.style;j.top=d[1];j.height=d[3];j.width=d[0];this.subDrawArea();this.forceReRender()},forceReRender:function(){if(this.isIE||this.isWebKit){var n=document.createTextNode(" ");var d,el,fixEL,i;if(this.isIE){fixEl=this.selArea}else{if(this.isWebKit){fixEl=document.getElementsByClassName("imgCrop_marqueeSouth",this.imgWrap)[0];d=Builder.node("div","");d.style.visibility="hidden";var a=["SE","S","SW"];for(i=0;i<a.length;i++){el=document.getElementsByClassName("imgCrop_handle"+a[i],this.selArea)[0];if(el.childNodes.length){el.removeChild(el.childNodes[0])}el.appendChild(d)}}}fixEl.appendChild(n);fixEl.removeChild(n)}},startResize:function(e){this.startCoords=this.cloneCoords(this.areaCoords);this.resizing=true;this.resizeHandle=Event.element(e).classNames().toString().replace(/([^N|NE|E|SE|S|SW|W|NW])+/,"");Event.stop(e)},startDrag:function(e){this.selArea.show();this.clickCoords=this.getCurPos(e);this.setAreaCoords({x1:this.clickCoords.x,y1:this.clickCoords.y,x2:this.clickCoords.x,y2:this.clickCoords.y},false,false,null);this.dragging=true;this.onDrag(e);Event.stop(e)},getCurPos:function(e){var a=this.imgWrap,wrapOffsets=Position.cumulativeOffset(a);while(a.nodeName!="BODY"){wrapOffsets[1]-=a.scrollTop||0;wrapOffsets[0]-=a.scrollLeft||0;a=a.parentNode}return curPos={x:Event.pointerX(e)-wrapOffsets[0],y:Event.pointerY(e)-wrapOffsets[1]}},onDrag:function(e){if(this.dragging||this.resizing){var a=null;var b=this.getCurPos(e);var c=this.cloneCoords(this.areaCoords);var d={x:1,y:1};if(this.dragging){if(b.x<this.clickCoords.x){d.x=-1}if(b.y<this.clickCoords.y){d.y=-1}this.transformCoords(b.x,this.clickCoords.x,c,"x");this.transformCoords(b.y,this.clickCoords.y,c,"y")}else{if(this.resizing){a=this.resizeHandle;if(a.match(/E/)){this.transformCoords(b.x,this.startCoords.x1,c,"x");if(b.x<this.startCoords.x1){d.x=-1}}else{if(a.match(/W/)){this.transformCoords(b.x,this.startCoords.x2,c,"x");if(b.x<this.startCoords.x2){d.x=-1}}}if(a.match(/N/)){this.transformCoords(b.y,this.startCoords.y2,c,"y");if(b.y<this.startCoords.y2){d.y=-1}}else{if(a.match(/S/)){this.transformCoords(b.y,this.startCoords.y1,c,"y");if(b.y<this.startCoords.y1){d.y=-1}}}}}this.setAreaCoords(c,false,e.shiftKey,d,a);this.drawArea();Event.stop(e)}},transformCoords:function(a,b,c,d){var e=[a,b];if(a>b){e.reverse()}c[d+"1"]=e[0];c[d+"2"]=e[1]},endCrop:function(){this.dragging=false;this.resizing=false;this.options.onEndCrop(this.areaCoords,{width:this.calcW(),height:this.calcH()})},subInitialize:function(){},subDrawArea:function(){}};Cropper.ImgWithPreview=Class.create();Object.extend(Object.extend(Cropper.ImgWithPreview.prototype,Cropper.Img.prototype),{subInitialize:function(){this.hasPreviewImg=false;if(typeof(this.options.previewWrap)!="undefined"&&this.options.minWidth>0&&this.options.minHeight>0){this.previewWrap=$(this.options.previewWrap);this.previewImg=this.img.cloneNode(false);this.previewImg.id="imgCrop_"+this.previewImg.id;this.options.displayOnInit=true;this.hasPreviewImg=true;this.previewWrap.addClassName("imgCrop_previewWrap");this.previewWrap.setStyle({width:this.options.minWidth+"px",height:this.options.minHeight+"px"});this.previewWrap.appendChild(this.previewImg)}},subDrawArea:function(){if(this.hasPreviewImg){var a=this.calcW();var b=this.calcH();var c={x:this.imgW/a,y:this.imgH/b};var d={x:a/this.options.minWidth,y:b/this.options.minHeight};var e={w:Math.ceil(this.options.minWidth*c.x)+"px",h:Math.ceil(this.options.minHeight*c.y)+"px",x:"-"+Math.ceil(this.areaCoords.x1/d.x)+"px",y:"-"+Math.ceil(this.areaCoords.y1/d.y)+"px"};var f=this.previewImg.style;f.width=e.w;f.height=e.h;f.left=e.x;f.top=e.y}}});
