(function($){var abs=Math.abs,max=Math.max,min=Math.min,round=Math.round;function div(){return $('
');} $.imgAreaSelect=function(img,options){var $img=$(img),imgLoaded,$box=div(),$area=div(),$border=div().add(div()).add(div()).add(div()),$outer=div().add(div()).add(div()).add(div()),$handles=$([]),$areaOpera,left,top,imgOfs={left:0,top:0},imgWidth,imgHeight,$parent,parOfs={left:0,top:0},zIndex=0,position='absolute',startX,startY,scaleX,scaleY,resize,minWidth,minHeight,maxWidth,maxHeight,aspectRatio,shown,x1,y1,x2,y2,selection={x1:0,y1:0,x2:0,y2:0,width:0,height:0},docElem=document.documentElement,ua=navigator.userAgent,$p,d,i,o,w,h,adjusted;function viewX(x){return x+ imgOfs.left- parOfs.left;} function viewY(y){return y+ imgOfs.top- parOfs.top;} function selX(x){return x- imgOfs.left+ parOfs.left;} function selY(y){return y- imgOfs.top+ parOfs.top;} function evX(event){return event.pageX- parOfs.left;} function evY(event){return event.pageY- parOfs.top;} function getSelection(noScale){var sx=noScale||scaleX,sy=noScale||scaleY;return{x1:round(selection.x1*sx),y1:round(selection.y1*sy),x2:round(selection.x2*sx),y2:round(selection.y2*sy),width:round(selection.x2*sx)- round(selection.x1*sx),height:round(selection.y2*sy)- round(selection.y1*sy)};} function setSelection(x1,y1,x2,y2,noScale){var sx=noScale||scaleX,sy=noScale||scaleY;selection={x1:round(x1/sx||0),y1:round(y1/sy||0),x2:round(x2/sx||0),y2:round(y2/sy||0)};selection.width=selection.x2- selection.x1;selection.height=selection.y2- selection.y1;} function adjust(){if(!imgLoaded||!$img.width()) return;imgOfs={left:round($img.offset().left),top:round($img.offset().top)};imgWidth=$img.innerWidth();imgHeight=$img.innerHeight();imgOfs.top+=($img.outerHeight()- imgHeight)>>1;imgOfs.left+=($img.outerWidth()- imgWidth)>>1;minWidth=round(options.minWidth/scaleX)||0;minHeight=round(options.minHeight/scaleY)||0;maxWidth=round(min(options.maxWidth/scaleX||1<<24,imgWidth));maxHeight=round(min(options.maxHeight/scaleY||1<<24,imgHeight));if($().jquery=='1.3.2'&&position=='fixed'&&!docElem['getBoundingClientRect']) {imgOfs.top+=max(document.body.scrollTop,docElem.scrollTop);imgOfs.left+=max(document.body.scrollLeft,docElem.scrollLeft);} parOfs=/absolute|relative/.test($parent.css('position'))?{left:round($parent.offset().left)- $parent.scrollLeft(),top:round($parent.offset().top)- $parent.scrollTop()}:position=='fixed'?{left:$(document).scrollLeft(),top:$(document).scrollTop()}:{left:0,top:0};left=viewX(0);top=viewY(0);if(selection.x2>imgWidth||selection.y2>imgHeight) doResize();} function update(resetKeyPress){if(!shown)return;$box.css({left:viewX(selection.x1),top:viewY(selection.y1)}).add($area).width(w=selection.width).height(h=selection.height);$area.add($border).add($handles).css({left:0,top:0});$border.width(max(w- $border.outerWidth()+ $border.innerWidth(),0)).height(max(h- $border.outerHeight()+ $border.innerHeight(),0));$($outer[0]).css({left:left,top:top,width:selection.x1,height:imgHeight});$($outer[1]).css({left:left+ selection.x1,top:top,width:w,height:selection.y1});$($outer[2]).css({left:left+ selection.x2,top:top,width:imgWidth- selection.x2,height:imgHeight});$($outer[3]).css({left:left+ selection.x1,top:top+ selection.y2,width:w,height:imgHeight- selection.y2});w-=$handles.outerWidth();h-=$handles.outerHeight();switch($handles.length){case 8:$($handles[4]).css({left:w>>1});$($handles[5]).css({left:w,top:h>>1});$($handles[6]).css({left:w>>1,top:h});$($handles[7]).css({top:h>>1});case 4:$handles.slice(1,3).css({left:w});$handles.slice(2,4).css({top:h});} if(resetKeyPress!==false){if($.imgAreaSelect.onKeyPress!=docKeyPress) $(document).unbind($.imgAreaSelect.keyPress,$.imgAreaSelect.onKeyPress);if(options.keys) $(document)[$.imgAreaSelect.keyPress]($.imgAreaSelect.onKeyPress=docKeyPress);} if(msie&&$border.outerWidth()- $border.innerWidth()==2){$border.css('margin',0);setTimeout(function(){$border.css('margin','auto');},0);}} function doUpdate(resetKeyPress){adjust();update(resetKeyPress);x1=viewX(selection.x1);y1=viewY(selection.y1);x2=viewX(selection.x2);y2=viewY(selection.y2);} function hide($elem,fn){options.fadeSpeed?$elem.fadeOut(options.fadeSpeed,fn):$elem.hide();} function areaMouseMove(event){var x=selX(evX(event))- selection.x1,y=selY(evY(event))- selection.y1;if(!adjusted){adjust();adjusted=true;$box.one('mouseout',function(){adjusted=false;});} resize='';if(options.resizable){if(y<=options.resizeMargin) resize='n';else if(y>=selection.height- options.resizeMargin) resize='s';if(x<=options.resizeMargin) resize+='w';else if(x>=selection.width- options.resizeMargin) resize+='e';} $box.css('cursor',resize?resize+'-resize':options.movable?'move':'');if($areaOpera) $areaOpera.toggle();} function docMouseUp(event){$('body').css('cursor','');if(options.autoHide||selection.width*selection.height==0) hide($box.add($outer),function(){$(this).hide();});$(document).unbind('mousemove',selectingMouseMove);$box.mousemove(areaMouseMove);options.onSelectEnd(img,getSelection());} function areaMouseDown(event){if(event.which!=1)return false;adjust();if(resize){$('body').css('cursor',resize+'-resize');x1=viewX(selection[/w/.test(resize)?'x2':'x1']);y1=viewY(selection[/n/.test(resize)?'y2':'y1']);$(document).mousemove(selectingMouseMove).one('mouseup',docMouseUp);$box.unbind('mousemove',areaMouseMove);} else if(options.movable){startX=left+ selection.x1- evX(event);startY=top+ selection.y1- evY(event);$box.unbind('mousemove',areaMouseMove);$(document).mousemove(movingMouseMove).one('mouseup',function(){options.onSelectEnd(img,getSelection());$(document).unbind('mousemove',movingMouseMove);$box.mousemove(areaMouseMove);});} else $img.mousedown(event);return false;} function fixAspectRatio(xFirst){if(aspectRatio) if(xFirst){x2=max(left,min(left+ imgWidth,x1+ abs(y2- y1)*aspectRatio*(x2>x1||-1)));y2=round(max(top,min(top+ imgHeight,y1+ abs(x2- x1)/ aspectRatio * (y2 > y1 || -1)))); x2=round(x2);} else{y2=max(top,min(top+ imgHeight,y1+ abs(x2- x1)/ aspectRatio * (y2 > y1 || -1))); x2=round(max(left,min(left+ imgWidth,x1+ abs(y2- y1)*aspectRatio*(x2>x1||-1))));y2=round(y2);}} function doResize(){x1=min(x1,left+ imgWidth);y1=min(y1,top+ imgHeight);if(abs(x2- x1)