function MarkerManager(b,c){var a=this;a.map_=b;a.mapZoom_=b.getZoom();a.projectionHelper_=new ProjectionHelperOverlay(b);google.maps.event.addListener(a.projectionHelper_,"ready",function(){a.projection_=this.getProjection();a.initialize(b,c)})}MarkerManager.prototype.initialize=function(f,h){var d=this;h=h||{};d.tileSize_=MarkerManager.DEFAULT_TILE_SIZE_;var b=f.mapTypes;var a=1;for(var g in b){if(typeof f.mapTypes.get(g)==="object"&&typeof f.mapTypes.get(g).maxZoom==="number"){var c=f.mapTypes.get(g).maxZoom;if(c>a){a=c}}}d.maxZoom_=h.maxZoom||19;d.trackMarkers_=h.trackMarkers;d.show_=h.show||true;var e;if(typeof h.borderPadding==="number"){e=h.borderPadding}else{e=MarkerManager.DEFAULT_BORDER_PADDING_}d.swPadding_=new google.maps.Size(-e,e);d.nePadding_=new google.maps.Size(e,-e);d.borderPadding_=e;d.gridWidth_={};d.grid_={};d.grid_[d.maxZoom_]={};d.numMarkers_={};d.numMarkers_[d.maxZoom_]=0;google.maps.event.addListener(f,"dragend",function(){d.onMapMoveEnd_()});google.maps.event.addListener(f,"zoom_changed",function(){d.onMapMoveEnd_()});d.removeOverlay_=function(i){i.setMap(null);d.shownMarkers_--};d.addOverlay_=function(i){if(d.show_){i.setMap(d.map_);d.shownMarkers_++}};d.resetManager_();d.shownMarkers_=0;d.shownBounds_=d.getMapGridBounds_();google.maps.event.trigger(d,"loaded")};MarkerManager.DEFAULT_TILE_SIZE_=1024;MarkerManager.DEFAULT_BORDER_PADDING_=100;MarkerManager.MERCATOR_ZOOM_LEVEL_ZERO_RANGE=256;MarkerManager.prototype.resetManager_=function(){var a=MarkerManager.MERCATOR_ZOOM_LEVEL_ZERO_RANGE;for(var b=0;b<=this.maxZoom_;++b){this.grid_[b]={};this.numMarkers_[b]=0;this.gridWidth_[b]=Math.ceil(a/this.tileSize_);a<<=1}};MarkerManager.prototype.clearMarkers=function(){this.processAll_(this.shownBounds_,this.removeOverlay_);this.resetManager_()};MarkerManager.prototype.getTilePoint_=function(e,c,d){var b=this.projectionHelper_.LatLngToPixel(e,c);var a=new google.maps.Point(Math.floor((b.x+d.width)/this.tileSize_),Math.floor((b.y+d.height)/this.tileSize_));return a};MarkerManager.prototype.addMarkerBatch_=function(c,h,b){var f=this;var g=c.getPosition();c.MarkerManager_minZoom=h;if(this.trackMarkers_){google.maps.event.addListener(c,"changed",function(j,i,k){f.onMarkerMoved_(j,i,k)})}var d=this.getTilePoint_(g,b,new google.maps.Size(0,0,0,0));for(var e=b;e>=h;e--){var a=this.getGridCellCreate_(d.x,d.y,e);a.push(c);d.x=d.x>>1;d.y=d.y>>1}};MarkerManager.prototype.isGridPointVisible_=function(b){var d=this.shownBounds_.minY<=b.y&&b.y<=this.shownBounds_.maxY;var a=this.shownBounds_.minX;var c=a<=b.x&&b.x<=this.shownBounds_.maxX;if(!c&&a<0){var e=this.gridWidth_[this.shownBounds_.z];c=a+e<=b.x&&b.x<=e-1}return d&&c};MarkerManager.prototype.onMarkerMoved_=function(c,g,b){var f=this.maxZoom_;var h=false;var e=this.getTilePoint_(g,f,new google.maps.Size(0,0,0,0));var d=this.getTilePoint_(b,f,new google.maps.Size(0,0,0,0));while(f>=0&&(e.x!==d.x||e.y!==d.y)){var a=this.getGridCellNoCreate_(e.x,e.y,f);if(a){if(this.removeFromArray_(a,c)){this.getGridCellCreate_(d.x,d.y,f).push(c)}}if(f===this.mapZoom_){if(this.isGridPointVisible_(e)){if(!this.isGridPointVisible_(d)){this.removeOverlay_(c);h=true}}else{if(this.isGridPointVisible_(d)){this.addOverlay_(c);h=true}}}e.x=e.x>>1;e.y=e.y>>1;d.x=d.x>>1;d.y=d.y>>1;--f}if(h){this.notifyListeners_()}};MarkerManager.prototype.removeMarker=function(c){var e=this.maxZoom_;var f=false;var b=c.getPosition();var d=this.getTilePoint_(b,e,new google.maps.Size(0,0,0,0));while(e>=0){var a=this.getGridCellNoCreate_(d.x,d.y,e);if(a){this.removeFromArray_(a,c)}if(e===this.mapZoom_){if(this.isGridPointVisible_(d)){this.removeOverlay_(c);f=true}}d.x=d.x>>1;d.y=d.y>>1;--e}if(f){this.notifyListeners_()}this.numMarkers_[c.MarkerManager_minZoom]--};MarkerManager.prototype.addMarkers=function(d,e,c){var a=this.getOptMaxZoom_(c);for(var b=d.length-1;b>=0;b--){this.addMarkerBatch_(d[b],e,a)}this.numMarkers_[e]+=d.length};MarkerManager.prototype.getOptMaxZoom_=function(a){return a||this.maxZoom_};MarkerManager.prototype.getMarkerCount=function(b){var a=0;for(var c=0;c<=b;c++){a+=this.numMarkers_[c]}return a};MarkerManager.prototype.getMarker=function(f,c,e){var g=new google.maps.LatLng(f,c);var b=this.getTilePoint_(g,e,new google.maps.Size(0,0,0,0));var a=new google.maps.Marker({position:g});var h=this.getGridCellNoCreate_(b.x,b.y,e);if(h!==undefined){for(var d=0;d<h.length;d++){if(f===h[d].getLatLng().lat()&&c===h[d].getLatLng().lng()){a=h[d]}}}return a};MarkerManager.prototype.addMarker=function(b,e,d){var a=this.getOptMaxZoom_(d);this.addMarkerBatch_(b,e,a);var c=this.getTilePoint_(b.getPosition(),this.mapZoom_,new google.maps.Size(0,0,0,0));if(this.isGridPointVisible_(c)&&e<=this.shownBounds_.z&&this.shownBounds_.z<=a){this.addOverlay_(b);this.notifyListeners_()}this.numMarkers_[e]++};function GridBounds(a){this.minX=Math.min(a[0].x,a[1].x);this.maxX=Math.max(a[0].x,a[1].x);this.minY=Math.min(a[0].y,a[1].y);this.maxY=Math.max(a[0].y,a[1].y)}GridBounds.prototype.equals=function(a){if(this.maxX===a.maxX&&this.maxY===a.maxY&&this.minX===a.minX&&this.minY===a.minY){return true}else{return false}};GridBounds.prototype.containsPoint=function(a){var b=this;return(b.minX<=a.x&&b.maxX>=a.x&&b.minY<=a.y&&b.maxY>=a.y)};MarkerManager.prototype.getGridCellCreate_=function(a,f,e){var c=this.grid_[e];if(a<0){a+=this.gridWidth_[e]}var b=c[a];if(!b){b=c[a]=[];return(b[f]=[])}var d=b[f];if(!d){return(b[f]=[])}return d};MarkerManager.prototype.getGridCellNoCreate_=function(a,e,d){var c=this.grid_[d];if(a<0){a+=this.gridWidth_[d]}var b=c[a];return b?b[e]:undefined};MarkerManager.prototype.getGridBounds_=function(a,i,h,f){i=Math.min(i,this.maxZoom_);var b=a.getSouthWest();var e=a.getNorthEast();var g=this.getTilePoint_(b,i,h);var d=this.getTilePoint_(e,i,f);var j=this.gridWidth_[i];if(e.lng()<b.lng()||d.x<g.x){g.x-=j}if(d.x-g.x+1>=j){g.x=0;d.x=j-1}var c=new GridBounds([g,d]);c.z=i;return c};MarkerManager.prototype.getMapGridBounds_=function(){return this.getGridBounds_(this.map_.getBounds(),this.mapZoom_,this.swPadding_,this.nePadding_)};MarkerManager.prototype.onMapMoveEnd_=function(){this.objectSetTimeout_(this,this.updateMarkers_,0)};MarkerManager.prototype.objectSetTimeout_=function(b,c,a){return window.setTimeout(function(){c.call(b)},a)};MarkerManager.prototype.visible=function(){return this.show_?true:false};MarkerManager.prototype.isHidden=function(){return !this.show_};MarkerManager.prototype.show=function(){this.show_=true;this.refresh()};MarkerManager.prototype.hide=function(){this.show_=false;this.refresh()};MarkerManager.prototype.toggle=function(){this.show_=!this.show_;this.refresh()};MarkerManager.prototype.refresh=function(){if(this.shownMarkers_>0){this.processAll_(this.shownBounds_,this.removeOverlay_)}if(this.show_){this.processAll_(this.shownBounds_,this.addOverlay_)}this.notifyListeners_()};MarkerManager.prototype.updateMarkers_=function(){this.mapZoom_=this.map_.getZoom();var a=this.getMapGridBounds_();if(a.equals(this.shownBounds_)&&a.z===this.shownBounds_.z){return}if(a.z!==this.shownBounds_.z){this.processAll_(this.shownBounds_,this.removeOverlay_);if(this.show_){this.processAll_(a,this.addOverlay_)}}else{this.rectangleDiff_(this.shownBounds_,a,this.removeCellMarkers_);if(this.show_){this.rectangleDiff_(a,this.shownBounds_,this.addCellMarkers_)}}this.shownBounds_=a;this.notifyListeners_()};MarkerManager.prototype.notifyListeners_=function(){google.maps.event.trigger(this,"changed",this.shownBounds_,this.shownMarkers_)};MarkerManager.prototype.processAll_=function(b,d){for(var a=b.minX;a<=b.maxX;a++){for(var c=b.minY;c<=b.maxY;c++){this.processCellMarkers_(a,c,b.z,d)}}};MarkerManager.prototype.processCellMarkers_=function(b,f,d,e){var a=this.getGridCellNoCreate_(b,f,d);if(a){for(var c=a.length-1;c>=0;c--){e(a[c])}}};MarkerManager.prototype.removeCellMarkers_=function(a,c,b){this.processCellMarkers_(a,c,b,this.removeOverlay_)};MarkerManager.prototype.addCellMarkers_=function(a,c,b){this.processCellMarkers_(a,c,b,this.addOverlay_)};MarkerManager.prototype.rectangleDiff_=function(b,a,d){var c=this;c.rectangleDiffCoords_(b,a,function(e,f){d.apply(c,[e,f,b.z])})};MarkerManager.prototype.rectangleDiffCoords_=function(b,a,l){var f=b.minX;var m=b.minY;var h=b.maxX;var d=b.maxY;var e=a.minX;var k=a.minY;var g=a.maxX;var c=a.maxY;var j,i;for(j=f;j<=h;j++){for(i=m;i<=d&&i<k;i++){l(j,i)}for(i=Math.max(c+1,m);i<=d;i++){l(j,i)}}for(i=Math.max(m,k);i<=Math.min(d,c);i++){for(j=Math.min(h+1,e)-1;j>=f;j--){l(j,i)}for(j=Math.max(f,g+1);j<=h;j++){l(j,i)}}};MarkerManager.prototype.removeFromArray_=function(e,c,d){var a=0;for(var b=0;b<e.length;++b){if(e[b]===c||(d&&e[b]===c)){e.splice(b--,1);a++}}return a};function ProjectionHelperOverlay(c){this.setMap(c);var a=8;var b=1<<a;var d=7;this._map=c;this._zoom=-1;this._X0=this._Y0=this._X1=this._Y1=-1}ProjectionHelperOverlay.prototype=new google.maps.OverlayView();ProjectionHelperOverlay.prototype.LngToX_=function(a){return(1+a/180)};ProjectionHelperOverlay.prototype.LatToY_=function(b){var a=Math.sin(b*Math.PI/180);return(1-0.5/Math.PI*Math.log((1+a)/(1-a)))};ProjectionHelperOverlay.prototype.LatLngToPixel=function(e,b){var c=this._map;var d=this.getProjection().fromLatLngToDivPixel(e);var a={x:~~(0.5+this.LngToX_(e.lng())*(2<<(b+6))),y:~~(0.5+this.LatToY_(e.lat())*(2<<(b+6)))};return a};ProjectionHelperOverlay.prototype.draw=function(){if(!this.ready){this.ready=true;google.maps.event.trigger(this,"ready")}};var StyledIconTypes={};var StyledMarker,StyledIcon;(function(){var e="http://chart.apis.google.com/chart?chst=";var d=google.maps;var b=d.Point;var a=d.event;var c=d.MarkerImage;StyledMarker=function(f){var h=this;var g=h.styleIcon=f.styleIcon;h.bindTo("icon",g);h.bindTo("shadow",g);h.bindTo("shape",g);h.setOptions(f)};StyledMarker.prototype=new d.Marker();StyledIcon=function(f,n,l){var j;var o=this;var i="icon";var m="shadow";var p="shape";var g=[];function h(){var q=document.createElement("img");var k=document.createElement("img");a.addDomListenerOnce(k,"load",function(){var r=k.width,s=k.height;o.set(m,new c(f.getShadowURL(o),null,null,f.getShadowAnchor(o,r,s)));simage=null});a.addDomListenerOnce(q,"load",function(){var r=q.width,s=q.height;o.set(i,new c(f.getURL(o),null,null,f.getAnchor(o,r,s)));o.set(p,f.getShape(o,r,s));q=null});q.src=f.getURL(o);k.src=f.getShadowURL(o)}o.as_=function(k){g.push(k);for(j in n){k.set(j,n[j])}};if(f!==StyledIconTypes.CLASS){for(j in f.defaults){o.set(j,f.defaults[j])}o.setValues(n);o.set(i,f.getURL(o));o.set(m,f.getShadowURL(o));if(l){l.as_(o)}h();o.changed=function(q){if(q!==i&&q!==p&&q!==m){h()}}}else{o.setValues(n);o.changed=function(k){n[k]=o.get(k);for(j=0;j<g.length;j++){g[j].set(k,o.get(k))}};if(l){l.as_(o)}}};StyledIcon.prototype=new d.MVCObject();StyledIconTypes.CLASS={};StyledIconTypes.MARKER={defaults:{text:"",color:"00ff00",fore:"000000",starcolor:null},getURL:function(i){var g;var f=i.get("starcolor");var h=i.get("text");var k=i.get("color").replace(/#/,"");var j=i.get("fore").replace(/#/,"");if(f){g=e+"d_map_xpin_letter&chld=pin_star|"}else{g=e+"d_map_pin_letter&chld="}if(h){h=h.substr(0,2)}g+=h+"|";g+=k+"|";g+=j;if(f){g+="|"+f.replace(/#/,"")}return g},getShadowURL:function(f){if(f.get("starcolor")){return e+"d_map_xpin_shadow&chld=pin_star"}else{return e+"d_map_pin_shadow"}},getAnchor:function(h,g,f){return new b(g/2,f)},getShadowAnchor:function(h,g,f){return new b(g/4,f)},getShape:function(k,j,f){var g={};g.coord=[j/2,f,(7/16)*j,(5/8)*f,(5/16)*j,(7/16)*f,(7/32)*j,(5/16)*f,(5/16)*j,(1/8)*f,(1/2)*j,0,(11/16)*j,(1/8)*f,(25/32)*j,(5/16)*f,(11/16)*j,(7/16)*f,(9/16)*j,(5/8)*f];for(var h=0;h<g.coord.length;h++){g.coord[h]=Math.round(g.coord[h])}g.type="poly";return g}};StyledIconTypes.BUBBLE={defaults:{text:"",color:"00ff00",fore:"000000"},getURL:function(g){var f=e+"d_bubble_text_small&chld=bb|";f+=g.get("text")+"|";f+=g.get("color").replace(/#/,"")+"|";f+=g.get("fore").replace(/#/,"");return f},getShadowURL:function(f){return e+"d_bubble_text_small_shadow&chld=bb|"+f.get("text")},getAnchor:function(h,g,f){return new google.maps.Point(0,42)},getShadowAnchor:function(h,g,f){return new google.maps.Point(0,44)},getShape:function(i,h,f){var g={};g.coord=[0,44,13,26,13,6,17,1,h-4,1,h,6,h,21,h-4,26,21,26];g.type="poly";return g}}})();(function($){$.extend({metadata:{defaults:{type:"class",name:"metadata",cre:/({.*})/,single:"metadata"},setType:function(type,name){this.defaults.type=type;this.defaults.name=name},get:function(elem,opts){var settings=$.extend({},this.defaults,opts);if(!settings.single.length){settings.single="metadata"}var data=$.data(elem,settings.single);if(data){return data}data="{}";var getData=function(data){if(typeof data!="string"){return data}if(data.indexOf("{")<0){data=eval("("+data+")")}};var getObject=function(data){if(typeof data!="string"){return data}data=eval("("+data+")");return data};if(settings.type=="html5"){var object={};$(elem.attributes).each(function(){var name=this.nodeName;if(name.match(/^data-/)){name=name.replace(/^data-/,"")}else{return true}object[name]=getObject(this.nodeValue)})}else{if(settings.type=="class"){var m=settings.cre.exec(elem.className);if(m){data=m[1]}}else{if(settings.type=="elem"){if(!elem.getElementsByTagName){return}var e=elem.getElementsByTagName(settings.name);if(e.length){data=$.trim(e[0].innerHTML)}}else{if(elem.getAttribute!=undefined){var attr=elem.getAttribute(settings.name);if(attr){data=attr}}}}object=getObject(data.indexOf("{")<0?"{"+data+"}":data)}$.data(elem,settings.single,object);return object}}});$.fn.metadata=function(opts){return $.metadata.get(this[0],opts)}})(jQuery);(function(a){a.jMapping=function(v,e){var u,g,c,w,s,l,h,j,n;v=(typeof v=="string")?a(v).get(0):v;if(!(a(v).data("jMapping"))){u=a.extend(true,{},a.jMapping.defaults);a.extend(true,u,e);g={};n=[];var r=function(A){var z,y,x;z=[u.side_bar_selector,u.location_selector,u.info_window_selector].join(" ");a(z).hide();l=k();h=f(A);if(A){g={};n=[];s.clearMarkers();google.maps.event.trigger(w,"resize");w.fitBounds(h);if(u.force_zoom_level){w.setZoom(u.force_zoom_level)}}else{w=q();s=new MarkerManager(w)}l.each(function(){var B=b(this);if(!(u.link_selector===false)){t(this)}a(document).trigger("markerCreated.jMapping",[B])});if(A){m()}else{google.maps.event.addListener(s,"loaded",function(){m();if(u.default_zoom_level){w.setZoom(u.default_zoom_level)}})}if(!(u.link_selector===false)&&!A){i()}};var q=function(){if(u.map_config){w=new google.maps.Map(v,u.map_config)}else{w=new google.maps.Map(v,{navigationControlOptions:{style:google.maps.NavigationControlStyle.SMALL},mapTypeControl:false,mapTypeId:google.maps.MapTypeId.ROADMAP,zoom:9})}w.fitBounds(h);if(u.force_zoom_level){w.setZoom(u.force_zoom_level)}return w};var k=function(){return a(u.side_bar_selector+" "+u.location_selector)};var d=function(x){return l.map(function(){if(x){a(this).data("metadata",false)}return a(this).metadata(u.metadata_options)})};var f=function(C){var B=d(C),A,z;if(B.length){z=a.jMapping.makeGLatLng(B[0].point)}else{z=a.jMapping.makeGLatLng(u.default_point)}A=new google.maps.LatLngBounds(z,z);for(var y=1,x=B.length;y<x;y++){A.extend(a.jMapping.makeGLatLng(B[y].point))}return A};var t=function(z){var y=a(z),x=y.metadata(u.metadata_options),A=y.find(u.link_selector);A.attr("href",("#"+x.id))};var p=function(x){if(u.category_icon_options){if(a.isFunction(u.category_icon_options)){return u.category_icon_options(x)}else{return u.category_icon_options[x]||u.category_icon_options["default"]}}else{return{}}};var b=function(C){var B=a(C),A,x,z,y,D;A=B.metadata(u.metadata_options);x=a.jMapping.makeGLatLng(A.point);if(u.category_icon_options){icon_options=p(A.category);if((typeof icon_options==="string")||(icon_options instanceof google.maps.MarkerImage)){z=new google.maps.Marker({icon:icon_options,position:x,map:w})}else{z=new StyledMarker({styleIcon:new StyledIcon(StyledIconTypes.MARKER,icon_options),position:x,map:w})}}else{z=new google.maps.Marker({position:x,map:w})}y=B.find(u.info_window_selector);if(y.length>0){D=new google.maps.InfoWindow({content:y.html(),maxWidth:u.info_window_max_width});n.push(D);google.maps.event.addListener(z,"click",function(){a.each(n,function(E,F){if(D!=F){F.close()}});D.open(w,z)})}g[parseInt(A.id,10)]=z;return z};var m=function(){if(u.always_show_markers===true){min_zoom=0}else{zoom_level=w.getZoom();min_zoom=(zoom_level<7)?0:(zoom_level-7)}s.addMarkers(o(),min_zoom);s.refresh();if(u.force_zoom_level){w.setZoom(u.force_zoom_level)}};var i=function(){var x=[u.side_bar_selector,u.location_selector,u.link_selector].join(" ");a(x).live("click",function(z){z.preventDefault();var y=parseInt(a(this).attr("href").split("#")[1],10);google.maps.event.trigger(g[y],"click")})};var o=function(){var x=[];a.each(g,function(y,z){x.push(z)});return x};if(a(document).trigger("beforeMapping.jMapping",[u])!=false){r();c=true}else{c=false}j={gmarkers:g,settings:u,mapped:c,map:w,markerManager:s,gmarkersArray:o,getBounds:f,getPlacesData:d,getPlaces:k,update:function(){if(a(document).trigger("beforeUpdate.jMapping",[this])!=false){r(true);this.map=w;this.gmarkers=g;this.markerManager=s;a(document).trigger("afterUpdate.jMapping",[this])}}};a(document).trigger("afterMapping.jMapping",[j]);return j}else{return a(v).data("jMapping")}};a.extend(a.jMapping,{defaults:{side_bar_selector:"#map-side-bar:first",location_selector:".map-location",link_selector:"a.map-link",info_window_selector:".info-box",info_window_max_width:425,default_point:{lat:0,lng:0},metadata_options:{type:"attr",name:"data-jmapping"}},makeGLatLng:function(b){return new google.maps.LatLng(b.lat,b.lng)}});a.fn.jMapping=function(b){if((b=="update")&&a(this[0]).data("jMapping")){a(this[0]).data("jMapping").update()}else{if(b=="update"){b={}}a(this[0]).data("jMapping",a.jMapping(this[0],b))}return this}})(jQuery);
