var map, mm;
var allMarkers = [];
var allFeeds = [];
var mMarkers = [];
var markerGroups = { 100: [] };
var bounds = new GLatLngBounds();
var pointCount = 24;
var baseIcon = new GIcon();
baseIcon.iconSize = new GSize(32, 32);
baseIcon.shadowSize = new GSize(59, 32);
baseIcon.iconAnchor = new GPoint(16, 32);
baseIcon.infoWindowAnchor = new GPoint(16, 4);


jQuery.noConflict();
jQuery(document).ready(function($){
    if (GBrowserIsCompatible()) {
        map = new GMap2(document.getElementById("gmap-metro-atlantas-water-rules"));
        // map.enableGoogleBar();
        map.setCenter(new GLatLng(0,0),0);
        map.addControl(new GSmallMapControl());
        // map.addControl(new GSmallZoomControl());
        map.addMapType(G_PHYSICAL_MAP);
        // map.removeMapType(G_SATELLITE_MAP);
        map.removeMapType(G_HYBRID_MAP);
        map.addControl(new GMapTypeControl());
        // map.addControl(new GOverviewMapControl(new GSize(75, 75)));
        
        GDownloadUrl("/mapmash/xml/168/", function(data) {
            var xml = GXml.parse(data);
            
            map.setZoom(9);
            
            
            var markers = xml.documentElement.getElementsByTagName("marker");
            for (var i = 0; i < markers.length; i++) { var marker = createMarker(markers[i]); map.addOverlay(marker); }
            
            var clat = (bounds.getNorthEast().lat() + bounds.getSouthWest().lat()) /2;
            var clng = (bounds.getNorthEast().lng() + bounds.getSouthWest().lng()) /2;
            map.setCenter(new GLatLng(clat,clng));
            
            

            
        });
    }
});


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


function getMarkers(num) {
    var set = [];
    if (mMarkers.length < num) { num = mMarkers.length; }
    if (num > 0) { 
        for(var i = 0; i < num; i++) {
            set.push(mMarkers.pop());
        }
        return set;
    } else { 
        return false;
    }
}


function addManagedMarkers() {
    mm = new GMarkerManager(map);
    mm.addMarkers(mMarkers, 0);
    mm.refresh();
}


function createGeoOverlay(xml) {
    var feed_url = xml.getAttribute("feed");
    var id = xml.getAttribute("id");
    var feed = new GGeoXml(feed_url);
    allFeeds[id] = feed;
    return feed;
}


function createMarker(marker) {
    var id = marker.getAttribute("id");
    var layer = marker.getAttribute("layer");
    var html = marker.getAttribute("html");
    var image_url = marker.getAttribute("image_url");
    var shadow_url = marker.getAttribute("shadow_url");
    var name = marker.getAttribute("name");
    var point = new GLatLng(parseFloat(marker.getAttribute("lat")), parseFloat(marker.getAttribute("lon")));
    bounds.extend(point);
    var icon = new GIcon(baseIcon);
    icon.image = image_url;
    icon.shadow = shadow_url;
    var marker = new GMarker(point, {icon: icon, title: name});
    markerGroups[layer].push(id);
    mMarkers.push(marker);
    allMarkers[id] = marker;
    marker.bindInfoWindowHtml(html, {maxWidth: 300});
    return marker;
}


function showInfo(i) {
    if(!allMarkers[i].isHidden()) {
        GEvent.trigger(allMarkers[i], "click");
    } else {
        map.addOverlay(allMarkers[i]);
        GEvent.trigger(allMarkers[i], "click");
    }
}


function toggleGroup(layer) {
    for (var i = 0; i < markerGroups[layer].length; i++) {
        var id = markerGroups[layer][i];
        jQuery("div.gmap-point-" + id).slideToggle("fast");
        if (allMarkers[id].isHidden()) {
            allMarkers[id].show();
        } else {
            allMarkers[id].hide();
            allMarkers[id].closeInfoWindow();
        }
    } 
}


function toggleFeed(layer) {
    var feed = allFeeds[layer];
    if (feed.isHidden()) {
        feed.show();
    } else {
        feed.hide();
    } 
}