   
var vMap = null;

var vfMapLoaded = false;
var vfFeedDataLoaded = false;

// Toggles debugging alerts
var vfDebug = false;

function Main()
{
    ShowFeedLoadingUI();

    vMap = new VEMap("theMap");
    vMap.onLoadMap = OnMapLoaded;

    // Start downloading the feed data
    RetrieveMapDataAsync();
    
    vMap.LoadMap(null, 4, VEMapStyle.Hybrid, false, VEMapMode.Mode2D);
}

function OnMapLoaded()
{
    vfMapLoaded = true;
    OnTaskComplete();
}

function Dispose()
{
    if (vMap != null)
    {
        vMap.Dispose();
    }
}

function OnResize()
{
    if (vMap != null)
    {
        if( typeof( window.innerWidth ) == 'number' )
        {
            //Non-IE
            vMap.Resize(window.innerWidth,window.innerHeight);
        } 
        else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) )
        {
            //IE 6+ in 'standards compliant mode'
            vMap.Resize(document.documentElement.clientWidth,document.documentElement.clientHeight);
        }
        else
        {
            vMap.Resize();
        }
    }
}

function MapAlert(alertText)
{

}

function ShowFeedLoadingUI()
{
	MapAlert("Loading feed and map information, please wait...");
}

function OnFeedDataComplete(fGoodData)
{
	if (fGoodData)
	{
	    vfFeedDataLoaded = true;
	    
//		DebugAlert(vrgFeedData.length);
//		DebugAlert(vrgFeedData[0].strICAO);
//		DebugAlert(vrgFeedData[0].strIATA);
//		DebugAlert(vrgFeedData[0].longitude);
//		DebugAlert(vrgFeedData[0].latitude);
//		DebugAlert(vrgFeedData[0].kAirspaceClass);
//		DebugAlert(vrgFeedData[0].rgStreams.length);
//		DebugAlert(vrgFeedData[0].rgStreams[0].strDesc);
//		DebugAlert(vrgFeedData[0].rgStreams[0].strStreamUrl);
		
		OnTaskComplete();
	}
	else
	{
//		HideFeedLoadingUI();
//		ShowNoFeedDataUI();
	}
}


function OnTaskComplete()
{
    if (vfMapLoaded && vfFeedDataLoaded)
    {
		AddAirportPins();
//		HideFeedLoadingUI();
    }
}

function ZoomToAirport(iFeed)
{
    vMap.SetCenterAndZoom(new VELatLong(vrgFeedData[iFeed].latitude, vrgFeedData[iFeed].longitude), 14); 
}

function GetInfoBoxHtml(iFeed, feedData)
{
    var contents = "<strong>http://www.airportwebcam.net</strong><br>Listen Live:<br>";
    
    for (var i=0; i<feedData.rgStreams.length; ++i)
    {
        contents += "<a href=\"" + feedData.rgStreams[i].strStreamUrl + "\">" + feedData.rgStreams[i].strDesc + "</a><br>";
    }
    
    contents += "<br><a href=\"javascript:ZoomToAirport(" + iFeed + ")\">Zoom</a>";
    
    if (feedData.kAirspaceClass != INTERNATIONAL)
    {
        contents += "<br><a href=\"http://www.airnav.com/airport/" + feedData.strICAO + "\" target=\"_blank\">Airport Data</a>";
    }
    
    return contents;
}

function AddAirportPins()
{
    var shapes = new Array(vrgFeedData.length);

	for (var i=0; i<vrgFeedData.length; ++i)
	{
	    var shape = new VEShape(VEShapeType.Pushpin, new VELatLong(vrgFeedData[i].latitude, vrgFeedData[i].longitude));
        shape.SetCustomIcon("windsock.gif");
        shape.SetTitle(vrgFeedData[i].strICAO + " (" + vrgFeedData[i].strFeedName + ")");
        shape.SetDescription(GetInfoBoxHtml(i, vrgFeedData[i]));
	    
	    shapes[i] = shape;        
	}

    vMap.AddShape(shapes);
}


// Datatypes
// Used as a datatype to pass as an output parameter to a function

function OutputParam()
{
    this.array = new Array(1);

    this.setValue = function(v) { this.array[0] = v; }
    this.getValue = function()  { return this.array[0]; }
}


function DebugAlert(str)
{
	if (vfDebug)
		alert(str);
}

