﻿// Set up the map
var gMap;
var gSmallIcon;
var gWideIcon;
var itemNodes;
var avgLat;
var avgLng;
var areas;

function OnLoad()
{
    // Initialize the map
    gMap = new GMap2(document.getElementById("fullmap"));
    gMap.addControl(new GLargeMapControl());
    
    // Get the Items from RSS Feed
    var rssDoc;
    var parseXML = false;
    
    if (window.ActiveXObject && /Win/.test(navigator.userAgent))
    {
        rssDoc = new ActiveXObject("Msxml.DOMDocument");
        rssDoc.async = false;
        rssDoc.onreadystatechange = function()
        {
            if (rssDoc.readyState == 4)
            {
                parseXML = true;
            }
        }
        rssDoc.load(FeedUrl);
    }
    else if (document.implementation && document.implementation.createDocument)
    {
        rssDoc = document.implementation.createDocument("", "", null);
        rssDoc.async = false;
        var loaded = rssDoc.load(FeedUrl);
        if (loaded)
        {
            parseXML = true;
        }
    }
    
    if (parseXML == true)
    {
        itemNodes = rssDoc.getElementsByTagName('item');
        avgLat = 0;
        avgLng = 0;
        areas = new Object();
        for (var i = 0; i < itemNodes.length; i++)
        {
            avgLat += parseFloat(itemNodes[i].getElementsByTagName('lat')[0].firstChild.nodeValue);
            avgLng += parseFloat(itemNodes[i].getElementsByTagName('lng')[0].firstChild.nodeValue);
            var location = itemNodes[i].getElementsByTagName('location')[0].firstChild.nodeValue;
            if (areas[location] == null)
            {
                areas[location] = new Array();
            }
            areas[location].push(i);
        }
        avgLat = avgLat / itemNodes.length;
        avgLng = avgLng / itemNodes.length;
            
        // Center the map
        gMap.setCenter(new GLatLng(avgLat, avgLng), 5);
        
        // Enable Scroll Zooming
        gMap.enableScrollWheelZoom();
        gMap.enableContinuousZoom();
        GEvent.addDomListener(gMap.getContainer(), "DOMMouseScroll", wheelevent);
        gMap.getContainer().onmousewheel = wheelevent; 
        
        // Create the markers
        gMgr = new GMarkerManager(gMap);
        gSmallIcon = new GIcon();
        gSmallIcon.image = "/g/i_mapmarker.png";
        gSmallIcon.shadow = "/g/i_mapmarkershadow.png";
        gSmallIcon.iconSize = new GSize(26, 45);
        gSmallIcon.shadowSize = new GSize(49, 45);
        gSmallIcon.iconAnchor = new GPoint(13, 45);
        gSmallIcon.infoWindowAnchor = new GPoint(5, 1);
        gWideIcon = new GIcon();
        gWideIcon.image = "/g/i_widemapmarker.png";
        gWideIcon.iconSize = new GSize(40, 40);
        gWideIcon.iconAnchor = new GPoint(20, 20);
        gWideIcon.infoWindowAnchor = new GPoint(30, 10);
        for (var i = 0; i < itemNodes.length; i++)
        {
            addMarker(i);
        }
        
        for (var location in areas)
        {
            addWideMarker(location);
        }
        
        gMgr.refresh();
    }
}

function wheelevent(e)
{
    if (!e)
    {
        e = window.event;
    }
    e.returnValue = false;
}

function addMarker(i)
{
    var gPoint = new GLatLng(itemNodes[i].getElementsByTagName('lat')[0].firstChild.nodeValue, itemNodes[i].getElementsByTagName('lng')[0].firstChild.nodeValue);
    var gMarker = new GMarker(gPoint, gSmallIcon);
    gMgr.addMarker(gMarker, 7, 11);
    GEvent.addListener(gMarker, 'click',
        function()
        {
            var itemHtml = '<p><strong>' + itemNodes.item(i).getElementsByTagName('title').item(0).text + '</strong></p>';
            itemHtml += '<p><a href="' + itemNodes.item(i).getElementsByTagName('link').item(0).text + '">Go to item</a></p>';
            this.openInfoWindowHtml(itemHtml); 
        }
    );
}

function addWideMarker(location)
{
    var markerHtml = '<p><strong>Items in ' + location + '</strong></p><ul>';
    var areaLat = 0;
    var areaLng = 0;
    var count = 0;
    for (var i in areas[location])
    {
        var j = areas[location][i];
        markerHtml += '<li><a href="' + itemNodes[j].getElementsByTagName('link')[0].firstChild.nodeValue + '">' + itemNodes[j].getElementsByTagName('title')[0].firstChild.nodeValue + '</a></li>';
        areaLat += parseFloat(itemNodes[j].getElementsByTagName('lat')[0].firstChild.nodeValue);
        areaLng += parseFloat(itemNodes[j].getElementsByTagName('lng')[0].firstChild.nodeValue);
        count++;
    }
    markerHtml += '</ul>';
    areaLat = areaLat / count;
    areaLng = areaLng / count;
    var gPoint = new GLatLng(areaLat, areaLng);
    var gMarker = new GMarker(gPoint, gWideIcon);
    gMgr.addMarker(gMarker, 0, 6);
    GEvent.addListener(gMarker, 'click',
        function()
        {
            this.openInfoWindowHtml(markerHtml); 
        }
    );
}