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 g=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 h=["outlineDiv","cornerTopDiv","cornerLeftDiv","cornerRightDiv","cornerBottomDiv"];for(var f=0;f<h.length;f++){var d=h[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(i){g.buttonclick_(i)});GEvent.addDomListener(c,"click",function(i){g.backbuttonclick_(i)});GEvent.addDomListener(e,"mousedown",function(i){g.coverMousedown_(i)});GEvent.addDomListener(document,"mousemove",function(i){g.drag_(i)});GEvent.addDomListener(document,"mouseup",function(i){g.mouseup_(i)});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 g=this.globals;if(g.draggingOn){var c=this.getRelPos_(q);g.draggingOn=false;var a=this.getRectangle_(g.startX,g.startY,c,g.mapRatio);if(a.left){a.endX=a.startX-a.width}if(a.top){a.endY=a.startY-a.height}this.resetDragZoom_();if(a.width>=g.options.minDragSize&&a.height>=g.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=g.map.fromContainerPixelToLatLng(n);var d=g.map.fromContainerPixelToLatLng(p);var t=g.map.fromContainerPixelToLatLng(j);var l=g.map.fromContainerPixelToLatLng(h);var o=new GPolyline([s,d,t,l,s],g.style.outlineColor,g.style.outlineWidth+1,0.4);try{g.map.addOverlay(o);setTimeout(function(){g.map.removeOverlay(o)},g.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(g.options.rightMouseZoomOutEnabled&&g.draggingRightMouse){var f=g.map.getBounds().toSpan();var b=m.toSpan();var i=Math.max(f.lat()/b.lat(),f.lng()/b.lng());var k=g.map.getZoom()-Math.ceil(Math.log(i,2))}else{var k=g.map.getBoundsZoomLevel(m)}var r=m.getCenter();g.map.setCenter(r,k);if(g.callbacks.dragend!=null){g.callbacks.dragend(s,d,t,l,n,p,j,h)}}if(g.options.stickyZoomEnabled){this.initCover_();if(g.options.backButtonEnabled){this.saveBackContext_(g.options.backButtonHTML,false)}g.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;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+a,width:c,height:a,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};
