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};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.initButton_=function(A){var B=this.globals;var C=document.createElement("div");C.innerHTML=B.options.buttonHTML;C.id="gzoom-control";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;C.id="gzoom-back";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(I){var C=this.globals;var F=this;var B=I.getContainer();var A=document.createElement("div");DragZoomUtil.style([A],{cursor:"pointer",zIndex:150});var E=this.initButton_(A);var D=this.initBackButton_(A);B.appendChild(A);var H=document.createElement("div");H.id="gzoom-map-cover";H.innerHTML='<div id="gzoom-outline" style="position:absolute;display:none;"></div><div id="gzoom-cornerTopDiv" style="position:absolute;display:none;"></div><div id="gzoom-cornerLeftDiv" style="position:absolute;display:none;"></div><div id="gzoom-cornerRightDiv" style="position:absolute;display:none;"></div><div id="gzoom-cornerBottomDiv" style="position:absolute;display:none;"></div>';DragZoomUtil.style([H],{position:"absolute",display:"none",overflow:"hidden",cursor:"crosshair",zIndex:101});B.appendChild(H);GEvent.addDomListener(E,"click",function(G){F.buttonclick_(G)});GEvent.addDomListener(D,"click",function(G){F.backButtonclick_(G)});GEvent.addDomListener(H,"mousedown",function(G){F.coverMousedown_(G)});GEvent.addDomListener(document,"mousemove",function(G){F.drag_(G)});GEvent.addDomListener(document,"mouseup",function(G){F.mouseup_(G)});C.mapPosition=DragZoomUtil.getElementPosition(B);C.outlineDiv=DragZoomUtil.gE("gzoom-outline");C.buttonDiv=DragZoomUtil.gE("gzoom-control");C.backButtonDiv=DragZoomUtil.gE("gzoom-back");C.mapCover=DragZoomUtil.gE("gzoom-map-cover");C.cornerTopDiv=DragZoomUtil.gE("gzoom-cornerTopDiv");C.cornerRightDiv=DragZoomUtil.gE("gzoom-cornerRightDiv");C.cornerBottomDiv=DragZoomUtil.gE("gzoom-cornerBottomDiv");C.cornerLeftDiv=DragZoomUtil.gE("gzoom-cornerLeftDiv");C.map=I;C.borderCorrection=C.style.outlineWidth*2;this.setDimensions_();this.initStyles_();return A};DragZoomControl.prototype.getDefaultPosition=function(){return new GControlPosition(G_ANCHOR_TOP_LEFT,new GSize(3,120))};DragZoomControl.prototype.coverMousedown_=function(B){var A=this.globals;var C=this.getRelPos_(B);A.startX=C.left;A.startY=C.top;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(B){var A=this.globals;document.onselectstart=function(){return false};if(A.draggingOn){var C=this.getRelPos_(B);rect=this.getRectangle_(A.startX,A.startY,C,A.mapRatio);if(rect.left){addX=-rect.width}else{addX=0}if(rect.top){addY=-rect.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=rect.width+"px";A.outlineDiv.style.height=rect.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+rect.width+A.borderCorrection)+"px";A.cornerBottomDiv.style.top=(A.startY+addY+rect.height+A.borderCorrection)+"px";A.cornerBottomDiv.style.left=(A.startX-A.mapWidth+((A.startX+addX)-(A.startX-A.mapWidth)))+"px";A.cornerBottomDiv.style.width=(rect.width+A.borderCorrection)+"px";if(A.callbacks.dragging!=null){A.callbacks.dragging(A.startX,A.startY,rect.endX,rect.endY)}return false}};DragZoomControl.prototype.mouseup_=function(I){var N=this.globals;if(N.draggingOn){var M=this.getRelPos_(I);N.draggingOn=false;var L=this.getRectangle_(N.startX,N.startY,M,N.mapRatio);if(L.left){L.endX=L.startX-L.width}if(L.top){L.endY=L.startY-L.height}this.resetDragZoom_();var K=new GPoint(L.startX,L.startY);var J=new GPoint(L.endX,L.startY);var H=new GPoint(L.endX,L.endY);var F=new GPoint(L.startX,L.endY);var E=N.map.fromContainerPixelToLatLng(K);var D=N.map.fromContainerPixelToLatLng(J);var C=N.map.fromContainerPixelToLatLng(H);var B=N.map.fromContainerPixelToLatLng(F);var A=new GPolyline([E,D,C,B,E],N.style.outlineColor,N.style.outlineWidth+1,0.4);try{N.map.addOverlay(A);setTimeout(function(){N.map.removeOverlay(A)},N.options.overlayRemoveTime)}catch(I){}polyBounds=A.getBounds();var D=polyBounds.getNorthEast();var B=polyBounds.getSouthWest();var C=new GLatLng(B.lat(),D.lng());var E=new GLatLng(D.lat(),B.lng());zoomLevel=N.map.getBoundsZoomLevel(polyBounds);center=polyBounds.getCenter();N.map.setCenter(center,zoomLevel);if(N.callbacks.dragend!=null){N.callbacks.dragend(E,D,C,B,K,J,H,F)}if(N.options.stickyZoomEnabled){this.initCover_();if(N.options.backButtonEnabled){this.saveBackContext_(N.options.backButtonHTML,false)}N.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],{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){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;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+delta,endY:B+parseInt(delta*E),width:delta,height:parseInt(delta*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};