﻿

    var map;
    var layers = new Array();
    
    var WGA = 'wga';
    var CHAPTERS = 'chapters';
    var CLUBS = 'clubs';  
    
    // Call this function when the page has been loaded  
    function initialize() 
    {
        if (GBrowserIsCompatible()) 
        {
            map = new GMap2(document.getElementById("map_canvas"));
            map.setCenter(new GLatLng(37.926868, -97.646484), 4, G_HYBRID_MAP);  
            InitFeed("./Handlers/MapFeed.ashx?feed=chapters", CHAPTERS);
            InitFeed("./Handlers/MapFeed.ashx?feed=clubs", CLUBS);
            InitFeed("./Handlers/MapFeed.ashx?feed=wga", WGA);
        
            map.addControl(new GSmallMapControl());
            map.addControl(new GMapTypeControl());
        }
    }  
    
    function InitFeed(path, key)
    {
        var xmlHttp;
        try
        {  
            // Firefox, Opera 8.0+, Safari  
            xmlHttp = new XMLHttpRequest();  
        }
        catch (e)
        {  
            // Internet Explorer  
            try
            {    
                xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");    
            }
            catch (e)
            {    
                try
                {
                    xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");      
                }
                catch (e)
                {      
                    alert("Your browser does not support AJAX!");      
                    return false;      
                }    
            }  
        }
    
        xmlHttp.onreadystatechange = function()
        {
            if (xmlHttp.readyState == 4)
            {
                ParseFeed(xmlHttp.responseText, key);
            }
        }
        
        xmlHttp.open("GET", path, true);
        xmlHttp.send(null);  
    }
    
    function ParseFeed(xml, key)
    {
        var xmlDoc;
        
        try 
        {
            //Internet Explorer
            xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
            xmlDoc.async="false";
            xmlDoc.loadXML(xml);
        }
        catch(e)
        {
            try 
            {
                //Firefox, Mozilla, Opera, etc.
                parser = new DOMParser();
                xmlDoc = parser.parseFromString(xml, "text/xml");
                //alert(xml);
            }
            catch(e) {alert(e.message)}
        }
        
        // parse it out
        var items = xmlDoc.getElementsByTagName('item');
        var name, description, lat, lon;
        for (a=0; a<items.length; a++)
        {
            if (items[a].childNodes.length == 4)
            {
                // IE
                name = items[a].childNodes[0].childNodes[0].nodeValue;
                description = items[a].childNodes[1].childNodes[0].nodeValue;
                lat = items[a].childNodes[2].childNodes[0].nodeValue;
                lon = items[a].childNodes[3].childNodes[0].nodeValue;
            }
            else
            {
                // everything else
                name = items[a].childNodes[1].childNodes[0].nodeValue;
                description = items[a].childNodes[3].childNodes[1].nodeValue;
                lat = items[a].childNodes[5].childNodes[0].nodeValue;
                lon = items[a].childNodes[6].childNodes[0].nodeValue;
            }
            
            CreateMarker(name, description, lat, lon, key);
        }
    }
    
    function CreateMarker(name, description, lat, lon, key)
    {
        // Create a lettered icon for this point using our icon class
        var myIcon = new GIcon();
        myIcon.iconSize = new GSize(16, 16);
        myIcon.shadow = "./Images/map/shadow.png";
        myIcon.shadowSize = new GSize(59, 32);
        myIcon.iconAnchor = new GPoint(0, 0);
        myIcon.infoWindowAnchor = new GPoint(9, 2);
        switch (key)
        {
            case(CHAPTERS): {myIcon.image = "./Images/map/chapter.gif"; break;}
            case(CLUBS): {myIcon.image = "./Images/map/flag_yellow.gif"; break;}
            case(WGA): {myIcon.image = "./Images/map/building.gif"; break;}
        }

        var latlng = new GLatLng(lat, lon);
        
        // set up our GMarkerOptions object
        markerOptions = { icon:myIcon };
        var marker = new GMarker(latlng, markerOptions);
        GEvent.addListener(marker, "click", function() 
        {
            marker.openInfoWindowHtml(description);
        });
        
        map.addOverlay(marker);
        
        var found = false;
        for (b=0; b<layers.length; b++)
        {
            if (layers[b].keyName == key)
            {
                layers[b].markers[layers[b].markers.length] = marker;
                found = true;
            }
        }
        
        if (!found)
        {
            layer = new Layer(key);
            layer.markers[0] = marker;
            layers[layers.length] = layer;
        }
    }
    
    function Layer(key)
    {
        this.markers = new Array();
        this.keyName = key;
    }

    function ToggleLayerVisibility(show, key)
    {
        var markers = GetMarkers(key);
        if (markers == null)
        {
            alert('Invalid layer key provided.');
            return;
        }
        
        if (show) 
        {
            for (c=0; c<markers.length; c++)
            {
                map.addOverlay(markers[c]);
            }
        }
        else 
        {
            for (c=0; c<markers.length; c++)
            {
                map.removeOverlay(markers[c]);
            }
        }
    }
    
    function GetMarkers(key)
    {
        for (d=0; d<layers.length; d++)
        {
            if (layers[d].keyName == key)
            {
                return(layers[d].markers);
            }
        }
        
        return(null);
    }
