var trail = new Array();
var numPos = 0;
var hotIndex = 0;;
var armed = false;
var ready = false;
var newPos = false;
var fposCtr = 0;
var aircraftOverlay = new GOverlay;

function AirPos(lat, lng, spraylat, spraylng, date, time, speed, track, altitude, sprayOn)
{
    this.latitude   = lat;			// 0
    this.longitude  = lng;			// 1
	this.spraylat	= spraylat;		// 2
	this.spraylng	= spraylng;		// 3
    this.date       = date;			// 4
    this.time       = time;			// 5
    this.speed      = speed;		// 6
    this.track      = track;		// 7
    this.altitude   = altitude;		// 8
    this.sprayOn    = sprayOn;		// 9
};

var sizeFactor = new Array
    (
        2,             //  0
        2,             //  1
        1,             //  2
        0.8,           //  3
        0.4,           //  4
        0.2,           //  5
        0.1024,        //  6
        0.0512,        //  7
        0.0256,        //  8
        0.0128,        //  9
        0.0064,        // 10
        0.0032,        // 11
        0.0016,        // 12
        0.0008,        // 13
        0.0004,        // 14
        0.0002,        // 15
        0.0001,        // 16
        0.00005,       // 17
        0.000025,      // 18
        0.0000125,     // 19
        0.00000625     // 20
    );

function GetFile(missionIndex, folder)
{
    var request = GXmlHttp.create();
    request.open("GET", "airRetrieveFile.php?index=" + missionIndex + "&folder=" + folder, true);
    request.onreadystatechange = function() 
    {
        if (request.readyState == 4)
        {
            var response = request.responseText;
			//alert(response);
            
            var fields = response.split(",");
            numPos = Math.floor(fields.length / 10);
            for (var p = 0; p < numPos; p++)
            {
                var tp = p * 10;
                var pos = new AirPos( parseFloat(fields[tp]),					// lat
                                        parseFloat(fields[tp + 1]),				// lng
										parseFloat(fields[tp + 2]),				// spraylat
										parseFloat(fields[tp + 3]),				// spraylng
                                        fields[tp + 4],							// date
                                        fields[tp + 5],							// time
                                        parseFloat(fields[tp + 6]),				// speed
                                        parseFloat(fields[tp + 7]),				// track
                                        parseFloat(fields[tp + 8]),				// altitude
                                        Boolean(parseInt(fields[tp + 9]) == 1)	// sprayOn
                                      );
                trail[p] = pos;
            }
            
            ready = true;
			ShowDetails();
        } // if 
    } // function
    request.send(null);
}

function HandleClick(latlng)
{
 //   alert("hi click");
}

function DrawAircraft()
{
    var latlngs = new Array();
    var lat;
    var lng;
    var track;
    var polygon;
    var airPos = trail[hotIndex];
    var latlng = new GLatLng(airPos.latitude, airPos.longitude);
    var PI = 3.14159265358979;
    var DEG_TO_RAD = PI / 180.0;
    var z = map.getZoom();

    if (fposCtr++ < 5)
    {
            latlngs.push(latlng);
            latlngs.push(latlng);
            latlngs.push(latlng);

            polygon = new GPolygon(latlngs, "#ff0000", 1, 1, "#ff0000", 0.0);
    }
    else
    {
        track = (track < 0.0) ? track + 360.0 : track;
        
        //alert("z = " + z + "sizeFactor[z] = " + sizeFactor[z]);

        lat = airPos.latitude  - Math.cos(airPos.track * DEG_TO_RAD) * sizeFactor[z];
        lng = airPos.longitude - Math.sin(airPos.track * DEG_TO_RAD) * sizeFactor[z];
        var firstPos = new GLatLng(lat, lng);
        latlngs.push(firstPos);
        
        track = airPos.track - 135.0;
        lat = airPos.latitude  + Math.cos(track * DEG_TO_RAD) * sizeFactor[z] * 2.0;
        lng = airPos.longitude + Math.sin(track * DEG_TO_RAD) * sizeFactor[z] * 2.0;
        latlngs.push(new GLatLng(lat, lng));
        
        lat = airPos.latitude  + Math.cos(airPos.track * DEG_TO_RAD) * sizeFactor[z] * 3.0;
        lng = airPos.longitude + Math.sin(airPos.track * DEG_TO_RAD) * sizeFactor[z] * 3.0;
        latlngs.push(new GLatLng(lat, lng));

        track = airPos.track + 135.0;
        track = (track > 360.0) ? track - 360.0 : track;
        lat = airPos.latitude  + Math.cos(track * DEG_TO_RAD) * sizeFactor[z] * 2.0;
        lng = airPos.longitude + Math.sin(track * DEG_TO_RAD) * sizeFactor[z] * 2.0;
        latlngs.push(new GLatLng(lat, lng));

        latlngs.push(firstPos);
    
        if (airPos.sprayOn)
        {
            polygon = new GPolygon(latlngs, "#000000", 1, 1, "#ff0000", 1.0);
        }
        else
        {
            polygon = new GPolygon(latlngs, "#000000", 1, 1, "#00ff00", 1.0);
        }
    }
   
    aircraftOverlay =  polygon;
    map.addOverlay(aircraftOverlay);
}

