
function DragSelectControl(opts_boxStyle,opts_other,opts_callbacks){this.zoomAreaPoly=null;this.globals={draggingOn:false,cornerTopDiv:null,cornerRightDiv:null,cornerBottomDiv:null,cornerLeftDiv:null,mapPosition:null,outlineDiv:null,startX:0,startY:0,borderCorrection:0};this.globals.style={opacity:.2,fillColor:"#000",border:"2px solid blue"};var style=this.globals.style;for(var s in opts_boxStyle){style[s]=opts_boxStyle[s];}
var borderStyleArray=style.border.split(' ');style.outlineWidth=parseInt(borderStyleArray[0].replace(/\D/g,''));style.outlineColor=borderStyleArray[2];style.alphaIE='alpha(opacity='+(style.opacity*100)+')';this.globals.options={buttonHTML:'Select',buttonStartingStyle:{width:'52px',border:'1px solid black',padding:'2px'},buttonStyle:{background:'#FFF'},buttonSelectingHTML:'Cancel',buttonSelectingStyle:{background:'#FFF'},stickySelectEnabled:false};for(var s in opts_other){this.globals.options[s]=opts_other[s]}
if(opts_callbacks==null){opts_callbacks={}}
this.globals.callbacks=opts_callbacks;}
DragSelectControl.prototype=new GControl();DragSelectControl.prototype.initiateSelect=function(){this.buttonclick_()};DragSelectControl.prototype.initButton_=function(buttonContainerDiv){var G=this.globals;var buttonDiv=document.createElement('div');buttonDiv.innerHTML=G.options.buttonHTML;buttonDiv.id='gselect-control';DragUtil.style([buttonDiv],{cursor:'pointer',zIndex:200});DragUtil.style([buttonDiv],G.options.buttonStartingStyle);DragUtil.style([buttonDiv],G.options.buttonStyle);buttonContainerDiv.appendChild(buttonDiv);return buttonDiv;};DragSelectControl.prototype.setButtonMode_=function(mode){var G=this.globals;if(mode=='selecting'){G.buttonDiv.innerHTML=G.options.buttonSelectingHTML;DragUtil.style([G.buttonDiv],G.options.buttonStartingStyle);DragUtil.style([G.buttonDiv],G.options.buttonSelectingStyle);}else{G.buttonDiv.innerHTML=G.options.buttonHTML;DragUtil.style([G.buttonDiv],G.options.buttonStartingStyle);DragUtil.style([G.buttonDiv],G.options.buttonStyle);}};DragSelectControl.prototype.initialize=function(map){var G=this.globals;var me=this;var mapDiv=map.getContainer();var buttonContainerDiv=document.createElement("div");DragUtil.style([buttonContainerDiv],{cursor:'pointer',zIndex:150});var buttonDiv=this.initButton_(buttonContainerDiv);mapDiv.appendChild(buttonContainerDiv);var selectDiv=document.createElement("div");selectDiv.id='gselect-map-cover';selectDiv.innerHTML='<div id="gselect-outline" style="position:absolute;display:none;"></div><div id="gselect-cornerTopDiv" style="position:absolute;display:none;"></div><div id="gselect-cornerLeftDiv" style="position:absolute;display:none;"></div><div id="gselect-cornerRightDiv" style="position:absolute;display:none;"></div><div id="gselect-cornerBottomDiv" style="position:absolute;display:none;"></div>';DragUtil.style([selectDiv],{position:'absolute',display:'none',overflow:'hidden',cursor:'crosshair',zIndex:101});mapDiv.appendChild(selectDiv);GEvent.addDomListener(buttonDiv,'click',function(e){me.buttonclick_(e);});GEvent.addDomListener(selectDiv,'mousedown',function(e){me.coverMousedown_(e);});GEvent.addDomListener(document,'mousemove',function(e){me.drag_(e);});GEvent.addDomListener(document,'mouseup',function(e){me.mouseup_(e);});G.mapPosition=DragUtil.getElementPosition(mapDiv);G.outlineDiv=DragUtil.gE("gselect-outline");G.buttonDiv=DragUtil.gE("gselect-control");G.backButtonDiv=DragUtil.gE("gselect-back");G.mapCover=DragUtil.gE("gselect-map-cover");G.cornerTopDiv=DragUtil.gE("gselect-cornerTopDiv");G.cornerRightDiv=DragUtil.gE("gselect-cornerRightDiv");G.cornerBottomDiv=DragUtil.gE("gselect-cornerBottomDiv");G.cornerLeftDiv=DragUtil.gE("gselect-cornerLeftDiv");G.map=map;G.borderCorrection=G.style.outlineWidth*2;this.setDimensions_();this.initStyles_();G.mapCover.onselectstart=function(){return false};return buttonContainerDiv;};DragSelectControl.prototype.getDefaultPosition=function(){return new GControlPosition(G_ANCHOR_TOP_LEFT,new GSize(3,120));};DragSelectControl.prototype.setBoxByGLatLng=function(nw,ne,se,sw){var G=this.globals;this.resetDragselect_();this.clearBox();this.zoomAreaPoly=new GPolyline([nw,ne,se,sw,nw],G.style.outlineColor,G.style.outlineWidth+1,.4);try{G.map.addOverlay(this.zoomAreaPoly);}catch(e){}
polyBounds=this.zoomAreaPoly.getBounds();var ne=polyBounds.getNorthEast();var sw=polyBounds.getSouthWest();var se=new GLatLng(sw.lat(),ne.lng());var nw=new GLatLng(ne.lat(),sw.lng());center=polyBounds.getCenter();zoomLevel=G.map.getBoundsZoomLevel(polyBounds);G.map.setCenter(center,zoomLevel);};DragSelectControl.prototype.setBox=function(lat1,lat2,lng1,lng2){this.setBoxByGLatLng(new GLatLng(lat1,lng1),new GLatLng(lat1,lng2),new GLatLng(lat2,lng2),new GLatLng(lat2,lng1));};DragSelectControl.prototype.clearBox=function(){var G=this.globals;if(this.zoomAreaPoly!=null){G.map.removeOverlay(this.zoomAreaPoly);}};DragSelectControl.prototype.coverMousedown_=function(e){var G=this.globals;var pos=this.getRelPos_(e);G.startX=pos.left;G.startY=pos.top;DragUtil.style([G.mapCover],{background:'transparent',opacity:1,filter:'alpha(opacity=100)'});DragUtil.style([G.outlineDiv],{left:G.startX+'px',top:G.startY+'px',display:'block',width:'1px',height:'1px'});G.draggingOn=true;G.cornerTopDiv.style.top=(G.startY-G.mapHeight)+'px';G.cornerTopDiv.style.display='block';G.cornerLeftDiv.style.left=(G.startX-G.mapWidth)+'px';G.cornerLeftDiv.style.top=G.startY+'px';G.cornerLeftDiv.style.display='block';G.cornerRightDiv.style.left=G.startX+'px';G.cornerRightDiv.style.top=G.startY+'px';G.cornerRightDiv.style.display='block';G.cornerBottomDiv.style.left=G.startX+'px';G.cornerBottomDiv.style.top=G.startY+'px';G.cornerBottomDiv.style.width='0px';G.cornerBottomDiv.style.display='block';this.clearBox();if(G.callbacks.dragstart!=null){G.callbacks.dragstart(G.startX,G.startY);}
return false;};DragSelectControl.prototype.drag_=function(e){var G=this.globals;if(G.draggingOn){var pos=this.getRelPos_(e);rect=this.getRectangle_(G.startX,G.startY,pos);if(rect.left){addX=-rect.width;}else{addX=0;}
if(rect.top){addY=-rect.height;}else{addY=0;}
DragUtil.style([G.outlineDiv],{left:G.startX+addX+'px',top:G.startY+addY+'px',display:'block',width:'1px',height:'1px'});G.outlineDiv.style.width=rect.width+"px";G.outlineDiv.style.height=rect.height+"px";G.cornerTopDiv.style.height=((G.startY+addY)-(G.startY-G.mapHeight))+'px';G.cornerLeftDiv.style.top=(G.startY+addY)+'px';G.cornerLeftDiv.style.width=((G.startX+addX)-(G.startX-G.mapWidth))+'px';G.cornerRightDiv.style.top=G.cornerLeftDiv.style.top;G.cornerRightDiv.style.left=(G.startX+addX+rect.width+G.borderCorrection)+'px';G.cornerBottomDiv.style.top=(G.startY+addY+rect.height+G.borderCorrection)+'px';G.cornerBottomDiv.style.left=(G.startX-G.mapWidth+((G.startX+addX)-(G.startX-G.mapWidth)))+'px';G.cornerBottomDiv.style.width=(rect.width+G.borderCorrection)+'px';if(G.callbacks.dragging!=null){G.callbacks.dragging(G.startX,G.startY,rect.endX,rect.endY)}
return false;}};DragSelectControl.prototype.mouseup_=function(e){var G=this.globals;if(G.draggingOn){var pos=this.getRelPos_(e);G.draggingOn=false;var rect=this.getRectangle_(G.startX,G.startY,pos);if(rect.left)rect.endX=rect.startX-rect.width;if(rect.top)rect.endY=rect.startY-rect.height;this.resetDragselect_();var nwpx=new GPoint(rect.startX,rect.startY);var nepx=new GPoint(rect.endX,rect.startY);var sepx=new GPoint(rect.endX,rect.endY);var swpx=new GPoint(rect.startX,rect.endY);var nw=G.map.fromContainerPixelToLatLng(nwpx);var ne=G.map.fromContainerPixelToLatLng(nepx);var se=G.map.fromContainerPixelToLatLng(sepx);var sw=G.map.fromContainerPixelToLatLng(swpx);this.zoomAreaPoly=new GPolyline([nw,ne,se,sw,nw],G.style.outlineColor,G.style.outlineWidth+1,.4);try{G.map.addOverlay(this.zoomAreaPoly);}catch(e){}
polyBounds=this.zoomAreaPoly.getBounds();var ne=polyBounds.getNorthEast();var sw=polyBounds.getSouthWest();var se=new GLatLng(sw.lat(),ne.lng());var nw=new GLatLng(ne.lat(),sw.lng());center=polyBounds.getCenter();G.map.setCenter(center);if(G.callbacks.dragend!=null){G.callbacks.dragend(nw,ne,se,sw,nwpx,nepx,sepx,swpx);}
if(G.options.stickySelectEnabled){this.initCover_();G.backButtonDiv.style.display='none';}}};DragSelectControl.prototype.setDimensions_=function(){var G=this.globals;var mapSize=G.map.getSize();G.mapWidth=mapSize.width;G.mapHeight=mapSize.height;G.mapRatio=G.mapHeight/G.mapWidth;DragUtil.style([G.mapCover,G.cornerTopDiv,G.cornerRightDiv,G.cornerBottomDiv,G.cornerLeftDiv],{left:'0px',width:G.mapWidth+'px',height:G.mapHeight+'px'});};DragSelectControl.prototype.initStyles_=function(){var G=this.globals;DragUtil.style([G.mapCover,G.cornerTopDiv,G.cornerRightDiv,G.cornerBottomDiv,G.cornerLeftDiv],{filter:G.style.alphaIE,opacity:G.style.opacity,background:G.style.fillColor});G.outlineDiv.style.border=G.style.border;};DragSelectControl.prototype.buttonclick_=function(){var G=this.globals;if(G.mapCover.style.display=='block'){this.resetDragselect_();}else{this.initCover_();}};DragSelectControl.prototype.initCover_=function(){var G=this.globals;G.mapPosition=DragUtil.getElementPosition(G.map.getContainer());this.setDimensions_();this.setButtonMode_('selecting');DragUtil.style([G.mapCover],{display:'block',background:G.style.fillColor});DragUtil.style([G.outlineDiv],{width:'0px',height:'0px'});if(G.callbacks['buttonclick']!=null){G.callbacks.buttonclick();}};DragSelectControl.prototype.getRelPos_=function(e){var pos=DragUtil.getMousePosition(e);var G=this.globals;return{top:(pos.top-G.mapPosition.top),left:(pos.left-G.mapPosition.left)};};DragSelectControl.prototype.getRectangle_=function(startX,startY,pos){var left=false;var top=false;var dX=pos.left-startX;var dY=pos.top-startY;if(dX<0){dX=dX*-1;left=true;}
if(dY<0){dY=dY*-1;top=true;}
return{startX:startX,startY:startY,endX:startX+dX,endY:startY+dY,width:dX,height:dY,left:left,top:top}};DragSelectControl.prototype.resetDragselect_=function(){var G=this.globals;DragUtil.style([G.mapCover,G.cornerTopDiv,G.cornerRightDiv,G.cornerBottomDiv,G.cornerLeftDiv],{display:'none',opacity:G.style.opacity,filter:G.style.alphaIE});G.outlineDiv.style.display='none';this.setButtonMode_('normal');};var DragUtil={};DragUtil.gE=function(sId){return document.getElementById(sId);}
DragUtil.getMousePosition=function(e){var posX=0;var posY=0;if(!e)var e=window.event;if(e.pageX||e.pageY){posX=e.pageX;posY=e.pageY;}else if(e.clientX||e.clientY){posX=e.clientX+
(document.documentElement.scrollLeft?document.documentElement.scrollLeft:document.body.scrollLeft);posY=e.clientY+
(document.documentElement.scrollTop?document.documentElement.scrollTop:document.body.scrollTop);}
return{left:posX,top:posY};};DragUtil.getElementPosition=function(element){var leftPos=element.offsetLeft;var topPos=element.offsetTop;var parElement=element.offsetParent;while(parElement!=null){leftPos+=parElement.offsetLeft;topPos+=parElement.offsetTop;parElement=parElement.offsetParent;}
return{left:leftPos,top:topPos};};DragUtil.style=function(elements,styles){if(typeof(elements)=='string'){elements=DragUtil.getManyElements(elements);}
for(var i=0;i<elements.length;i++){for(var s in styles){elements[i].style[s]=styles[s];}}};DragUtil.getManyElements=function(idsString){var idsArray=idsString.split(',');var elements=[];for(var i=0;i<idsArray.length;i++){elements[elements.length]=DragUtil.gE(idsArray[i])};return elements;};
