asynchronous loading of google-maps-API

see: http://stackoverflow.com/questions/14184956/async-google-maps-api-v3-undefined-is-not-a-function/14185834#14185834

HTML

<script src="https://maps.googleapis.com/maps/api/js?v=3&amp;sensor=false"></script>
<div id="map_wrapper">
  <div id="map_canvas" class="mapping"></div>
</div>

CSS

#map_wrapper {
  height: 500px;
}

#map_canvas {
  width: 100%;
  height: 100%;
}

JavaScript

$.get('https://dl.dropboxusercontent.com/u/97162408/crashdata.csv', function(data) {
     function initialize() {
       var bounds = new google.maps.LatLngBounds();
       var mapOptions = {
         mapTypeId: 'roadmap'
       };

       // Display a map on the page
       var map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);
       map.setTilt(45);

       // Multiple Markers
       var markers = [];

       // Info Window Content
       var infoWindowContent = [];

       data = csvToArray(data);
       data.forEach(function(item) {
         markers.push([item.LGA_NAME, parseFloat(item.Lat), parseFloat(item.Long)]);
         infoWindowContent.push([item.Information]);
       });

       // Display multiple markers on a map
       var infoWindow = new google.maps.InfoWindow(),
         marker, i;

       // Loop through our array of markers & place each one on the map  
       for (i = 0; i < markers.length - 1; i++) {
         console.log(markers[i][1]);
         var position = new google.maps.LatLng(markers[i][1], markers[i][2]);

         bounds.extend(position);
         marker = new google.maps.Marker({
           position: position,
           map: map,
           title: markers[i][0]
         });

         // Allow each marker to have an info window    
         google.maps.event.addListener(marker, 'click', (function(marker, i) {
           return function() {
             infoWindow.setContent(infoWindowContent[i][0]);
             infoWindow.open(map, marker);
           }
         })(marker, i));

         // Automatically center the map fitting all markers on the screen
         map.fitBounds(bounds);
       }

       // Override our map zoom level once our fitBounds function runs (Make sure it only runs once)
       var boundsListener = google.maps.event.addListener((map), 'bounds_changed', function(event) {
         this.setZoom(14);
         google.maps.event.removeListener(boundsListener);
       });

     }
    ...