Type.registerNamespace("rb");rb.Map=function(c,b,d){this._settings={zoom:3,lat:40,lng:-95,address:"unknown",mapTypeId:"ROADMAP",mapTypeControl:false,scrollWheelZoom:true,disableDefaultUI:true,mapControlType:"GSmallZoomControl3D",useClientLocation:true};for(var a in d){this._settings[a]=d[a]}this.canvas=null;this._geocoder=null;this._mapPoints=null;this._directions=null;this._directionStart=null;this._directionEnd=null;this._map=null;this._directionDiv=document.createElement("div");this._locationMarkers=null;this._markerManager=null;this._eventHandlers=new Sys.EventHandlerList();this._apiLoaded=false;this._googleClientID=c;this._googleKey=b;this.initialized=false;this._delegates={onAPILoaded:Function.createDelegate(this,this._onAPILoaded),onAddressResult:Function.createDelegate(this,this._onAddressResult),onDirectionLoaded:Function.createDelegate(this,this._onDirectionLoaded),onMarkerClick:Function.createDelegate(this,this._onMarkerClick)};this._mapOptions={}};rb.Map.prototype={loadAPI:function(){if(!this._apiLoaded){var a={other_params:"sensor=false",callback:this._delegates.onAPILoaded};if(this._googleClientID){a.other_params=String.format("client={0}&{1}",this._googleClientID,a.other_params)}else{if(this._googleKey){a.other_params=String.format("key={0}&{1}",this._googleKey,a.other_params)}}google.load("maps","2",a)}},initMap:function(canvasId){if(this._canvas!=null){this._canvas.innerHTML=""}else{this._canvas=$get(canvasId)}this._map=new google.maps.Map2(this._canvas);if(this._settings.mapControlType.length>0){this._map.addControl(eval("new "+this._settings.mapControlType+"()"))}if(this._settings.scrollWheelZoom){this._map.enableScrollWheelZoom()}this._map.setCenter(this._mapOptions.center,this._mapOptions.zoom);var latLng=new google.maps.LatLng(this._settings.lat,this._settings.lng);this._markerManager=new google.maps.MarkerManager(this._map);this._locationMarkers={};this._directions=new google.maps.Directions(this._map,this._directionDiv);google.maps.Event.addListener(this._directions,"addoverlay",this._delegates.onDirectionLoaded)},getMapPoint:function(d,c,b,a){return{ID:d,lat:c,lng:b,image:a}},getMarkerImage:function(d,a,e,f,h,c,b){var g=new google.maps.Icon(null,d);if(a){g.iconSize=new google.maps.Size(a,e)}if(f){g.iconAnchor=new google.maps.Point(f,h)}if(c){g.infoWindowAnchor=new google.maps.Point(c,b)}return g},updateMap:function(h){this._mapPoints=h;var f=new google.maps.LatLngBounds();this._map.clearOverlays();this.initMap(this._canvas.id);var c=[];for(var a=0;a<h.length;a++){var d=h[a];if(d!=null){var b=new google.maps.LatLng(d.lat,d.lng);var g=new google.maps.Marker(b,{icon:d.image});f.extend(b);google.maps.Event.addListener(g,"click",this._delegates.onMarkerClick);b.markerID=d.ID;this._locationMarkers[d.ID]=g;c.push(g)}this._markerManager.addMarkers(c,0,17)}var e=11;if(h.length>1){e=this._map.getBoundsZoomLevel(f)}this._map.setCenter(f.getCenter(),e);this._markerManager.refresh()},findAddress:function(b){if(b==null||b.length==0){var a={lat:this._settings.lat,lng:this._settings.lng,address:this._settings.address,success:true};this.raiseEvent("onGeoCode",this,a)}else{this._geocoder.getLocations(b,this._delegates.onAddressResult)}},getDirections:function(c,a){this._directionStart=c;this._directionEnd=a;var b=String.format("from: {0}, {1} to: {2}, {3}",c.lat,c.lng,a.lat,a.lng);this._directions.load(b)},showMarker:function(b,a){if(a==null){a=false}this.raiseEvent("onMarkerShow",this._locationMarkers[b],{ID:b,clicked:a})},showMarkerInfo:function(a,b){a.openInfoWindowHtml(b)},hasClientLocation:function(){return this._settings.useClientLocation&&google.loader.ClientLocation!=null},_onAPILoaded:function(){if(this.hasClientLocation()){this._settings.lat=google.loader.ClientLocation.latitude;this._settings.lng=google.loader.ClientLocation.longitude;if(google.loader.ClientLocation.address!=null){this._settings.address=google.loader.ClientLocation.address.city}}this._mapOptions={zoom:this._settings.zoom,center:new google.maps.LatLng(this._settings.lat,this._settings.lng),disableDefaultUI:this._settings.disableDefaultUI,mapTypeControl:this._settings.mapTypeControl};this._geocoder=new google.maps.ClientGeocoder();this._mapOptions.center=new google.maps.LatLng(this._settings.lat,this._settings.lng);this._apiLoaded=true;this.raiseEvent("onAPILoaded",this)},_onDirectionLoaded:function(e){var b={start:this._directionStart,end:this._directionEnd,steps:[],success:false,code:null,distance:0,time:0};b.code=this._directions.getStatus().code;if(b.code==google.maps.GEO_SUCCESS){this._map.removeOverlay(this._directions.getMarker(0));this._map.removeOverlay(this._directions.getMarker(1));if(this._directions.getNumRoutes()>0){var a=this._directions.getRoute(0);for(var c=0;c<a.getNumSteps();c++){var d=a.getStep(c);b.steps.push({id:c+1,html:(c+1)+". "+d.getDescriptionHtml(),distance:d.getDistance(),duration:d.getDuration()})}b.time=this._directions.getDuration().html;b.distance=this._directions.getDistance().html;b.success=true}}this.raiseEvent("onDirections",this._directions,b)},_onMarkerClick:function(c,b){this.showMarker(c.markerID,true)},_onAddressResult:function(c,b){var a=this._handleAddressResult(c,b);this.raiseEvent("onGeoCode",this,a)},_handleAddressResult:function(c,b){var a={lat:0,lng:0,address:null,success:false};if(c!=null&&c.Status.code==google.maps.GEO_SUCCESS){a.lng=c.Placemark[0].Point.coordinates[0];a.lat=c.Placemark[0].Point.coordinates[1];a.address=c.Placemark[0].address;a.success=true}return a},addEventHandler:function(b,a){this._eventHandlers.addHandler(b,a)},removeEventHandler:function(b,a){this._eventHandlers.removeHandler(b,a)},raiseEvent:function(c,d,a){var b=this._eventHandlers.getHandler(c);if(b){b(d,a)}}};rb.Map.registerClass("rb.Map");