/* ------------------------------------------------------------------------------
 *
 *  # Circles
 *
 *  Specific JS code additions for maps_google_drawings.html page
 *
 * ---------------------------------------------------------------------------- */


// Setup module
// ------------------------------

var GoogleMapDrawingCircles = function() {


    //
    // Setup module components
    //

    // Line chart
    var _googleMapDrawingCircles = function() {
        if (typeof google == 'undefined') {
            console.warn('Warning - Google Maps library is not loaded.');
            return;
        }

        // This example creates circles on the map, representing
        // populations in North America.

        // First, create an object containing LatLng and population for each city.
        var citymap = {};
        citymap['wroclaw'] = {
            center: new google.maps.LatLng(51.112, 17.052),
            population: 271485
        };
        citymap['budapest'] = {
            center: new google.maps.LatLng(47.481, 19.130),
            population: 840583
        };
        citymap['kernstadt'] = {
            center: new google.maps.LatLng(51.720, 8.764),
            population: 385779
        };
        citymap['nancy'] = {
            center: new google.maps.LatLng(48.688, 6.173),
            population: 603502
        };
        citymap['munich'] = {
            center: new google.maps.LatLng(48.154, 11.541),
            population: 594039
        };
        citymap['warsaw'] = {
            center: new google.maps.LatLng(52.232, 21.061),
            population: 492093
        };

        // Initialize
        var cityCircle;
        function initialize() {

            // Define map element
            var map_drawing_circles_element = document.getElementById('map_drawing_circles');

            // Options
            var mapOptions = {
                zoom: 6,
                center: new google.maps.LatLng(50.059, 14.465),
                mapTypeId: google.maps.MapTypeId.TERRAIN
            };

            // Apply options
            var map = new google.maps.Map(map_drawing_circles_element, mapOptions);


            // Construct the circle for each value in citymap.
            // Note: We scale the area of the circle based on the population.
            for (var city in citymap) {

                // Options
                var populationOptions = {
                    strokeColor: '#b41b1b',
                    strokeOpacity: 0.5,
                    strokeWeight: 1,
                    fillColor: '#b41b1b',
                    fillOpacity: 0.2,
                    map: map,
                    center: citymap[city].center,
                    radius: Math.sqrt(citymap[city].population) * 100
                };

                // Add the circle for this city to the map.
                cityCircle = new google.maps.Circle(populationOptions);
            }
        }

        // Load map
        google.maps.event.addDomListener(window, 'load', initialize);
    };


    //
    // Return objects assigned to module
    //

    return {
        init: function() {
            _googleMapDrawingCircles();
        }
    }
}();


// Initialize module
// ------------------------------

document.addEventListener('DOMContentLoaded', function() {
    GoogleMapDrawingCircles.init();
});
