function MarkerManager(a,c){var b=this;b.map_=a;b.mapZoom_=a.getZoom();b.projectionHelper_=new ProjectionHelperOverlay(a);google.maps.event.addListener(b.projectionHelper_,"ready",function(){b.projection_=this.getProjection();b.initialize(a,c)})}MarkerManager.prototype.initialize=function(a,g){var c=this;g=g||{};c.tileSize_=MarkerManager.DEFAULT_TILE_SIZE_;var f=a.mapTypes;var e=1;for(var h in f){if(typeof a.mapTypes.get(h)==="object"&&typeof a.mapTypes.get(h).maxZoom==="number"){var b=a.mapTypes.get(h).maxZoom;if(b>e){e=b}}}c.maxZoom_=g.maxZoom||19;c.trackMarkers_=g.trackMarkers;c.show_=g.show||true;var d;if(typeof g.borderPadding==="number"){d=g.borderPadding}else{d=MarkerManager.DEFAULT_BORDER_PADDING_}c.swPadding_=new google.maps.Size(-d,d);c.nePadding_=new google.maps.Size(d,-d);c.borderPadding_=d;c.gridWidth_={};c.grid_={};c.grid_[c.maxZoom_]={};c.numMarkers_={};c.numMarkers_[c.maxZoom_]=0;google.maps.event.addListener(a,"dragend",function(){c.onMapMoveEnd_()});google.maps.event.addListener(a,"zoom_changed",function(){c.onMapMoveEnd_()});c.removeOverlay_=function(i){i.setMap(null);c.shownMarkers_--};c.addOverlay_=function(i){if(c.show_){i.setMap(c.map_);c.shownMarkers_++}};c.resetManager_();c.shownMarkers_=0;c.shownBounds_=c.getMapGridBounds_();google.maps.event.trigger(c,"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(c,a,b){var e=this.projectionHelper_.LatLngToPixel(c,a);var d=new google.maps.Point(Math.floor((e.x+b.width)/this.tileSize_),Math.floor((e.y+b.height)/this.tileSize_));return d};MarkerManager.prototype.addMarkerBatch_=function(a,g,e){var b=this;var f=a.getPosition();a.MarkerManager_minZoom=g;if(this.trackMarkers_){google.maps.event.addListener(a,"changed",function(k,i,j){b.onMarkerMoved_(k,i,j)})}var d=this.getTilePoint_(f,e,new google.maps.Size(0,0,0,0));for(var c=e;c>=g;c--){var h=this.getGridCellCreate_(d.x,d.y,c);h.push(a);d.x=d.x>>1;d.y=d.y>>1}};MarkerManager.prototype.isGridPointVisible_=function(a){var c=this.shownBounds_.minY<=a.y&&a.y<=this.shownBounds_.maxY;var b=this.shownBounds_.minX;var d=b<=a.x&&a.x<=this.shownBounds_.maxX;if(!d&&b<0){var e=this.gridWidth_[this.shownBounds_.z];d=b+e<=a.x&&a.x<=e-1}return c&&d};MarkerManager.prototype.onMarkerMoved_=function(c,a,g){var d=this.maxZoom_;var b=false;var h=this.getTilePoint_(a,d,new google.maps.Size(0,0,0,0));var e=this.getTilePoint_(g,d,new google.maps.Size(0,0,0,0));while(d>=0&&(h.x!==e.x||h.y!==e.y)){var f=this.getGridCellNoCreate_(h.x,h.y,d);if(f){if(this.removeFromArray_(f,c)){this.getGridCellCreate_(e.x,e.y,d).push(c)}}if(d===this.mapZoom_){if(this.isGridPointVisible_(h)){if(!this.isGridPointVisible_(e)){this.removeOverlay_(c);b=true}}else{if(this.isGridPointVisible_(e)){this.addOverlay_(c);b=true}}}h.x=h.x>>1;h.y=h.y>>1;e.x=e.x>>1;e.y=e.y>>1;--d}if(b){this.notifyListeners_()}};MarkerManager.prototype.removeMarker=function(b){var c=this.maxZoom_;var a=false;var d=b.getPosition();var f=this.getTilePoint_(d,c,new google.maps.Size(0,0,0,0));while(c>=0){var e=this.getGridCellNoCreate_(f.x,f.y,c);if(e){this.removeFromArray_(e,b)}if(c===this.mapZoom_){if(this.isGridPointVisible_(f)){this.removeOverlay_(b);a=true}}f.x=f.x>>1;f.y=f.y>>1;--c}if(a){this.notifyListeners_()}this.numMarkers_[b.MarkerManager_minZoom]--};MarkerManager.prototype.addMarkers=function(c,b,e){var a=this.getOptMaxZoom_(e);for(var d=c.length-1;d>=0;d--){this.addMarkerBatch_(c[d],b,a)}this.numMarkers_[b]+=c.length};MarkerManager.prototype.getOptMaxZoom_=function(a){return a||this.maxZoom_};MarkerManager.prototype.getMarkerCount=function(c){var a=0;for(var b=0;b<=c;b++){a+=this.numMarkers_[b]}return a};MarkerManager.prototype.getMarker=function(e,g,b){var d=new google.maps.LatLng(e,g);var c=this.getTilePoint_(d,b,new google.maps.Size(0,0,0,0));var a=new google.maps.Marker({position:d});var f=this.getGridCellNoCreate_(c.x,c.y,b);if(f!==undefined){for(var h=0;h<f.length;h++){if(e===f[h].getLatLng().lat()&&g===f[h].getLatLng().lng()){a=f[h]}}}return a};MarkerManager.prototype.addMarker=function(b,a,e){var c=this.getOptMaxZoom_(e);this.addMarkerBatch_(b,a,c);var d=this.getTilePoint_(b.getPosition(),this.mapZoom_,new google.maps.Size(0,0,0,0));if(this.isGridPointVisible_(d)&&a<=this.shownBounds_.z&&this.shownBounds_.z<=c){this.addOverlay_(b);this.notifyListeners_()}this.numMarkers_[a]++};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(d,e,c){var f=this.grid_[c];if(d<0){d+=this.gridWidth_[c]}var a=f[d];if(!a){a=f[d]=[];return(a[e]=[])}var b=a[e];if(!b){return(a[e]=[])}return b};MarkerManager.prototype.getGridCellNoCreate_=function(a,b,e){var c=this.grid_[e];if(a<0){a+=this.gridWidth_[e]}var d=c[a];return d?d[b]:undefined};MarkerManager.prototype.getGridBounds_=function(e,d,g,a){d=Math.min(d,this.maxZoom_);var i=e.getSouthWest();var f=e.getNorthEast();var h=this.getTilePoint_(i,d,g);var j=this.getTilePoint_(f,d,a);var c=this.gridWidth_[d];if(f.lng()<i.lng()||j.x<h.x){h.x-=c}if(j.x-h.x+1>=c){h.x=0;j.x=c-1}var b=new GridBounds([h,j]);b.z=d;return b};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(c,d){for(var a=c.minX;a<=c.maxX;a++){for(var b=c.minY;b<=c.maxY;b++){this.processCellMarkers_(a,b,c.z,d)}}};MarkerManager.prototype.processCellMarkers_=function(e,d,a,b){var c=this.getGridCellNoCreate_(e,d,a);if(c){for(var f=c.length-1;f>=0;f--){b(c[f])}}};MarkerManager.prototype.removeCellMarkers_=function(a,b,c){this.processCellMarkers_(a,b,c,this.removeOverlay_)};MarkerManager.prototype.addCellMarkers_=function(a,b,c){this.processCellMarkers_(a,b,c,this.addOverlay_)};MarkerManager.prototype.rectangleDiff_=function(b,c,d){var a=this;a.rectangleDiffCoords_(b,c,function(e,f){d.apply(a,[e,f,b.z])})};MarkerManager.prototype.rectangleDiffCoords_=function(m,b,h){var a=m.minX;var i=m.minY;var e=m.maxX;var l=m.maxY;var c=b.minX;var j=b.minY;var d=b.maxX;var k=b.maxY;var f,g;for(f=a;f<=e;f++){for(g=i;g<=l&&g<j;g++){h(f,g)}for(g=Math.max(k+1,i);g<=l;g++){h(f,g)}}for(g=Math.max(i,j);g<=Math.min(l,k);g++){for(f=Math.min(e+1,c)-1;f>=a;f--){h(f,g)}for(f=Math.max(a,d+1);f<=e;f++){h(f,g)}}};MarkerManager.prototype.removeFromArray_=function(b,e,d){var a=0;for(var c=0;c<b.length;++c){if(b[c]===e||(d&&b[c]===e)){b.splice(c--,1);a++}}return a};function ProjectionHelperOverlay(a){this.setMap(a);var d=8;var c=1<<d;var b=7;this._map=a;this._zoom=-1;this._X0=this._Y0=this._X1=this._Y1=-1}var googleJsApiSettings=eval("("+$("#googleJsApiSettings").val()+")");var googleJsApiLoadedCounter=0;function googleJsApiLoaded(){if(googleJsApiLoadedCounter==0){google.load("maps","3.2",{callback:googleMapsLoaded,language:googleJsApiSettings.language,other_params:"sensor=false"})}googleJsApiLoadedCounter++}function googleMapsLoaded(){$(".mapPosition, .mapPositionSelector, .multipleMapPositions").each(function(){ProjectionHelperOverlay.prototype=new google.maps.OverlayView();ProjectionHelperOverlay.prototype.LngToX_=function(lng){return(1+lng/180)};ProjectionHelperOverlay.prototype.LatToY_=function(lat){var sinofphi=Math.sin(lat*Math.PI/180);return(1-0.5/Math.PI*Math.log((1+sinofphi)/(1-sinofphi)))};ProjectionHelperOverlay.prototype.LatLngToPixel=function(latlng,zoom){var map=this._map;var div=this.getProjection().fromLatLngToDivPixel(latlng);var abs={x:~~(0.5+this.LngToX_(latlng.lng())*(2<<(zoom+6))),y:~~(0.5+this.LatToY_(latlng.lat())*(2<<(zoom+6)))};return abs};ProjectionHelperOverlay.prototype.draw=function(){if(!this.ready){this.ready=true;google.maps.event.trigger(this,"ready")}};var optionsString=$("input[type=hidden].options",$(this)).val();var options=eval("("+optionsString+")");if($(this).hasClass("mapPosition")){$(this).mapPosition(options)}if($(this).hasClass("mapPositionSelector")){$(this).mapPositionSelector(options)}if($(this).hasClass("multipleMapPositions")){$(this).multipleMapPositions(options)}})}$(function(){if(googleJsApiSettings){var a=$('<script type="text/javascript" src="'+googleJsApiSettings.scriptSource+'"></script>');$("#javascriptContainer").append(a)}});$(function(){$(".mapPosition, .mapPositionSelector, .multipleMapPositions").mapPositionLoading()});(function($){$.fn.mapPositionLoading=function(){$(this).each(function(){var optionsString=$("input[type=hidden].options",$(this)).val();var options=eval("("+optionsString+")")})};$.fn.mapPosition=function(options){options=$.extend({longitude:null,latitude:null,centerLongitude:0,centerLatitude:0,zoomLevel:4,icon:null},options||{});$(this).each(function(){var containerElement=$(this);var baseId=containerElement.attr("id");var mapElementId=baseId+"_Map";var mapElement=$('<div id="'+mapElementId+'" class="map"/>');containerElement.append(mapElement);var map=new google.maps.Map(mapElement[0],{mapTypeId:google.maps.MapTypeId.ROADMAP,mapTypeControl:true,navigationControlOptions:true,navigationControlOptions:{style:google.maps.NavigationControlStyle.DEFAULT},scaleControl:true,streetViewControl:true,center:new google.maps.LatLng(options.centerLatitude,options.centerLongitude),zoom:options.zoomLevel});if(options.longitude!=null&&options.latitude!=null){var icon=createGoogleMapsIcon(options.icon);var position=new google.maps.LatLng(options.latitude,options.longitude);var marker=new google.maps.Marker({position:position,icon:icon});marker.setMap(map)}$(".googleMapsLoading",$(this)).closest("div.map").remove()})};$.fn.mapPositionSelector=function(options){options=$.extend({baseName:null,longitude:null,latitude:null,centerAddress:null,centerLongitude:0,centerLatitude:0,zoomLevel:4,centerAddressZoomLevel:10,decimalSeparator:".",longitudeString:"Longitude",latitudeString:"Latitude",searchButtonString:"Search",icon:null},options||{});$(this).each(function(){var containerElement=$(this);var baseId=containerElement.attr("id");var baseName=options.baseName==null?"":options.baseName;var mapElementId=baseId+"_Map";var longitudeTextboxId=baseId+"_Longitude";var longitudeTextboxName=baseName+".Longitude";var latitudeTextboxId=baseId+"_Latitude";var latitudeTextboxName=baseName+".Latitude";var msie8ErrorBoxId=baseId+"_Msie8";var msie8=(navigator!=null&&navigator.appVersion.indexOf("MSIE 8.0")>-1);if($.browser.msie&&msie8){$("#"+msie8ErrorBoxId).show()}var mapElement=$('<div id="'+mapElementId+'" class="map" />');containerElement.append(mapElement);var longitudeTextbox=$('<input type="text" id="'+longitudeTextboxId+'" name="'+longitudeTextboxName+'" value="'+(options.longitude==null?"":numberToString(options.longitude))+'" class="longitudeLatitude" />');longitudeTextbox.blur(function(event){updateMapFromTextboxes()});containerElement.append('<label class="longitudeLatitude" for="'+longitudeTextboxId+'">'+options.longitudeString+":</label>");containerElement.append(longitudeTextbox);var latitudeTextbox=$('<input type="text" id="'+latitudeTextboxId+'" name="'+latitudeTextboxName+'" value="'+(options.latitude==null?"":numberToString(options.latitude))+'" class="longitudeLatitude" />');latitudeTextbox.blur(function(event){updateMapFromTextboxes()});containerElement.append('<label class="longitudeLatitude" for="'+latitudeTextboxId+'">'+options.latitudeString+":</label>");containerElement.append(latitudeTextbox);var searchButton=$('<input type="button" />');var searchTextbox=$('<input class="googleMapsSearchTextbox" type="text" />');searchButton.attr("value",options.searchButtonString);containerElement.append(searchTextbox);containerElement.append(searchButton);var markerPosition;if(options.longitude!=null&&options.latitude!=null){markerPosition=new google.maps.LatLng(options.latitude,options.longitude)}var map=new google.maps.Map(mapElement[0],{mapTypeId:google.maps.MapTypeId.ROADMAP,size:new google.maps.Size(mapElement.css("width").replace("px",""),mapElement.css("height").replace("px","")),mapTypeControl:true,navigationControlOptions:true,navigationControlOptions:{style:google.maps.NavigationControlStyle.DEFAULT},scaleControl:true,streetViewControl:true,center:new google.maps.LatLng(options.centerLatitude,options.centerLongitude),zoom:options.zoomLevel});google.maps.event.addListener(map,"click",clickEventHandler);var marker;if(options.longitude!=null&&options.latitude!=null){var icon=createGoogleMapsIcon(options.icon);var position=new google.maps.LatLng(options.latitude,options.longitude);marker=new google.maps.Marker({position:position,icon:icon});marker.setMap(map)}if(options.centerAddress!=null){var geocoder=new google.maps.Geocoder();geocoder.geocode({address:options.centerAddress},function(results,status){if(status==google.maps.GeocoderStatus.OK){map.setCenter(results[0].geometry.location);map.setZoom(options.centerAddressZoomLevel)}})}searchButton.click(function(){var geocoder=new google.maps.Geocoder();geocoder.geocode({address:searchTextbox.val()},function(results,status){if(status==google.maps.GeocoderStatus.OK){var closestLocation=null;var closestDistance=null;var center=map.getCenter();for(var i in results){var distance=calculateDistance(center,results[i].geometry.location);if(closestLocation==null||distance<closestDistance){closestLocation=results[i].geometry.location;closestDistance=distance}}map.setCenter(closestLocation);map.setZoom(options.centerAddressZoomLevel);searchTextbox.val("")}})});$(".googleMapsLoading",$(this)).closest("div.map").remove();function clickEventHandler(event){latitudeTextbox.val(numberToString(event.latLng.lat().toFixed(5)));longitudeTextbox.val(numberToString(event.latLng.lng().toFixed(5)));var icon=createGoogleMapsIcon(options.icon);if(marker!=null){marker.setMap(null);marker=null}marker=new google.maps.Marker({position:event.latLng,icon:icon});marker.setMap(map)}function updateMapFromTextboxes(){var latitude=stringToNumber(latitudeTextbox.val());if(latitude==null){latitudeTextbox.val("")}else{latitude=Math.max(-90,Math.min(90,latitude));latitudeTextbox.val(numberToString(latitude))}var longitude=stringToNumber(longitudeTextbox.val());if(longitude==null){longitudeTextbox.val("")}else{longitude=Math.max(-180,Math.min(180,longitude));longitudeTextbox.val(numberToString(longitude))}if(longitude!=null&&latitude!=null){position=new google.maps.LatLng(latitude,longitude);var icon=createGoogleMapsIcon(options.icon);if(marker!=null){marker.setMap(null);marker=null}marker=new google.maps.Marker({position:position,icon:icon});marker.setMap(map)}}function numberToString(number){return number.toString().replace(/\./g,options.decimalSeparator)}function stringToNumber(string){var number=parseFloat(string.replace(new RegExp(options.decimalSeparator),"."));if(isNaN(number)){return null}return number}function calculateDistance(p0,p1){var theta=p0.lng()-p1.lng();var dist=Math.sin(degreesToRadians(p0.lat()))*Math.sin(degreesToRadians(p1.lat()))+Math.cos(degreesToRadians(p0.lat()))*Math.cos(degreesToRadians(p1.lat()))*Math.cos(degreesToRadians(theta));dist=Math.acos(dist);dist=radiansToDegrees(dist);dist=dist*60*1.1515*1609.344;return dist}function degreesToRadians(deg){return deg*Math.PI/180}function radiansToDegrees(rad){return rad/Math.PI*180}})};$.fn.multipleMapPositions=function(options){options=$.extend({centerLongitude:0,centerLatitude:0,zoomLevel:4,dataVariableName:null,defaultIcon:null,callbackFunction:null},options||{});$(this).each(function(){var containerElement=$(this);var baseId=containerElement.attr("id");var mapElementId=baseId+"_Map";var mapElement=$('<div id="'+mapElementId+'" class="map"/>');containerElement.append(mapElement);var map=new google.maps.Map(mapElement[0],{mapTypeId:google.maps.MapTypeId.ROADMAP,mapTypeControl:true,navigationControlOptions:true,navigationControlOptions:{style:google.maps.NavigationControlStyle.DEFAULT},scaleControl:true,streetViewControl:true});var center=new google.maps.LatLng(options.centerLatitude,options.centerLongitude);var markerInfoArray=eval("window."+options.dataVariableName);var bounds=new google.maps.LatLngBounds();for(var i in markerInfoArray){var markerInfo=markerInfoArray[i];var position=new google.maps.LatLng(markerInfo.Position.Latitude,markerInfo.Position.Longitude);bounds.extend(position)}if(markerInfoArray.length>0){var x=bounds.getNorthEast().lng()-bounds.getSouthWest().lng();var y=bounds.getNorthEast().lat()-bounds.getSouthWest().lat();if(x==0){x=1}if(y==0){y=1}var sw=new google.maps.LatLng(bounds.getSouthWest().lat()-y/20,bounds.getSouthWest().lng()-x/20);var ne=new google.maps.LatLng(bounds.getNorthEast().lat()+y/20,bounds.getNorthEast().lng()+x/20);bounds=new google.maps.LatLngBounds(sw,ne);center=bounds.getCenter();map.fitBounds(bounds)}else{map.setCenter(center);map.setZoom(options.zoomLevel)}var markerManager=new MarkerManager(map,{trackMarkers:true});google.maps.event.addListener(markerManager,"loaded",function(){var markers=[];for(var i in markerInfoArray){var markerInfo=markerInfoArray[i];var icon=getIcon(markerInfo);var position=new google.maps.LatLng(markerInfo.Position.Latitude,markerInfo.Position.Longitude);var marker=new google.maps.Marker({position:position,icon:icon,title:markerInfo.Tooltip});marker.markerInfo=markerInfo;if(options.callbackFunction!=null){eval(options.callbackFunction)(map,marker)}if(markerInfo.Url!=null){google.maps.event.addListener(marker,"click",function(){if(this.markerInfo.Url!=null){document.location.href=this.markerInfo.Url}})}marker.setMap(map)}markerManager.addMarkers(markers,0);markerManager.refresh()});$(".googleMapsLoading",$(this)).closest("div.map").remove();function getIcon(markerInfo){if(markerInfo==null){return null}var tmpIcon;if(markerInfo.Icon!=null){tmpIcon=markerInfo.Icon}else{if(options.defaultIcon!=null){tmpIcon=options.defaultIcon}}if(tmpIcon!=null){return createGoogleMapsIcon(tmpIcon)}return null}})};function createGoogleMapsIcon(icon){if(icon==null){return null}return new google.maps.MarkerImage(icon.Image,new google.maps.Size(icon.IconSize.Width,icon.IconSize.Height),new google.maps.Point(0,0),new google.maps.Point(icon.IconAnchor.X,icon.IconAnchor.Y))}})(jQuery);
