//<![CDATA[
var map;

topleftlat=30.0000;
topleftlng=-140.0000;

var pointarray = new Array();

var n = "N";
var s = "S";
var e = "E";
var w = "W";

var ns = "NS";
var ew = "EW";

function format(expr, decplaces)
{
  var str = "" + Math.round(eval(expr) * Math.pow(10, decplaces));
  while (str.length <= decplaces)
  {
    str = "0" + str;
  }
  var decpoint = str.length - decplaces;
  return str.substring(0, decpoint) + "." + str.substring(decpoint, str.length);
}

function decimalToSexagesimal(v, ns_ew)
{
  var s = "";
  var absVal = Math.abs(v);
  var intValue = Math.floor(absVal);
  var dec = absVal - intValue;
  i = intValue;
  dec *= 60;
  s = String(i) + "&deg;" + format(dec, 2) + "'";
  if (v < 0)
  {
    switch(ns_ew)
    {
      case ns:
        s = s + "S";
        break;
      case ew:
        s = s + "W";
        break;
    }
  }
  else
  {
    switch(ns_ew)
    {
      case ns:
        s = s + "N";
        break;
      case ew:
        s = s + "E";
        break;
    }
  }
  return s;
}

function isCloseTo(latlng)
{
  var ptId = -1;
  for (var j=0; j<pointarray.length; j++)
  {
    var pt = new GLatLng(pointarray[j].latitude, pointarray[j].longitude);
    var dist = pt.distanceFrom(latlng);
    if (dist < (1 * 1852)) // 1852 = 1 mile
    {
      ptId = j;
      break;
    }
  }  
  return ptId;
}

function loadChart()
{

//  map = new GMap2(document.getElementById("map"));

//  map.addControl(new GLargeMapControl());
//  map.addControl(new GMapTypeControl());
//  map.addControl(new GOverviewMapControl());
//  map.setCenter(new GLatLng(topleftlat, topleftlng), 5);
//  map.setMapType(G_SATELLITE_MAP);
  
//  GEvent.addListener(map, "moveend", function() 
//                                     {
// 																		   var center = map.getCenter(); 																		   
//	 																	   document.getElementById("center-lat").innerHTML = decimalToSexagesimal(center.lat(), ns);
//	 																	   document.getElementById("center-lng").innerHTML = decimalToSexagesimal(center.lng(), ew);
//                                    });

	GEvent.addListener(map, "mousemove", function(latlng) 
			                                 {
    																	   document.getElementById("mouse-lat").innerHTML = decimalToSexagesimal(latlng.lat(), ns);
		    															   document.getElementById("mouse-lng").innerHTML = decimalToSexagesimal(latlng.lng(), ew);
																         ptId = isCloseTo(latlng);
																				
																				if (ptId > -1) {
																				// alert("Proximity Detected:" + ptId);
																				var datevalue = pointarray[ptId].datetime;
																				var datestr = datevalue.substring(0, datevalue.indexOf("T"));
																				var timestr = datevalue.substring(datevalue.indexOf("T") + 1, datevalue.indexOf("."));
																				//document.getElementById("mouse-date").innerHTML = datestr;
																				//document.getElementById("mouse-time").innerHTML = timestr;
																				document.getElementById("mouse-date").innerHTML = pointarray[ptId].datetime;
																				//document.getElementById("mouse-tws").innerHTML = pointarray[ptId].tws + " knots";
																				//document.getElementById("mouse-twd").innerHTML = pointarray[ptId].twd + "&deg;";
																				//document.getElementById("mouse-cog").innerHTML = pointarray[ptId].cog + "&deg;";
																				document.getElementById("mouse-sog").innerHTML = pointarray[ptId].sog + " knots";
																				//document.getElementById("mouse-fs").innerHTML  = pointarray[ptId].fromstart + " nm";
																				document.getElementById("mouse-tf").innerHTML  = pointarray[ptId].tofinish + " nm";
																				document.getElementById("mouse-schip").innerHTML = pointarray[ptId].schip;
																				} else {
																				document.getElementById("mouse-date").innerHTML = '';
																				//document.getElementById("mouse-time").innerHTML = '?';
																				//document.getElementById("mouse-tws").innerHTML = '?';
																				//document.getElementById("mouse-twd").innerHTML = '?';
																				//document.getElementById("mouse-cog").innerHTML = '';
																				document.getElementById("mouse-sog").innerHTML = '';
																				//document.getElementById("mouse-fs").innerHTML  = '?';
																				document.getElementById("mouse-tf").innerHTML  = '';
																				document.getElementById("mouse-schip").innerHTML = '';
																				}
																				
		                                   });                                     
}

