﻿var VDS$Map;
var VDS$Details = new Object();
var VDS$VCDetails = new Object();
var VDS$VCList = [];
var VDS$VDSMarker;
var VDS$VCMarker;
var VDS$VDSMarkerOptions = new Object();
var VDS$VCMarkerOptions = new Object();
var VDS$BranchID = -1;

google.load("maps", "2");
google.setOnLoadCallback(Init);

//Invoked when document is ready
function Init()
{
    GEvent.addDomListener(document, "unload", GUnload);

    if (document.getElementById("map") == null)
       return;

    VDS$Map = new GMap2(document.getElementById("map"));
    VDS$Map.addControl(new GLargeMapControl());
    VDS$VDSMarkerOptions = CreateVDSMarkerOptions();
    VDS$VCMarkerOptions = CreateVCMarkerOptions();

    //var url = "http://www.vds.org.uk/VolunteerCentreList.xml";

    	/*
    	try
    	{    
    		_IG_FetchXmlContent(url, MappletDataLoaded);
    	}
    	catch
    	{    
		GDownloadUrl(url, DataLoaded);
    	}
	*/
	DataLoaded(GetVolunteerCentres());
}

function AddVDSToMap()
{
    VDS$VDSMarker = new GMarker(VDS$Details.Location,
            { zIndexProcess: BringVDSToFront, icon: VDS$VDSMarkerOptions });
    GEvent.addListener(VDS$VDSMarker, "click", function()
    {
        VDS$VDSMarker.openInfoWindowHtml(BuildVCMarkup(VDS$Details));
    });

    VDS$Map.addOverlay(VDS$VDSMarker);


}

function AddVolunteerCentresToMap()
{
    if (VDS$VCList == null)
        return;

    if (VDS$VCList.length < 1)
        return;

    for (var i = 0; i < VDS$VCList.length; i++)
    {
        AddVolunteerCentreToMap(VDS$VCList[i]);

	if (VDS$BranchID == VDS$VCList[i].BranchDatabaseIdentifier)
		VDS$VCDetails = VDS$VCList[i];
    }
}

function AddVolunteerCentreToMap(vc)
{
    var marker = new GMarker(vc.Location, VDS$VCMarkerOptions);
    GEvent.addListener(marker, "click", function()
    {
        marker.openInfoWindowHtml(BuildVCMarkup(vc));
    });

    VDS$Map.addOverlay(marker);

    if (vc.BranchDatabaseIdentifier == VDS$BranchID)	
	VDS$VCMarker = marker;	
}

function BringVDSToFront()
{
}

function BuildVC(xmlNode)
{
    var vc = new Object();

    vc.Name = GetXmlNodeValue(xmlNode.getElementsByTagName("Name")[0]);
    vc.BranchDatabaseIdentifier = parseInt(GetXmlNodeValue(xmlNode.getElementsByTagName("BranchDatabaseIdentifier")[0]));

    vc.Email = GetXmlNodeValue(xmlNode.getElementsByTagName("Email")[0]);
    vc.Phone = GetXmlNodeValue(xmlNode.getElementsByTagName("Phone")[0]);
    vc.Website = GetXmlNodeValue(xmlNode.getElementsByTagName("Website")[0]);

    var latitude = GetXmlNodeValue(xmlNode.getElementsByTagName("Latitude")[0]);
    var longitude = GetXmlNodeValue(xmlNode.getElementsByTagName("Longitude")[0]);
    vc.Location = new GLatLng(latitude, longitude);

    var address = xmlNode.getElementsByTagName("Address")[0];

    vc.Address1 = GetXmlNodeValue(address.getElementsByTagName("Address1")[0]);
    vc.TownCity = GetXmlNodeValue(address.getElementsByTagName("TownCity")[0]);
    vc.Postcode = GetXmlNodeValue(address.getElementsByTagName("Postcode")[0]);

    return vc;
}