function ShowDetails()
{
    var dataPane = document.getElementById("data");

    var actualPos = new GLatLng(trail[hotIndex].latitude, trail[hotIndex].longitude);

	var lat     = Math.abs(trail[hotIndex].latitude);
    var latStr  = lat.toFixed(5) + ((trail[hotIndex].latitude) > 0 ? ' N' : ' S');

    var lng     = Math.abs(trail[hotIndex].longitude);
    var lngStr  = lng.toFixed(5) + ((trail[hotIndex].longitude) > 0 ? ' E' : ' W');

    if (s_airMission)
    {
		dataPane.innerHTML = 
		'<div id="dataTableDiv">' + 
		'<b>Mission Data</b>'   +
		'<table id="dataTable" width="220">'    +
		'<tr><td align="left"> <b>&nbsp      </b>     </td><td align="right"><b>' + '&nbsp'                                   + '</b></td></tr>' +
		'<tr><td align="left"> <b>Flight Date</b>     </td><td align="right"><b>' + trail[hotIndex].date + '&nbsp'            + '</b></td></tr>' +
		'<tr><td align="left"> <b>Flight Time</b>     </td><td align="right"><b>' + trail[hotIndex].time                      + '</b></td></tr>' +
		'<tr><td align="left"> <b>&nbsp      </b>     </td><td align="right"><b>' + '&nbsp'                                   + '</b></td></tr>' +
		'<tr><td align="left"> <b>Latitude   </b>     </td><td align="right"><b>' + latStr                                    + '</b></td></tr>' +
		'<tr><td align="left"> <b>Longitude  </b>     </td><td align="right"><b>' + lngStr                                    + '</b></td></tr>' +
		'<tr><td align="left"> <b>&nbsp      </b>     </td><td align="right"><b>' + '&nbsp'                                   + '</b></td></tr>' +
		'<tr><td align="left"> <b>Height [ft]</b>     </td><td align="right"><b>' + trail[hotIndex].altitude.toFixed(0)       + '</b></td></tr>' +
		'<tr><td align="left"> <b>Track      </b>     </td><td align="right"><b>' + trail[hotIndex].track.toFixed(1)          + '</b></td></tr>' +
		'<tr><td align="left"> <b>Speed [mph]</b>     </td><td align="right"><b>' + trail[hotIndex].speed.toFixed(1)          + '</b></td></tr>' +
		'<tr><td align="left"> <b>&nbsp      </b>     </td><td align="right"><b>' + '&nbsp'                                   + '</b></td></tr>' +  
		'<tr><td align="left"> <b>Spray      </b>     </td><td align="right"><b>' + (trail[hotIndex].sprayOn ? "On" : "Off")  + '</b></td></tr>' +
		'</table></div>';    
	}
	else
	{
		dataPane.innerHTML = 
		'<div id="dataTableDiv">' + 
		'<b>Mission Data</b>'   +
		'<table id="dataTable" width="220">'    +
		'<tr><td align="left"> <b>&nbsp      </b>     </td><td align="right"><b>' + '&nbsp'                                   + '</b></td></tr>' +
		'<tr><td align="left"> <b>Mission Date</b>     </td><td align="right"><b>' + trail[hotIndex].date + '&nbsp'            + '</b></td></tr>' +
		'<tr><td align="left"> <b>Mission Time</b>     </td><td align="right"><b>' + trail[hotIndex].time                      + '</b></td></tr>' +
		'<tr><td align="left"> <b>&nbsp      </b>     </td><td align="right"><b>' + '&nbsp'                                   + '</b></td></tr>' +
		'<tr><td align="left"> <b>Latitude   </b>     </td><td align="right"><b>' + latStr                                    + '</b></td></tr>' +
		'<tr><td align="left"> <b>Longitude  </b>     </td><td align="right"><b>' + lngStr                                    + '</b></td></tr>' +
		'<tr><td align="left"> <b>&nbsp      </b>     </td><td align="right"><b>' + '&nbsp'                                   + '</b></td></tr>' +
		'<tr><td align="left"> <b>Flow       </b>     </td><td align="right"><b>' + trail[hotIndex].altitude.toFixed(0)       + '</b></td></tr>' +
		'<tr><td align="left"> <b>Track      </b>     </td><td align="right"><b>' + trail[hotIndex].track.toFixed(1)          + '</b></td></tr>' +
		'<tr><td align="left"> <b>Speed [mph]</b>     </td><td align="right"><b>' + trail[hotIndex].speed.toFixed(1)          + '</b></td></tr>' +
		'<tr><td align="left"> <b>&nbsp      </b>     </td><td align="right"><b>' + '&nbsp'                                   + '</b></td></tr>' +  
		'<tr><td align="left"> <b>Spray      </b>     </td><td align="right"><b>' + (trail[hotIndex].sprayOn ? "On" : "Off")  + '</b></td></tr>' +
		'</table></div>';    
	}
    DrawAircraft();
}

function HandleMove(latlng)
{
    if (ready) 
    {
        if (armed)
        {    
            var closestDist = 100000.0;
            var distFrom;
            
            newPos = false;
            for (var p = 0; p < numPos; p++)
            {
                if (Math.abs(latlng.lat() - trail[p].latitude) < 0.0003)
                {
                    if (Math.abs(latlng.lng() - trail[p].longitude) < 0.0003)
                    {
                        var newLatLng = new GLatLng(trail[p].latitude, trail[p].longitude);
                        distFrom = newLatLng.distanceFrom(latlng);
                        if (distFrom < closestDist)
                        {
                            hotIndex = p;
                            closestDist = distFrom;
                        }
                        newPos = true;
                        map.removeOverlay(aircraftOverlay);
                    }
                }
            }
            
            if (newPos)
            {
                ShowDetails();
                document.getElementById("map").focus();   
            }
        }
        armed = true;
    }
}


