function UIMap(f,b){this.$type="UIMap";this.container=f;this.map=null;this.markers=[];this.polygons=[];this.mapCreationCallback;this.renderingQueue=[];this._directionsRenderer=null;this._directionsService=null;this._geocoder=null;if(f==undefined||typeof f!="string"){throw new Error("[UIMap] could not initialize; id was not provided or is not a string");}var i,m,o,j,l,e;var d=true;var h=(b&&b.defaultCenter)?b.defaultCenter:{lat:0,lng:0,zoom:1};if(b){this.lang=(b.lang)?b.lang:"en";this.mapCreationCallback=(b.creationCallback)?b.creationCallback:function(){};this.mapDisplayCallback=(b.displayCallback)?b.displayCallback:function(){};this.isDelayedCreated=(b.delayedCreation)?b.delayedCreation:false;this.isDelayedRendered=(b.delayedRender)?b.delayedRender:false;var n=["hybrid","roadmap","satellite","terrain"];i=(b.mapType&&n.contains(b.mapType))?b.mapType.toUpperCase():"ROADMAP";var q=["bottom","bottom_left","bottom_right","left","right","top","top_left","top_right"];if(b.navControl!==false){e=(b.navControlPosition&&q.contains(b.navControlPosition))?b.navControlPosition.toUpperCase():"TOP_LEFT";var a=["android","default","small","zoom_pan"];l=(b.navControlStyle&&a.contains(b.navControlStyle))?b.navControlStyle.toUpperCase():"DEFAULT";}else{d=false;}if(b.mapTypeControl===true||b.mapTypeControlPosition||b.mapTypeControlStyle){m=true;j=(b.mapTypeControlPosition&&q.contains(b.mapTypeControlPosition))?b.mapTypeControlPosition.toUpperCase():"TOP_RIGHT";var g=["default","dropdown_menu","horizontal_bar"];o=(b.mapTypeControlStyle&&g.contains(b.mapTypeControlStyle))?b.mapTypeControlStyle.toUpperCase():"HORIZONTAL_BAR";}else{m=false;}}else{i="ROADMAP";m=false;o="TOP_RIGHT";j="HORIZONTAL_BAR";d=true;l="DEFAULT";e="TOP_LEFT";}var k=h;k.zoom=(h.zoom)?h.zoom:1;this._mapOpts={mapTypeControl:(m!==false),mapTypeControlOptions:{position:google.maps.ControlPosition[j],style:google.maps.MapTypeControlStyle[o]},navigationControl:(d!==false),navigationControlOptions:{position:google.maps.ControlPosition[e],style:google.maps.NavigationControlStyle[l]},zoom:k.zoom,center:new google.maps.LatLng(k.lat,k.lng),mapTypeId:google.maps.MapTypeId[i]};if((b&&b.delayedCreation!==true)||!b){this.create();if(b&&b.delayedRender!==true){this.renderOverlays();}}}UIMap.implement({create:function(){if(this.map===null){this.map=new google.maps.Map($(this.container).get(0),this._mapOpts);var b=this;var a=setInterval(function(){if(b.map!==null){clearInterval(a);b.mapCreationCallback.call(b);}},100);google.maps.event.addListener(this.map,"tilesloaded",function(){google.maps.event.clearListeners(this,"tilesloaded");b.mapDisplayCallback.call(b);if(b.isDelayedRendered===false){b.renderOverlays();}});}},getZoom:function(){return this.map.getZoom();},setZoom:function(a){this.map.setZoom(a);},zoomIn:function(){this.map.zoomIn();},zoomOut:function(){this.map.zoomOut();},getCenter:function(){return this.map.getCenter();},setCenter:function(a){this.map.setCenter(new google.maps.LatLng(a.lat,a.lng));},setMapType:function(a){var b=["hybrid","roadmap","satellite","terrain"];if(b.contains(a)){this.map.setMapTypeId(a);}},createMarker:function(g,d){var c=["id","title","contents","zIndex","draggable"];var a=new google.maps.LatLng(g.lat,g.lng);var e={position:a,title:""};if(d){for(p in d){if(c.contains(p)){e[p]=d[p];}}if(d.markerIcon!==undefined){e.icon=d.markerIcon.icon;e.shadow=d.markerIcon.shadow;}if(d.dragstart||d.dragend){e.draggable=true;}}var b=new google.maps.Marker(e);this.markers.push(b);if(d){var f=this;if(d.content||d.click){google.maps.event.addListener(b,"click",function(i){if(d.contents){var h=new google.maps.InfoWindow({content:d.contents});h.open(f.map,b);}if(typeof d.click=="function"){d.click.call(f,this,this.position);}});}if(typeof d.dragstart=="function"){google.maps.event.addListener(b,"dragstart",function(h){d.dragstart.call(f,this,this.position);});}if(typeof d.dragend=="function"){google.maps.event.addListener(b,"dragend",function(h){d.dragend.call(f,this,this.position);});}}if(this.map!==null&&this.isDelayedRendered!==true){b.setMap(this.map);}else{this.renderingQueue.push(b);}},createInfoWindow:function(b,a){var c=new google.maps.InfoWindow({content:b});c.open(this.map,a);return c;},fitToMarkers:function(){var c=new google.maps.LatLngBounds();for(var b=0,a=this.markers.length;b<a;b++){c.extend(this.markers[b].position);}this.map.fitBounds(c);},getMarker:function(c){for(var b=0,a=this.markers.length;b<a;b++){if(this.markers[b].id==c){return this.markers[b];}}return null;},getCoordsFromAddress:function(a,e,b){this.geocoder=new google.maps.Geocoder();var c={address:a,language:this.lang};var d=this;this.geocoder.geocode(c,function(j,h){var n,k;if(b!==true){if(j[0]!==undefined){n=j[0].geometry.location.lat();k=j[0].geometry.location.lng();a=j[0].formatted_address;}else{n=k=a=null;}e.call(d,h.toLowerCase(),{lat:n,lng:k},a);}else{var g=[];var o=[];for(var m=0,f=j.length;m<f;m++){n=j[m].geometry.location.lat();k=j[m].geometry.location.lng();g.push({lat:n,lng:k});o.push(j[0].formatted_address);}e.call(d,h.toLowerCase(),g,o);}});},traceRoute:function(g,a,d){this.clearMarkers();if(this._directionsRenderer){this._directionsRenderer.setMap(null);this._directionsRenderer=null;}var b=(d&&d.travelMode)?d.travelMode.toUpperCase():"DRIVING";b=(b!="DRIVING"&&b!="WALKING")?"DRIVING":b;var f=(d&&d.callback)?d.callback:function(){};this._directionsRenderer=new google.maps.DirectionsRenderer();this._directionsRenderer.setMap(this.map);this._directionsService=new google.maps.DirectionsService();var c={travelMode:google.maps.DirectionsTravelMode[b],language:this.lang};if(typeof g=="object"){c.origin=new google.maps.LatLng(g.lat,g.lng);}else{if(typeof g=="string"){c.origin=g;}}if(typeof a=="object"){c.destination=new google.maps.LatLng(a.lat,a.lng);}else{if(typeof a=="string"){c.destination=a;}}var e=this;this._directionsService.route(c,function(h,i){if(i==google.maps.DirectionsStatus.OK){e._directionsRenderer.setDirections(h);f.call(this);}});},createPolygon:function(d,b){paths=d;var c={paths:paths};if(b){for(p in b){c[p]=b[p];}}var a=new google.maps.Polygon(c);this.polygons.push(a);if(this.map!==null&&this.isDelayedRendered!==true){a.setMap(this.map);}else{this.renderingQueue.push(a);}},getPolygon:function(c){for(var b=0,a=this.polygons.length;b<a;b++){if(this.polygons[b].id==c){return this.polygons[b];}}return null;},centerOnMarker:function(g,d,f){for(var b=0,a=this.markers.length;b<a;b++){if(this.markers[b].id==g){this.map.setCenter(this.markers[b].position);d=(d)?d:15;this.map.setZoom(d);if(f===true){var c=this.markers[b].contents;var e=new google.maps.InfoWindow({content:c});e.open(this.map,this.markers[b]);}}}},clearMarkers:function(d){var a=this.markers.length,c=0;if(d instanceof Array){for(c,len=d.length;c<len;c++){for(var b=0;b<(a-1);b++){if(d[c]==this.markers[b].id){this.markers[b].setMap(null);this.markers.remove(b);}}}}else{if(typeof d=="string"){for(c;c<a;c++){if(d==this.markers[c].id){this.markers[c].setMap(null);this.markers.remove(c);return;}}}else{for(c;c<a;c++){this.markers[c].setMap(null);}this.markers.empty();}}},renderOverlays:function(){if(this.map!==null&&this.renderingQueue.length>0){for(var b=0,a=this.renderingQueue.length;b<a;b++){this.renderingQueue[b].setMap(this.map);}this.renderingQueue=[];}}});function MarkerIcon(o,j,k,a){this.$type="MarkerIcon";var d=j.w;var n=j.h;var c=(j.x)?j.x:d/2;var b=(j.y)?j.y:n;var e=new google.maps.MarkerImage(o,new google.maps.Size(d,n),new google.maps.Point(0,0),new google.maps.Point(c,b));var q=null;if(typeof shad_src!="undefined"&&typeof a!="undefined"){var m=a.w;var f=a.h;var l=(a.x!=undefined)?a.x:m/2;var h=(a.y!=undefined)?a.y:f;q=new google.maps.MarkerImage(k,new google.maps.Size(m,f),new google.maps.Point(0,0),new google.maps.Point(l,h));}var g={icon:e,shadow:q};return g;}