function BuildVCMarkup(vc)
{
    var markup = "";

    if (vc != null)
    {
        var phone = "";
        if (vc.Phone != phone)
            phone = "Tel: " + vc.Phone + "<br />";

        var email = "";
        if (email != vc.Email)
        {
            var mailTo = "mailto:" + vc.Email.replace("mailto:", "");
            email = "<a href='" + mailTo + "'>Email Us</a><br />";
        }

        var url = "";
        if (url != vc.Website)
        {
            var website = vc.Website;

            if (!StartsWith(website, "http"))
                website = "http://" + vc.Website;

            url = "<a href='" + website + "' target='_blank'>View Website</a>";
        }

        markup = "<p class='mapAddress'><strong>"
                    + vc.Name
                    + "</strong><br /><br />"
                    + vc.Address1
                    + "<br />"
                    + vc.TownCity
                    + "<br />"
                    + vc.Postcode
                    + "<br />"
                    + phone
                    + "<br />"
                    + email
                    + url
                    + "</p>";
    }
    return markup;
}

function CreateVCMarkerOptions()
{
    var icon = new GIcon(G_DEFAULT_ICON);
	icon.image = "http://maps.google.com/mapfiles/ms/icons/blue.png";
   	icon.iconSize = new GSize(32, 32);
    //icon.image = "http://www.vds.org.uk/images/VCIcon.png";
    //icon.iconSize = new GSize(32, 32);
    return { icon: icon };
}

function CreateVDSMarkerOptions()
{
    var icon = new GIcon(G_DEFAULT_ICON);
    icon.image = "http://www.vds.org.uk/images/VDSIcon.png";
    icon.iconSize = new GSize(44, 44);
    return icon;
}

function CentreOnCentralScotland()
{
    VDS$Map.setCenter(new GLatLng(57.7, -3.828678), 6);
}

function CentreOnVDS()
{
    VDS$Map.setCenter(VDS$Details.Location, 6);
}

function CentreOnVC()
{
    VDS$Map.setCenter(VDS$VCDetails.Location, 6);
}

function DataLoaded(data)
{
    var xml = GXml.parse(data);
    ParseXml(xml);
    CentreOnCentralScotland();
    AddVDSToMap();
    AddVolunteerCentresToMap();
    CentreOnVC();

    if (VDS$BranchID == -1)
    	DisplayVDS();
    else
    {
        CentreOnVC();
	DisplayVC();
    }
}

function DisplayVC()
{
    if (VDS$VCMarker != null)
    	VDS$VCMarker.openInfoWindowHtml(BuildVCMarkup(VDS$VCDetails));
}

function DisplayVDS()
{
    VDS$VDSMarker.openInfoWindowHtml(BuildVCMarkup(VDS$Details));
}


function GetXmlNodeValue(xmlNode)
{
	if (xmlNode.textContent == null)
		return ToString(xmlNode.text);
	else
		return ToString(xmlNode.textContent);
}

function MappletDataLoaded(response)
{
    ParseXml(response);
    CentreOnCentralScotland();
    AddVDSToMap();
    AddVolunteerCentresToMap();
}

function ParseXml(xml)
{
    var vcList = xml.getElementsByTagName("VolunteerCentreIP");

    for (var i = 0; i < vcList.length; i++)
    {
        var vc = vcList.item(i);
        var isVDS = GetXmlNodeValue(vc.getElementsByTagName("DatabaseIdentifier")[0]);

        if (isVDS == "999")
            VDS$Details = BuildVC(vc);
        else
            VDS$VCList.push(BuildVC(vc));
    }
}

function SetVC(branchID)
{
	VDS$BranchID = parseInt(branchID);
}

function ToString(value)
{
    if (value == null)
        return "";
    else
        return value;
}

function StartsWith(toSearch, criteria)
{
    if (toSearch == criteria)
        return true;

    if (criteria == null | criteria.length == 0)
        return false;

    var i = 0;
    while (i < criteria.length & toSearch.charAt(i) == criteria.charAt(i))
        i++;

    return i == criteria.length;
}