MilwaukeeTool = window.MilwaukeeTool || {};

MilwaukeeTool.Maps = function() {
    var _map = null;
    var _map_bounds = null;
    var _retailers = null;

    function _init_map() {
        _map = new google.maps.Map2(document.getElementById("map"));
        _map.addControl(new GLargeMapControl());
        _map.addControl(new GScaleControl());
        _map.addControl(new GMapTypeControl());
        _map.setCenter(new GLatLng(0, 0), 0);

        _map_bounds = new GLatLngBounds();

        var marker;

        for (var i = 0; i < _retailers.length; i++) {
            marker = _create_marker(_retailers[i], i);
            _map.addOverlay(marker);

            // make sure bounds include the retailer
            _map_bounds.extend(marker.getPoint());
        }

        // set map zoom and center point based on bounds
        _map.setZoom(_map.getBoundsZoomLevel(_map_bounds));
        _map.setCenter(_map_bounds.getCenter());

        $('body').unload(google.maps.Unload); // set unload action
    }

    function _create_marker(retailer, index) {
        var latlng = new GLatLng(retailer.lat, retailer.lng);
        var icon = new GIcon();
        icon.image = '/images/background-where-results-number.png';
        icon.iconSize = new GSize(17, 17);
        icon.iconAnchor = new GPoint(0, 0);
        icon.infoWindowAnchor = new GPoint(25, 7);

        opts = {
            "icon": icon,
            "clickable": false,
            "labelText": new String(parseInt(index + 1)),
            "labelClass": 'map-marker-label',
            "labelOffset": new GSize(5, 3)
        };

        var marker = new LabeledMarker(latlng, opts);

        var handler = _create_marker_click_handler(marker, retailer.name, retailer.address);
        GEvent.addListener(marker, "click", handler);

        return marker;
    }

    function _create_marker_click_handler(marker, name, address) {
        return function() {
            marker.openInfoWindowHtml(
				'<h3 class="info-window">' + name + '</h3>' +
				'<p>' + address + '<br /><br /><a href="http://maps.google.com/maps?daddr=' + escape(address) + '">Get Directions</a></p>'
			);

            return false;
        };
    }

    return {
        init: function(retailers) {
            _retailers = retailers;
            _init_map();
        }
    }
} ();