function MarkerManager(_1,_2){var me=this;me.map_=_1;me.mapZoom_=_1.getZoom();me.projection_=_1.getCurrentMapType().getProjection();_2=_2||{};me.tileSize_=MarkerManager.DEFAULT_TILE_SIZE_;var _4=MarkerManager.DEFAULT_MAX_ZOOM_;if(_2.maxZoom!=undefined){_4=_2.maxZoom;}me.maxZoom_=_4;me.trackMarkers_=_2.trackMarkers;var _5;if(typeof _2.borderPadding=="number"){_5=_2.borderPadding;}else{_5=MarkerManager.DEFAULT_BORDER_PADDING_;}me.swPadding_=new GSize(-_5,_5);me.nePadding_=new GSize(_5,-_5);me.borderPadding_=_5;me.gridWidth_=[];me.grid_=[];me.grid_[_4]=[];me.numMarkers_=[];me.numMarkers_[_4]=0;GEvent.bind(_1,"moveend",me,me.onMapMoveEnd_);me.removeOverlay_=function(_6){_1.removeOverlay(_6);me.shownMarkers_--;};me.addOverlay_=function(_7){_1.addOverlay(_7);me.shownMarkers_++;};me.resetManager_();me.shownMarkers_=0;me.shownBounds_=me.getMapGridBounds_();}MarkerManager.DEFAULT_TILE_SIZE_=1024;MarkerManager.DEFAULT_MAX_ZOOM_=17;MarkerManager.DEFAULT_BORDER_PADDING_=100;MarkerManager.MERCATOR_ZOOM_LEVEL_ZERO_RANGE=256;MarkerManager.prototype.resetManager_=function(){var me=this;var _9=MarkerManager.MERCATOR_ZOOM_LEVEL_ZERO_RANGE;for(var _a=0;_a<=me.maxZoom_;++_a){me.grid_[_a]=[];me.numMarkers_[_a]=0;me.gridWidth_[_a]=Math.ceil(_9/me.tileSize_);_9<<=1;}};MarkerManager.prototype.clearMarkers=function(){var me=this;me.processAll_(me.shownBounds_,me.removeOverlay_);me.resetManager_();};MarkerManager.prototype.getTilePoint_=function(_c,_d,_e){var _f=this.projection_.fromLatLngToPixel(_c,_d);return new GPoint(Math.floor((_f.x+_e.width)/this.tileSize_),Math.floor((_f.y+_e.height)/this.tileSize_));};MarkerManager.prototype.addMarkerBatch_=function(_10,_11,_12){var _13=_10.getPoint();if(this.trackMarkers_){GEvent.bind(_10,"changed",this,this.onMarkerMoved_);}var _14=this.getTilePoint_(_13,_12,GSize.ZERO);for(var _15=_12;_15>=_11;_15--){var _16=this.getGridCellCreate_(_14.x,_14.y,_15);_16.push(_10);_14.x=_14.x>>1;_14.y=_14.y>>1;}};MarkerManager.prototype.isGridPointVisible_=function(_17){var me=this;var _19=me.shownBounds_.minY<=_17.y&&_17.y<=me.shownBounds_.maxY;var _1a=me.shownBounds_.minX;var _1b=_1a<=_17.x&&_17.x<=me.shownBounds_.maxX;if(!_1b&&_1a<0){var _1c=me.gridWidth_[me.shownBounds_.z];_1b=_1a+_1c<=_17.x&&_17.x<=_1c-1;}return _19&&_1b;};MarkerManager.prototype.onMarkerMoved_=function(_1d,_1e,_1f){var me=this;var _21=me.maxZoom_;var _22=false;var _23=me.getTilePoint_(_1e,_21,GSize.ZERO);var _24=me.getTilePoint_(_1f,_21,GSize.ZERO);while(_21>=0&&(_23.x!=_24.x||_23.y!=_24.y)){var _25=me.getGridCellNoCreate_(_23.x,_23.y,_21);if(_25){if(me.removeFromArray(_25,_1d)){me.getGridCellCreate_(_24.x,_24.y,_21).push(_1d);}}if(_21==me.mapZoom_){if(me.isGridPointVisible_(_23)){if(!me.isGridPointVisible_(_24)){me.removeOverlay_(_1d);_22=true;}}else{if(me.isGridPointVisible_(_24)){me.addOverlay_(_1d);_22=true;}}}_23.x=_23.x>>1;_23.y=_23.y>>1;_24.x=_24.x>>1;_24.y=_24.y>>1;--_21;}if(_22){me.notifyListeners_();}};MarkerManager.prototype.removeMarker=function(_26){var me=this;var _28=me.maxZoom_;var _29=false;var _2a=_26.getPoint();var _2b=me.getTilePoint_(_2a,_28,GSize.ZERO);while(_28>=0){var _2c=me.getGridCellNoCreate_(_2b.x,_2b.y,_28);if(_2c){me.removeFromArray(_2c,_26);}if(_28==me.mapZoom_){if(me.isGridPointVisible_(_2b)){me.removeOverlay_(_26);_29=true;}}_2b.x=_2b.x>>1;_2b.y=_2b.y>>1;--_28;}if(_29){me.notifyListeners_();}};MarkerManager.prototype.addMarkers=function(_2d,_2e,_2f){var _30=this.getOptMaxZoom_(_2f);for(var i=_2d.length-1;i>=0;i--){this.addMarkerBatch_(_2d[i],_2e,_30);}this.numMarkers_[_2e]+=_2d.length;};MarkerManager.prototype.getOptMaxZoom_=function(_32){return _32!=undefined?_32:this.maxZoom_;};MarkerManager.prototype.getMarkerCount=function(_33){var _34=0;for(var z=0;z<=_33;z++){_34+=this.numMarkers_[z];}return _34;};MarkerManager.prototype.addMarker=function(_36,_37,_38){var me=this;var _3a=this.getOptMaxZoom_(_38);me.addMarkerBatch_(_36,_37,_3a);var _3b=me.getTilePoint_(_36.getPoint(),me.mapZoom_,GSize.ZERO);if(me.isGridPointVisible_(_3b)&&_37<=me.shownBounds_.z&&me.shownBounds_.z<=_3a){me.addOverlay_(_36);me.notifyListeners_();}this.numMarkers_[_37]++;};GBounds.prototype.containsPoint=function(_3c){var _3d=this;return (_3d.minX<=_3c.x&&_3d.maxX>=_3c.x&&_3d.minY<=_3c.y&&_3d.maxY>=_3c.y);};MarkerManager.prototype.getGridCellCreate_=function(x,y,z){var _41=this.grid_[z];if(x<0){x+=this.gridWidth_[z];}var _42=_41[x];if(!_42){_42=_41[x]=[];return _42[y]=[];}var _43=_42[y];if(!_43){return _42[y]=[];}return _43;};MarkerManager.prototype.getGridCellNoCreate_=function(x,y,z){var _47=this.grid_[z];if(x<0){x+=this.gridWidth_[z];}var _48=_47[x];return _48?_48[y]:undefined;};MarkerManager.prototype.getGridBounds_=function(_49,_4a,_4b,_4c){_4a=Math.min(_4a,this.maxZoom_);var bl=_49.getSouthWest();var tr=_49.getNorthEast();var sw=this.getTilePoint_(bl,_4a,_4b);var ne=this.getTilePoint_(tr,_4a,_4c);var gw=this.gridWidth_[_4a];if(tr.lng()<bl.lng()||ne.x<sw.x){sw.x-=gw;}if(ne.x-sw.x+1>=gw){sw.x=0;ne.x=gw-1;}var _52=new GBounds([sw,ne]);_52.z=_4a;return _52;};MarkerManager.prototype.getMapGridBounds_=function(){var me=this;return me.getGridBounds_(me.map_.getBounds(),me.mapZoom_,me.swPadding_,me.nePadding_);};MarkerManager.prototype.onMapMoveEnd_=function(){var me=this;me.objectSetTimeout_(this,this.updateMarkers_,0);};MarkerManager.prototype.objectSetTimeout_=function(_55,_56,_57){return window.setTimeout(function(){_56.call(_55);},_57);};MarkerManager.prototype.refresh=function(){var me=this;if(me.shownMarkers_>0){me.processAll_(me.shownBounds_,me.removeOverlay_);}me.processAll_(me.shownBounds_,me.addOverlay_);me.notifyListeners_();};MarkerManager.prototype.updateMarkers_=function(){var me=this;me.mapZoom_=this.map_.getZoom();var _5a=me.getMapGridBounds_();if(_5a.equals(me.shownBounds_)&&_5a.z==me.shownBounds_.z){return;}if(_5a.z!=me.shownBounds_.z){me.processAll_(me.shownBounds_,me.removeOverlay_);me.processAll_(_5a,me.addOverlay_);}else{me.rectangleDiff_(me.shownBounds_,_5a,me.removeCellMarkers_);me.rectangleDiff_(_5a,me.shownBounds_,me.addCellMarkers_);}me.shownBounds_=_5a;me.notifyListeners_();};MarkerManager.prototype.notifyListeners_=function(){GEvent.trigger(this,"changed",this.shownBounds_,this.shownMarkers_);};MarkerManager.prototype.processAll_=function(_5b,_5c){for(var x=_5b.minX;x<=_5b.maxX;x++){for(var y=_5b.minY;y<=_5b.maxY;y++){this.processCellMarkers_(x,y,_5b.z,_5c);}}};MarkerManager.prototype.processCellMarkers_=function(x,y,z,_62){var _63=this.getGridCellNoCreate_(x,y,z);if(_63){for(var i=_63.length-1;i>=0;i--){_62(_63[i]);}}};MarkerManager.prototype.removeCellMarkers_=function(x,y,z){this.processCellMarkers_(x,y,z,this.removeOverlay_);};MarkerManager.prototype.addCellMarkers_=function(x,y,z){this.processCellMarkers_(x,y,z,this.addOverlay_);};MarkerManager.prototype.rectangleDiff_=function(_6b,_6c,_6d){var me=this;me.rectangleDiffCoords(_6b,_6c,function(x,y){_6d.apply(me,[x,y,_6b.z]);});};MarkerManager.prototype.rectangleDiffCoords=function(_71,_72,_73){var _74=_71.minX;var _75=_71.minY;var _76=_71.maxX;var _77=_71.maxY;var _78=_72.minX;var _79=_72.minY;var _7a=_72.maxX;var _7b=_72.maxY;for(var x=_74;x<=_76;x++){for(var y=_75;y<=_77&&y<_79;y++){_73(x,y);}for(var y=Math.max(_7b+1,_75);y<=_77;y++){_73(x,y);}}for(var y=Math.max(_75,_79);y<=Math.min(_77,_7b);y++){for(var x=Math.min(_76+1,_78)-1;x>=_74;x--){_73(x,y);}for(var x=Math.max(_74,_7a+1);x<=_76;x++){_73(x,y);}}};MarkerManager.prototype.removeFromArray=function(_82,_83,_84){var _85=0;for(var i=0;i<_82.length;++i){if(_82[i]===_83||(_84&&_82[i]==_83)){_82.splice(i--,1);_85++;}}return _85;};
