var DrawableBounds;var $values=function(B){var A=[];for(k in B){if(B.hasOwnProperty(k)){A.push(B[k])}}return A};var $latlng_to_string=function(A){return"("+A.lat()+", "+A.lng()+")"};var InteractionMode={DRAW_SELECTION:{},PAN:{}};var RectanglePosition={TOP_LEFT:{},TOP_RIGHT:{},BOTTOM_LEFT:{},BOTTOM_RIGHT:{},UNKNOWN:{}};var setOpacity_IE=function(B,A){$(B).setStyle("filter","alpha(opacity="+(A*100)+")")};var setOpacity_FFOX=function(B,A){$(B).setStyle("opacity",A)};var setOpacity;if(window.ie){setOpacity=setOpacity_IE}else{setOpacity=setOpacity_FFOX}DrawableBounds=MapManipulator.extend({options:{onSelectionStart:Class.empty,onSelectionEnd:Class.empty,onModeChange:Class.empty,onMaskCompleted:Class.empty,onMaskCleared:Class.empty,onSelectionChange:Class.empty,strokeColor:"#868686",strokeWidth:1,fillColor:"#000000",opacity:0.2,movingThreshold:0,throwExceptions:true,showDelete:true,updateOnAttach:true,overflown:[]},initialize:function(A){this.parent({onAttach:this.handleAttach.bind(this),onDetach:this.handleDetach.bind(this),throwExceptions:true});this.setOptions(A);this.handlers=[];this.coverEvents=null;this.maskEvents=null;this.delete_button=null;this.cover=null;this.masks=null;this.mode=null;this.initialized=false;this.dragging=false;this.moving=false;this.dragging_start=null;this.dragging_end=null;this.moving_start=null;this.moving_end=null;this.gllbExplictBounds=null;this.configure()},hasExplictBounds:function(){return(this.gllbExplictBounds!==null)},handleAttach:function(){console.log("calling drawable bounds handle attach");this.cover.injectTop(this.gmap.getContainer());this.attachEvents();this.setMode(InteractionMode.PAN);if(this.options.updateOnAttach){this.updateSelection()}},handleDetach:function(){this.clearMasks();this.detachEvents()},attachEvents:function(){if(this.coverEvents!==null){this.cover.addEvents(this.coverEvents)}$$($values(this.masks)).addEvents(this.maskEvents);this.addEvent("onSelectionEnd",this.selectionEndHandler);if(this.delete_button!==null){this.addEvent("onSelectionStart",function(){this.delete_button.setStyle("display","none")}.bind(this));this.addEvent("onSelectionEnd",function(){this.delete_button.setStyle("display","block")}.bind(this));this.delete_button.addEvent("click",this.delete_click_handler)}this.handlers.push(GEvent.addListener(this.gmap,"zoomend",this.zoomHandler));this.handlers.push(GEvent.addListener(this.gmap,"moveend",this.move_end_handler))},detachEvents:function(){var A;for(A in this.coverEvents){if(this.coverEvents.hasOwnProperty(A)){this.cover.removeEvent(A,this.coverEvents[A])}}for(A in this.maskEvents){if(this.maskEvents.hasOwnProperty(A)){$$($values(this.masks)).removeEvent(A,this.maskEvents[A])}}this.removeEvent("onSelectionEnd",this.selectionEndHandler);this.handlers.each(function(B){GEvent.removeListener(B)})},updateSelection:function(){var E=new GSize(0,0);if(this.gmap.getSize().equals(E)){this.updateSelection.delay(500,this);return }var A,D;if(this.dragging_start&&this.dragging_end){var B=this.computeRectangle()[0];A=B.sw;D=B.ne}else{var C=this.gmap.getBounds();A=C.getSouthWest();D=C.getNorthEast()}this.fireEvent("onSelectionChange",[A.lat(),A.lng(),D.lat(),D.lng()])},setMode:function(A){this.mode=A;if(A===InteractionMode.DRAW_SELECTION){console.log("setting mode to draw selection");this.cover.setStyle("cursor","crosshair");if(this.initialized){this.resetMasks()}else{this.initializeMasks()}}else{if(A===InteractionMode.PAN){console.log("setting mode to pan");this.cover.setStyle("cursor","url(/static_cbi/i/open.cur), move")}}this.fireEvent("onModeChange",this.mode)},configure:function(){if(this.configured){return }var H,E,A,F,B;var G=[H,E,A,F].map(function(){var J=new Element("div",{styles:{position:"absolute",display:"none",background:this.options.fillColor}});setOpacity(J,this.options.opacity);return J},this);B=new Element("div",{styles:{position:"absolute",display:"none",border:this.options.strokeWidth+"px solid "+this.options.strokeColor}});var I=new Element("div",{styles:{position:"absolute",overflow:"hidden",display:"none",zIndex:101,background:this.options.fillColor}});setOpacity(I,this.options.opacity);this.coverEvents={mousedown:function(K){if(!this.handleCoverEvents()){return true}K=new Event(K);if(this.mode===InteractionMode.DRAW_SELECTION){this.gllbExplictBounds=null;this.hideCover();this.dragging=true;var J=this.gmap.getContainer().getPosition(this.options.overflown);this.dragging_start={x:K.page.x-J.x,y:K.page.y-J.y,latlng:this.gmap.fromContainerPixelToLatLng(new GPoint(K.page.x-J.x,K.page.y-J.y))};this.dragging_end=this.dragging_start;this.fireEvent("onSelectionStart");this.handleDrag()}}.bind(this),mousemove:function(K){if(!this.handleCoverEvents()){return true}K=new Event(K);if(this.mode===InteractionMode.DRAW_SELECTION){if(this.dragging){var J=this.gmap.getContainer().getPosition(this.options.overflown);this.dragging_end={x:K.page.x-J.x,y:K.page.y-J.y,latlng:this.gmap.fromContainerPixelToLatLng(new GPoint(K.page.x-J.x,K.page.y-J.y))};this.handleDrag()}}}.bind(this),mouseup:function(J){if(!this.handleCoverEvents()){return true}console.log("mouse up on cover");J=new Event(J);if(this.mode===InteractionMode.DRAW_SELECTION){if(this.dragging){this.dragging=false;this.setMode(InteractionMode.PAN);this.fireEvent("onSelectionEnd");this.fireEvent("onMaskCompleted")}}}.bind(this)};G.each(function(J){J.injectInside(I)});B.injectInside(I);if(this.options.showDelete){var C=new Element("button",{styles:{position:"absolute",bottom:0,right:0,display:"none"}});C.setText("Delete");C.injectInside(B);this.delete_button=C;var D=new Element("div",{styles:{position:"absolute",width:"18px",height:"18px",background:"url(/static_cbi/i/btn_close.png) no-repeat 0 0",top:"2px",right:"2px",display:"none",cursor:"pointer"}});D.injectInside(B);this.delete_button=D}this.cover=I;this.masks={topMask:G[0].setProperty("id","topmask"),leftMask:G[1].setProperty("id","leftmask"),rightMask:G[2].setProperty("id","rightmask"),bottomMask:G[3].setProperty("id","bottommask"),outlineMask:B.setProperty("id","outlinemask")};this.maskEvents={mousedown:function(J){J=new Event(J);J.preventDefault()},mousemove:function(J){J=new Event(J);J.preventDefault()},mouseup:function(J){J=new Event(J);J.preventDefault()}};this.zoomHandler=this.updateMasks.bind(this);this.selectionEndHandler=this.updateSelection.bind(this);this.delete_click_handler=function(){this.clearMasks();this.setMode(InteractionMode.PAN);this.fireEvent("onDelete");this.dragging_start=null;this.dragging_end=null;this.updateSelection();this.fireEvent("onMaskCleared")}.bind(this);this.move_end_handler=function(){this.fireEvent("onSelectionEnd")}.bind(this)},initializeMasks:function(){var A=this.gmap.getSize();$$($values(this.masks)).setStyles({height:A.height+"px",width:A.width+"px",left:"0px",top:"0px"});this.masks.outlineMask.setStyles({height:"1px",width:"1px"});this.cover.setStyles({display:"block",height:A.height+"px",width:A.width+"px",left:"0px",top:"0px"});this.initialized=true},resetMasks:function(){console.log("reseting masks");var A=this.gmap.getSize();$$($values(this.masks)).setStyles({height:A.height+"px",width:A.width+"px",left:"0px",top:"0px",display:"none"});this.masks.outlineMask.setStyles({height:"1px",width:"1px",display:"none"});this.cover.setStyles({display:"block",height:A.height+"px",width:A.width+"px",left:"0px",top:"0px",background:this.options.fillColor});setOpacity(this.cover,this.options.opacity)},clearMasks:function(){console.log("reseting masks");var A=this.gmap.getSize();$$($values(this.masks)).setStyles({height:A.height+"px",width:A.width+"px",left:"0px",top:"0px",display:"none"});this.masks.outlineMask.setStyles({height:"1px",width:"1px",display:"none"});this.cover.setStyles({display:"none",height:A.height+"px",width:A.width+"px",left:"0px",top:"0px",background:this.options.fillColor});setOpacity(this.cover,this.options.opacity);this.fireEvent("onMaskCleared")},latlng2pixel:function(A){return this.gmap.fromLatLngToContainerPixel(A)},computeRectangle:function(){var B=this.latlng2pixel(this.dragging_start.latlng);var N=this.latlng2pixel(this.dragging_end.latlng);var M=Math.max(B.x,N.x);var E=Math.min(B.x,N.x);var F=Math.abs(B.x-N.x);var I=Math.min(B.y,N.y);var L=Math.max(B.y,N.y);var K=Math.abs(B.y-N.y);if(this.gllbExplictBounds){var J=this.gllbExplictBounds.toSpan();var D=Math.pow(2,this.gmap.getZoom())*256/360;F=Math.floor(J.lng()*D);M=E+F}var H={w:F,h:K,t:I,l:E,r:M,b:L,ne:null,sw:null};var A=(N.x==H.l);var C=(N.y==H.t);var G;if(C&&A){G=RectanglePosition.TOP_LEFT;H.ne=new GLatLng(this.dragging_end.latlng.lat(),this.dragging_start.latlng.lng());H.sw=new GLatLng(this.dragging_start.latlng.lat(),this.dragging_end.latlng.lng())}else{if(C&&!A){G=RectanglePosition.TOP_RIGHT;H.ne=this.dragging_end.latlng;H.sw=this.dragging_start.latlng}else{if(!C&&A){G=RectanglePosition.BOTTOM_LEFT;H.ne=this.dragging_start.latlng;H.sw=this.dragging_end.latlng}else{if(!C&&!A){G=RectanglePosition.BOTTOM_RIGHT;H.ne=new GLatLng(this.dragging_start.latlng.lat(),this.dragging_end.latlng.lng());H.sw=new GLatLng(this.dragging_end.latlng.lat(),this.dragging_start.latlng.lng())}else{alert("uh oh")}}}}return[H,G]},updateMasks:function(){if(!this.dragging_start){return }var B=this.computeRectangle();var J=B[0];var E=B[1];var F=this.gmap.getSize();var H=F.height;var C=F.width;var M;M=this.masks.topMask;styles={display:"block",height:Math.max(0,J.t)};M.setStyles(styles);console.log("setting top styles:",styles);M=this.masks.leftMask;M.setStyles({display:"block",width:Math.max(0,J.l),top:Math.max(0,J.t),height:Math.max(0,H-J.t)});var L=J.r;var G=H;var I=J.t;if(window.ie){if(E===RectanglePosition.BOTTOM_RIGHT){L=L-(this.options.strokeWidth*6)}else{if(E===RectanglePosition.TOP_LEFT){L=L+(this.options.strokeWidth*4)}else{if(E===RectanglePosition.TOP_RIGHT){L=L+(this.options.strokeWidth*2)}else{if(E===RectanglePosition.BOTTOM_LEFT){L=L+(this.options.strokeWidth*4)}}}}}else{if((E!==RectanglePosition.BOTTOM_RIGHT)&&(E!==RectanglePosition.TOP_RIGHT)){}}M=this.masks.rightMask;styles={display:"block",top:Math.max(0,I),left:L,height:G};M.setStyles(styles);console.log("right mask:",styles);var L=J.l;var I=J.b;var A=J.w;if(window.ie){if(E===RectanglePosition.BOTTOM_RIGHT){I=I-(this.options.strokeWidth*6);A=A-(this.options.strokeWidth*6)}else{if(E===RectanglePosition.TOP_LEFT){I=I+(this.options.strokeWidth*4);A=A+(this.options.strokeWidth*4)}else{if(E===RectanglePosition.TOP_RIGHT){A=A+(this.options.strokeWidth*2);I=I+(this.options.strokeWidth*4)}else{if(E===RectanglePosition.BOTTOM_LEFT){A=A+(this.options.strokeWidth*4);I=I+(this.options.strokeWidth*2)}}}}}else{if((E!==RectanglePosition.BOTTOM_RIGHT)&&(E!==RectanglePosition.TOP_RIGHT)){}}M=this.masks.bottomMask;styles={display:"block",left:L,top:I,width:A};M.setStyles(styles);console.log("bottom mask:",styles);M=this.masks.outlineMask;var K=J.w;var D=J.h;if(window.gecko){if(E===RectanglePosition.TOP_RIGHT){K=K-(this.options.strokeWidth*2)}else{if(E===RectanglePosition.BOTTOM_RIGHT){K=K-(this.options.strokeWidth*2);D=D-(this.options.strokeWidth*2)}else{if(E===RectanglePosition.BOTTOM_LEFT){D=D-(this.options.strokeWidth*2)}}}}else{if(window.ie){if(E===RectanglePosition.BOTTOM_LEFT){K=K+(this.options.strokeWidth*2)}else{if(E===RectanglePosition.TOP_RIGHT){D=D+(this.options.strokeWidth*2)}else{if(E===RectanglePosition.TOP_LEFT){K=K+(this.options.strokeWidth*2);D=D+(this.options.strokeWidth*2)}else{if(E===RectanglePosition.BOTTOM_RIGHT){K=K-(this.options.strokeWidth*8);D=D-(this.options.strokeWidth*8)}}}}}}K=Math.max(1,K);D=Math.max(1,D);M.setStyles({display:"block",top:J.t,left:J.l,height:D+"px",width:K+"px"})},handleDrag:function(){if(!this.dragging){return }this.updateMasks()},setBounds:function(D){this.gllbExplictBounds=D;var C;C=D.getSouthWest();if(C.lng()==180&&(360-D.toSpan().lng())<1){C=new GLatLng(C.lat(),-180)}var A={latlng:C};var B={latlng:D.getNorthEast()};console.log("start:",A);console.log("end:",B);this.dragging_start=A;this.dragging_end=B;this.updateMasks();this.fireEvent("onMaskCompleted")},hideCover:function(){this.cover.setStyles({background:"transparent"});setOpacity(this.cover,1)},handleCoverEvents:function(){return true},simulateDelete:function(){if(this.options.showDelete){this.delete_button.fireEvent("click")}}});DrawableBounds.implement(new Options(),new Events())