function load(ship) 
{
  if (GBrowserIsCompatible()) 
  {
    loadChart();
    //loadData('1');
  }
}

function datapoint(latitude, longitude, datetime, tws, cog, sog, twd, fromstart, tofinish, schip)
{
  this.latitude = latitude;
  this.longitude = longitude;
  this.datetime = datetime;
  this.tws = tws;
  this.cog = cog;
  this.sog = sog;
  this.twd = twd;
  this.fromstart = fromstart;
  this.tofinish = tofinish;
  this.schip = schip;
}

function loadData(ship)
{
	GDownloadUrl("track-2008-ani.php?ship_id="+ship, function (data, responseCode) 
	                                  {
																		  var xml = GXml.parse(data);
																		  var markers = xml.documentElement.getElementsByTagName("plot");
																		  pointarray = new Array(markers.length);
																		  
																		  for (var i=0; i<markers.length; i++) 
																		  {
																		    pointarray[i] = new datapoint(markers[i].getAttribute("latitude"),
																		                                  markers[i].getAttribute("longitude"),
																		                                  markers[i].getAttribute("datetime"),
																		                                  markers[i].getAttribute("tws"),
																		                                  markers[i].getAttribute("cog"),
																		                                  markers[i].getAttribute("sog"),
																		                                  markers[i].getAttribute("twd"),
																		                                  markers[i].getAttribute("fromstart"),
																		                                  markers[i].getAttribute("tofinish"),
																		                                  markers[i].getAttribute("schip"));
																		  }
																		});
}

function plotMarkers()
{
  for (var i=0; i<pointarray.length; i++)
  {
	  var point = new GLatLng(parseFloat(pointarray[i].latitude),
	                          parseFloat(pointarray[i].longitude));
//  map.addOverlay(new GMarker(point));
    map.addOverlay(createMarker(point, i));
  }
}

function openWindow(url, name, w, h)
{
  var nw = window.open(url, name, 'height=' + h + ',width=' + w + ',status=no,resizable=yes,scrollbars=yes');
  nw.focus();
}

