function make_marker(input) {
    var point = new GLatLng(parseFloat(input.latitude), parseFloat(input.longitude));
    marker = new GMarker(point, {'icon': new GIcon(G_DEFAULT_ICON, input.icon), 'title': input.marker_title});
    marker.bindInfoWindowHtml(input.bubble, {'maxWidth': 220});
    var marker_obj = new Array(marker, input.marker_id, input.group);
    return marker_obj;
}

function map_setup(div, types) {
    var maptypes = [G_PHYSICAL_MAP, G_NORMAL_MAP, G_SATELLITE_MAP, G_HYBRID_MAP];
    var map = new GMap2(document.getElementById(div), {'mapTypes': maptypes});
    map.addControl(new GSmallZoomControl());
    if(types) {
        map.addControl(new GHierarchicalMapTypeControl(true));
    }
    return map;
}

function locator_map(lat, lon, icon) {
    if (GBrowserIsCompatible()) {
        $(document).ready(function() {
                setTimeout(function() {
                    var map = map_setup('dd-locator', false);
                    var point = new GLatLng(lat, lon);
                    var marker = new GMarker(point, {'icon': new GIcon(G_DEFAULT_ICON, icon), 'clickable': false});
                    map.setCenter(point, 12);
                    map.addOverlay(marker);
                }, 50);
        });
    }
}

function destination_locator(lat, lon) {
    if (GBrowserIsCompatible()) {
        $(document).ready(function() {
                setTimeout(function() {
                    var map = map_setup('dd-locator', false);
                    var point = new GLatLng(lat, lon);
                    map.setCenter(point, 8);
                }, 50);
        });
    }
}

function large_map(json_file, div) {
    if (GBrowserIsCompatible()) {
        $(document).ready(function() {
            if (location.hash) { var composite = location.hash.substring(1).split('-'); var type = composite[0]; var point = composite[1]; }
            var map = map_setup(div, true);
            var bounds = new GLatLngBounds();
            var marker_groups = new Object();
            setTimeout(function() {
                $.getJSON(json_file, function(data) {
                    for (var i in data.markers) {
                        var marker_object = make_marker(data.markers[i]);
                        if(!marker_groups[marker_object[2]]) { marker_groups[marker_object[2]] = new Object(); }
                        marker_groups[marker_object[2]][marker_object[1]] = marker_object[0];
                        bounds.extend(marker_object[0].getLatLng());
                    }
                    map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds));
                    for (var j in marker_groups) { for (var k in marker_groups[j]) { map.addOverlay(marker_groups[j][k]); } }
                    if(type && point) {
                        if (marker_groups[type][point]) { 
                            var newbounds = new GLatLngBounds();
                            newbounds.extend(marker_groups[type][point].getLatLng());
                            map.setZoom(map.getBoundsZoomLevel(newbounds));
                            GEvent.trigger(marker_groups[type][point], 'click');
                            map.panTo(marker_groups[type][point].getLatLng());
                        }
                    }
                });
            }, 50);

            $('.dd-list a').mouseover(function() {
                var composite = $(this).attr('id').split('-');
                if (marker_groups[composite[0]][composite[1]]) { GEvent.trigger(marker_groups[composite[0]][composite[1]], 'click'); }
                return false;
            });
            
            $('.dd-category input').click(function() {
                var type = $(this).attr('id');
                if(marker_groups[type]) {
                    for(var l in marker_groups[type]) {
                        if(marker_groups[type][l].isHidden()) { marker_groups[type][l].show(); }
                        else { marker_groups[type][l].hide(); marker_groups[type][l].closeInfoWindow(); }
                    }
                }
            });
        });
    }
}

$(document).ready(function() {
    $("#destination-select").change(function() {
        if($(this).attr('value')) { window.location = $(this).attr('value'); }
    });
});

$(window).unload(function() {
    GUnload();
});