function DragZoomControl(B,C,F){this.globals={draggingOn:false,cornerTopDiv:null,cornerRightDiv:null,cornerBottomDiv:null,cornerLeftDiv:null,mapPosition:null,outlineDiv:null,mapWidth:0,mapHeight:0,mapRatio:0,startX:0,startY:0,borderCorrection:0};this.globals.style={opacity:0.2,fillColor:"#000",border:"2px solid blue"};var E=this.globals.style;for(var D in B){E[D]=B[D]}var A=E.border.split(" ");E.outlineWidth=parseInt(A[0].replace(/\D/g,""));E.outlineColor=A[2];E.alphaIE="alpha(opacity="+(E.opacity*100)+")";this.globals.backStack=[];this.globals.options={buttonHTML:"zoom ...",buttonStartingStyle:{width:"52px",border:"1px solid black",padding:"2px"},buttonStyle:{background:"#FFF"},backButtonHTML:"zoom back",backButtonStyle:{background:"#FFF",display:"none"},buttonZoomingHTML:"Drag a region on the map",buttonZoomingStyle:{background:"#FF0"},overlayRemoveTime:6000,backButtonEnabled:false,stickyZoomEnabled:false,rightMouseZoomOutEnabled:false,minDragSize:0};for(var D in C){this.globals.options[D]=C[D]}if(F==null){F={}}this.globals.callbacks=F}DragZoomControl.prototype=new GControl();DragZoomControl.prototype.saveMapContext=function(A){if(this.globals.options.backButtonEnabled){this.saveBackContext_(A,true);this.globals.backButtonDiv.style.display="block"}};DragZoomControl.prototype.initiateZoom=function(){this.buttonclick_()};DragZoomControl.prototype.initiateZoomBack=function(){if(this.globals.options.backButtonEnabled){this.backbuttonclick_()}};DragZoomControl.prototype.initButton_=function(A){var B=this.globals;var C=document.createElement("div");C.innerHTML=B.options.buttonHTML;DragZoomUtil.style([C],{cursor:"pointer",zIndex:200});DragZoomUtil.style([C],B.options.buttonStartingStyle);DragZoomUtil.style([C],B.options.buttonStyle);A.appendChild(C);return C};DragZoomControl.prototype.initBackButton_=function(A){var B=this.globals;var C=document.createElement("div");C.innerHTML=B.options.backButtonHTML;DragZoomUtil.style([C],{cursor:"pointer",zIndex:200});DragZoomUtil.style([C],B.options.buttonStartingStyle);DragZoomUtil.style([C],B.options.backButtonStyle);A.appendChild(C);return C};DragZoomControl.prototype.setButtonMode_=function(B){var A=this.globals;if(B=="zooming"){A.buttonDiv.innerHTML=A.options.buttonZoomingHTML;DragZoomUtil.style([A.buttonDiv],A.options.buttonStartingStyle);DragZoomUtil.style([A.buttonDiv],A.options.buttonZoomingStyle)}else{A.buttonDiv.innerHTML=A.options.buttonHTML;DragZoomUtil.style([A.buttonDiv],A.options.buttonStartingStyle);DragZoomUtil.style([A.buttonDiv],A.options.buttonStyle)}};DragZoomControl.prototype.initialize=function(B){var K=this.globals;var H=this;var L=B.getContainer();var M=document.createElement("div");DragZoomUtil.style([M],{cursor:"pointer",zIndex:150});var J=this.initButton_(M);var C=this.initBackButton_(M);L.appendChild(M);var E=document.createElement("div");var I=["outlineDiv","cornerTopDiv","cornerLeftDiv","cornerRightDiv","cornerBottomDiv"];for(var F=0;F<I.length;F++){var D=I[F];var A=document.createElement("div");DragZoomUtil.style([A],{position:"absolute",display:"none"});E.appendChild(A);K[D]=A}DragZoomUtil.style([E],{position:"absolute",display:"none",overflow:"hidden",cursor:"crosshair",zIndex:101});L.appendChild(E);GEvent.addDomListener(J,"click",function(G){H.buttonclick_(G)});GEvent.addDomListener(C,"click",function(G){H.backbuttonclick_(G)});GEvent.addDomListener(E,"mousedown",function(G){H.coverMousedown_(G)});GEvent.addDomListener(document,"mousemove",function(G){H.drag_(G)});GEvent.addDomListener(document,"mouseup",function(G){H.mouseup_(G)});K.mapPosition=DragZoomUtil.getElementPosition(L);K.buttonDiv=J;K.backButtonDiv=C;K.mapCover=E;K.map=B;K.borderCorrection=K.style.outlineWidth*2;this.setDimensions_();this.initStyles_();K.mapCover.onselectstart=function(){return false};return M};DragZoomControl.prototype.getDefaultPosition=function(){return new GControlPosition(G_ANCHOR_TOP_LEFT,new GSize(3,120))};DragZoomControl.prototype.coverMousedown_=function(C){var A=this.globals;var D=this.getRelPos_(C);A.startX=D.left;A.startY=D.top;if(C.which){var B=(C.which!=1)}else{if(C.button){var B=(C.button!=1)}}A.draggingRightMouse=B;DragZoomUtil.style([A.mapCover],{background:"transparent",opacity:1,filter:"alpha(opacity=100)"});DragZoomUtil.style([A.outlineDiv],{left:A.startX+"px",top:A.startY+"px",display:"block",width:"1px",height:"1px"});A.draggingOn=true;A.cornerTopDiv.style.top=(A.startY-A.mapHeight)+"px";A.cornerTopDiv.style.display="block";A.cornerLeftDiv.style.left=(A.startX-A.mapWidth)+"px";A.cornerLeftDiv.style.top=A.startY+"px";A.cornerLeftDiv.style.display="block";A.cornerRightDiv.style.left=A.startX+"px";A.cornerRightDiv.style.top=A.startY+"px";A.cornerRightDiv.style.display="block";A.cornerBottomDiv.style.left=A.startX+"px";A.cornerBottomDiv.style.top=A.startY+"px";A.cornerBottomDiv.style.width="0px";A.cornerBottomDiv.style.display="block";if(A.callbacks.dragstart!=null){A.callbacks.dragstart(A.startX,A.startY)}return false};DragZoomControl.prototype.drag_=function(C){var A=this.globals;if(A.draggingOn){var D=this.getRelPos_(C);var B=this.getRectangle_(A.startX,A.startY,D,A.mapRatio);if(B.left){addX=-B.width}else{addX=0}if(B.top){addY=-B.height}else{addY=0}DragZoomUtil.style([A.outlineDiv],{left:A.startX+addX+"px",top:A.startY+addY+"px",display:"block",width:"1px",height:"1px"});A.outlineDiv.style.width=B.width+"px";A.outlineDiv.style.height=B.height+"px";A.cornerTopDiv.style.height=((A.startY+addY)-(A.startY-A.mapHeight))+"px";A.cornerLeftDiv.style.top=(A.startY+addY)+"px";A.cornerLeftDiv.style.width=((A.startX+addX)-(A.startX-A.mapWidth))+"px";A.cornerRightDiv.style.top=A.cornerLeftDiv.style.top;A.cornerRightDiv.style.left=(A.startX+addX+B.width+A.borderCorrection)+"px";A.cornerBottomDiv.style.top=(A.startY+addY+B.height+A.borderCorrection)+"px";A.cornerBottomDiv.style.left=(A.startX-A.mapWidth+((A.startX+addX)-(A.startX-A.mapWidth)))+"px";A.cornerBottomDiv.style.width=(B.width+A.borderCorrection)+"px";if(A.callbacks.dragging!=null){A.callbacks.dragging(A.startX,A.startY,B.endX,B.endY)}return false}};DragZoomControl.prototype.mouseup_=function(Q){var F=this.globals;if(F.draggingOn){var C=this.getRelPos_(Q);F.draggingOn=false;var A=this.getRectangle_(F.startX,F.startY,C,F.mapRatio);if(A.left){A.endX=A.startX-A.width}if(A.top){A.endY=A.startY-A.height}this.resetDragZoom_();if(A.width>=F.options.minDragSize&&A.height>=F.options.minDragSize){var N=new GPoint(A.startX,A.startY);var P=new GPoint(A.endX,A.startY);var J=new GPoint(A.endX,A.endY);var H=new GPoint(A.startX,A.endY);var S=F.map.fromContainerPixelToLatLng(N);var D=F.map.fromContainerPixelToLatLng(P);var T=F.map.fromContainerPixelToLatLng(J);var L=F.map.fromContainerPixelToLatLng(H);var O=new GPolyline([S,D,T,L,S],F.style.outlineColor,F.style.outlineWidth+1,0.4);try{F.map.addOverlay(O);setTimeout(function(){F.map.removeOverlay(O)},F.options.overlayRemoveTime)}catch(Q){}var M=O.getBounds();var D=M.getNorthEast();var L=M.getSouthWest();var T=new GLatLng(L.lat(),D.lng());var S=new GLatLng(D.lat(),L.lng());if(F.options.rightMouseZoomOutEnabled&&F.draggingRightMouse){var E=F.map.getBounds().toSpan();var B=M.toSpan();var I=Math.max(E.lat()/B.lat(),E.lng()/B.lng());var K=F.map.getZoom()-Math.ceil(Math.log(I,2))}else{var K=F.map.getBoundsZoomLevel(M)}var R=M.getCenter();F.map.setCenter(R,K);if(F.callbacks.dragend!=null){F.callbacks.dragend(S,D,T,L,N,P,J,H)}}if(F.options.stickyZoomEnabled){this.initCover_();if(F.options.backButtonEnabled){this.saveBackContext_(F.options.backButtonHTML,false)}F.backButtonDiv.style.display="none"}}};DragZoomControl.prototype.setDimensions_=function(){var A=this.globals;var B=A.map.getSize();A.mapWidth=B.width;A.mapHeight=B.height;A.mapRatio=A.mapHeight/A.mapWidth;DragZoomUtil.style([A.mapCover,A.cornerTopDiv,A.cornerRightDiv,A.cornerBottomDiv,A.cornerLeftDiv],{top:"0px",left:"0px",width:A.mapWidth+"px",height:A.mapHeight+"px"})};DragZoomControl.prototype.initStyles_=function(){var A=this.globals;DragZoomUtil.style([A.mapCover,A.cornerTopDiv,A.cornerRightDiv,A.cornerBottomDiv,A.cornerLeftDiv],{filter:A.style.alphaIE,opacity:A.style.opacity,background:A.style.fillColor});A.outlineDiv.style.border=A.style.border};DragZoomControl.prototype.buttonclick_=function(){var A=this.globals;A.backButtonDiv.style.display="none";if(A.mapCover.style.display=="block"){this.resetDragZoom_();if(A.options.backButtonEnabled){this.restoreBackContext_();if(A.backStack.length==0){A.backButtonDiv.style.display="none"}}}else{this.initCover_();if(A.options.backButtonEnabled){this.saveBackContext_(A.options.backButtonHTML,false)}}};DragZoomControl.prototype.backbuttonclick_=function(){var A=this.globals;if(A.options.backButtonEnabled&&A.backStack.length>0){this.restoreBackContext_();if(A.callbacks.backbuttonclick!=null){A.callbacks.backbuttonclick(A.methodCall)}}};DragZoomControl.prototype.saveBackContext_=function(D,A){var B=this.globals;var C={};C.center=B.map.getCenter();C.zoom=B.map.getZoom();C.maptype=B.map.getCurrentMapType();C.text=B.backButtonDiv.innerHTML;C.methodCall=A;B.backStack.push(C);B.backButtonDiv.innerHTML=D};DragZoomControl.prototype.restoreBackContext_=function(){var A=this.globals;var B=A.backStack.pop();A.map.setCenter(B.center,B.zoom,B.maptype);A.backButtonDiv.innerHTML=B.text;A.methodCall=B.methodCall;if(A.backStack.length==0){A.backButtonDiv.style.display="none"}};DragZoomControl.prototype.initCover_=function(){var A=this.globals;A.mapPosition=DragZoomUtil.getElementPosition(A.map.getContainer());this.setDimensions_();this.setButtonMode_("zooming");DragZoomUtil.style([A.mapCover],{display:"block",background:A.style.fillColor});DragZoomUtil.style([A.outlineDiv],{width:"0px",height:"0px"});if(A.callbacks.buttonclick!=null){A.callbacks.buttonclick()}};DragZoomControl.prototype.getRelPos_=function(B){var C=DragZoomUtil.getMousePosition(B);var A=this.globals;return{top:(C.top-A.mapPosition.top),left:(C.left-A.mapPosition.left)}};DragZoomControl.prototype.getRectangle_=function(D,B,H,E){var G=false;var F=false;var C=H.left-D;var A=H.top-B;A=A*2.5;if(C<0){C=C*-1;G=true}if(A<0){A=A*-1;F=true}delta=C>A?C:A;return{startX:D,startY:B,endX:D+C,endY:B+parseInt(A*E),width:C,height:parseInt(A*E),left:G,top:F}};DragZoomControl.prototype.resetDragZoom_=function(){var A=this.globals;DragZoomUtil.style([A.mapCover,A.cornerTopDiv,A.cornerRightDiv,A.cornerBottomDiv,A.cornerLeftDiv],{display:"none",opacity:A.style.opacity,filter:A.style.alphaIE});A.outlineDiv.style.display="none";this.setButtonMode_("normal");if(A.options.backButtonEnabled&&(A.backStack.length>0)){A.backButtonDiv.style.display="block"}};var DragZoomUtil={};DragZoomUtil.gE=function(A){return document.getElementById(A)};DragZoomUtil.getMousePosition=function(A){var C=0;var B=0;if(!A){var A=window.event}if(A.pageX||A.pageY){C=A.pageX;B=A.pageY}else{if(A.clientX||A.clientY){C=A.clientX+(document.documentElement.scrollLeft?document.documentElement.scrollLeft:document.body.scrollLeft);B=A.clientY+(document.documentElement.scrollTop?document.documentElement.scrollTop:document.body.scrollTop)}}return{left:C,top:B}};DragZoomUtil.getElementPosition=function(C){var B=C.offsetLeft;var A=C.offsetTop;var D=C.offsetParent;while(D!=null){B+=D.offsetLeft;A+=D.offsetTop;D=D.offsetParent}return{left:B,top:A}};DragZoomUtil.style=function(D,C){if(typeof (D)=="string"){D=DragZoomUtil.getManyElements(D)}for(var A=0;A<D.length;A++){for(var B in C){D[A].style[B]=C[B]}}};DragZoomUtil.getManyElements=function(D){var B=D.split(",");var C=[];for(var A=0;A<B.length;A++){C[C.length]=DragZoomUtil.gE(B[A])}return C};