function createTrackTab(i) 
{
  datevalue = pointarray[i].datetime;
  datestr = datevalue.substring(0, datevalue.indexOf("T"));
  timestr = datevalue.substring(datevalue.indexOf("T") + 1, datevalue.indexOf("."));
  var infoTabs = [
                   new GInfoWindowTab("1.", "<font face='Tahoma'><small>" +
                                             "Date:" + datestr + "<br>" +
                                             "Time:" + timestr + "<br>" +
                                             "Speed Over Ground :" + pointarray[i].sog + " knots<br>" +
                                             "Course Over Ground:" + pointarray[i].cog +
                                             "</small></font>"),
                   new GInfoWindowTab("2.", "<font face='Tahoma'><small>" +
                                             "True Wind Speed    :" + pointarray[i].tws + " knots<br>" +
                                             "True Wind Direction:" + pointarray[i].twd + "<br>" +
                                             "From Start:" + pointarray[i].fromstart + " nm<br>" +
                                             "To Finish :" + pointarray[i].tofinish + " nm" +
                                             "</small></font>")
                 ];
  switch (i)
  {
    case 0:
      var photoTab = new GInfoWindowTab("3.", 
                                        "<table><tr><td valign='top'><a href='javascript:openWindow(\"start.jpg\", \"Photo\", 338, 253)'><img border='0' src='start.jpg' width='113' height='84'></a></td><td valign='top'>Just before the start...&nbsp;&nbsp;</td></tr></table>");
      infoTabs.push(photoTab);   
      break;
    case 3:
      var photoTab = new GInfoWindowTab("3.", 
                                        "<table><tr><td valign='top'><a href='javascript:openWindow(\"sunset.jpg\", \"Photo\", 338, 253)'><img border='0' src='sunset.jpg' width='113' height='84' align='left'></a></td><td valign='top'>Nice colors for a trade<br>wind sunset.</td></tr></table>");
      infoTabs.push(photoTab);   
      break;
    case 6:
      var photoTab = new GInfoWindowTab("3.", 
                                        "<table><tr><td valign='top'><a href='javascript:openWindow(\"kite.jpg\", \"Photo\", 400, 300)'><img border='0' src='kite.jpg' width='133' height='100'></a></td><td valign='top'>Our preferred kite!&nbsp;&nbsp;&nbsp;&nbsp;</td></tr></table>");
      infoTabs.push(photoTab);   
      break;
    case 8:
      var photoTab = new GInfoWindowTab("3.", 
                                        "<table><tr><td valign='top'><a href='javascript:openWindow(\"regis.jpg\", \"Photo\", 320, 240)'><img border='0' src='regis.jpg' width='107' height='80'></a></td><td valign='top'>Regis driving, with a coffee.</td></tr></table>");
      infoTabs.push(photoTab);   
      break;
    case 11:
      var photoTab = new GInfoWindowTab("3.", 
                                        "<table><tr><td valign='top'><a href='javascript:openWindow(\"kite2.jpg\", \"Photo\", 253, 338)'><img border='0' src='kite2.jpg' width='84' height='113'></a></td><td valign='top'>More kite in the trade wind.</td></tr></table>");
      infoTabs.push(photoTab);   
      break;
    case 14:                                          
      var photoTab = new GInfoWindowTab("3.", 
                                        "<table><tr><td valign='top'><a href='javascript:openWindow(\"finish.jpg\", \"Photo\", 320, 240)'><img border='0' src='finish.jpg' width='107' height='80'></a></td><td valign='top'>Just after crossing the finish line.<br>Notice the color of the water...</td></tr></table>");
      infoTabs.push(photoTab);   
      break;
    default:
      break;
  }
                   
  return infoTabs;
}

function createMarker(point, i) 
{
  var marker = new GMarker(point);
  GEvent.addListener(marker, "click", function() 
																      {
																        marker.openInfoWindowTabsHtml(createTrackTab(i));
																      });
  return marker;
}

function drawTrack(color)
{  

  var points = [];
  for (var i=0; i<pointarray.length; i++)
  {
    points.push(new GLatLng(pointarray[i].latitude, pointarray[i].longitude));
  }
  //map.addOverlay(new GPolyline(points, "#ffff00", 1, 0.9));
  map.addOverlay(new GPolyline(points, color, 1, 0.9));
}

function clearChart()
{
  map.clearOverlays();
}

var idx = 0;
var intervalID;

function startWalking(color)
{
var color = color;
  idx = 0;
  clearChart();
  //map.setCenter(new GLatLng(pointarray[0].latitude, pointarray[0].longitude));
  intervalID = setInterval("plotSegment('"+color+"')", 500);
}

function plotSegment(color)
{
  var points = [];
  //alert(color);
  points.push(new GLatLng(pointarray[idx].latitude, pointarray[idx].longitude));
  points.push(new GLatLng(pointarray[idx+1].latitude, pointarray[idx+1].longitude));

  map.addOverlay(new GPolyline(points, "#"+color, 1, 0.9));

//arrowHead(points);
  
//  map.panTo(new GLatLng(pointarray[idx+1].latitude, pointarray[idx+1].longitude));  
  
//map.openInfoWindow(map.getCenter(),
//                   document.createTextNode("Plot here"));
  //map.openInfoWindowHtml(map.getCenter(),
  //                       "<table>" +
  //                       "<tr><td>Lat  : </td><td align='right'><b>" + decimalToSexagesimal(pointarray[idx].latitude, ns) + "</b></td></tr>" +
  //                       "<tr><td>Long : </td><td align='right'><b>" + decimalToSexagesimal(pointarray[idx].longitude, ew) + "</b></td></tr>" +
  //                       "</table>");

  idx++;
  if (idx == (pointarray.length - 1)) // finished
    clearInterval(intervalID);
}

function cancelAnimation()
{
  clearInterval(intervalID);
}
//]]>
