if (typeof ACE == "undefined" || !ACE) {
    var ACE = {};
}

ACE.map = (function () {

    function getPinUrl(txt, color, bgcolor) {
        return 'http://chart.apis.google.com/chart' +
            '?chst=d_map_pin_letter' +
            '&chld=' + [txt, color, bgcolor].join('|') + "&ext=.png";
    }

    $(document).ready(function () {
        $('select[name=type]').change(function (ev) {
            var option = $('select[name=type] option:selected');
            var artforms = $('fieldset.artform_list');
            if (option.hasClass('hide_artforms')) {
                artforms.hide();
            } else {
                artforms.show();
            }
        }).change();
    });

    function init(lat, lon) {
        google.load("maps", "2", { callback: function () {
            var i = 0x40,
                pinUrl = null,
                boundsMultiplier = 0.25,
                GMarker = google.maps.Marker,
                GIcon = google.maps.Icon,
                isLargeMap = $('#map').hasClass('largemap'),
                mapNode = $('#map');

            if (!mapNode) { return; }

            var map = new google.maps.Map2(mapNode[0]);

            var center = new google.maps.LatLng(lat, lon);
            pinUrl = getPinUrl('', '333333', 'ffffff');
            //map.setUIToDefault();
            map.addControl(new GLargeMapControl3D());

            map.addOverlay(new google.maps.Marker(center,
                new google.maps.Icon(G_DEFAULT_ICON, pinUrl)));

            var latlngbounds = new google.maps.LatLngBounds();
            latlngbounds.extend(center);

            $('.vcard').each(function () {
                var c = String.fromCharCode(++i),
                    latlng = new google.maps.LatLng(
                        $('.geo .latitude', this).html(),
                        $('.geo .longitude', this).html()),
                    href = $('a', this).attr("href") + "?ajax=1",
                    pinUrl = getPinUrl(c, 'de0079', 'ffffff'),
                    marker = new google.maps.Marker(latlng,
                        new google.maps.Icon(G_DEFAULT_ICON, pinUrl));
                latlngbounds.extend(latlng);
                GEvent.addListener(marker, 'click', function () {
                    if (!isLargeMap) { return; }
                    GDownloadUrl(href, function (data, statusCode) {
                        if (statusCode != 200) { return; }
                        marker.openInfoWindowHtml(data, {
                            "maxWidth": 300
                        });
                    });
                });

                map.addOverlay(marker);
                $(this).prepend('<img src="' + pinUrl + '" class="listmarker">');
            });

            var ne = latlngbounds.getNorthEast(),
                sw = latlngbounds.getSouthWest(),
                latD = latlngbounds.toSpan().lat() * boundsMultiplier,
                lngD = latlngbounds.toSpan().lng() * boundsMultiplier;
            latlngbounds.extend(new GLatLng(sw.lat() - latD, sw.lng() - lngD));
            latlngbounds.extend(new GLatLng(ne.lat() + latD, ne.lng() + latD));

            map.setCenter(center, map.getBoundsZoomLevel(latlngbounds));
        }});
    };

    return {
        init: init
    }
} ());

