function erniePoint(lon, lat, tval) {
  this.lon = lon;
  this.lat = lat;
  this.tval = tval;
}
var epAll = [];

var myMap = null;

function load() {
  document.getElementById('map').style.height = document.documentElement.clientHeight * .9 + 'px';
  // alert(document.getElementById('map').style.height);
  update_display_start_loading();
  setTimeout(load_sync,10);
}
function load_sync() {
  if (GBrowserIsCompatible()) {
    setupMap();
    //GDownloadUrl("erniegps.csv?xx", gotErnieData);
    GDownloadUrl("dumper.cgi", gotErnieData);
  } else {
    alert("GBrowserIsCompatible failed!");
  }
}

function setupMap() {
  myMap = new GMap2(document.getElementById("map"));
  myMap.addControl(new GLargeMapControl());
  myMap.addControl(new GMapTypeControl());
  myMap.addControl(new GScaleControl());
  myMap.addControl(new GOverviewMapControl());
  myMap.enableDoubleClickZoom();
  myMap.enableContinuousZoom();
  resetMap();
  new GKeyboardHandler(myMap)
}

function resetMap() {
  myMap.clearOverlays();

  var point = new GLatLng(40.76314715693813, -73.99312335803258);
  myMap.setCenter(point, 16);

  var icon = new GIcon(G_DEFAULT_ICON);
  icon.image = "http://www.google.com/mapfiles/marker" + "E" + ".png";
  var marker = new GMarker(point, {icon: icon, title: "Ernie Appt"});
  myMap.addOverlay(marker);
  // GEvent.addListener(marker, "mouseover", function() {
  //   GLog.write("mouseover");
  // });
  GEvent.addListener(marker, "click", function() {
    marker.openInfoWindowHtml("<b>" + "Ernie Appt" + "</b>");
  });
}

function gotErnieData(data, responseCode) {
  //GLog.write("responseCode=" + responseCode);
  epall = [];
  var lines = [];
  lines = data.split("\n");
  //GLog.write("lines.length=" + lines.length);
  for (i = 0; i < lines.length; i++) {
    var line = lines[i];
    var fields = line.split(",");
    if (i < 1) {
      //GLog.write("fields.length=" + fields.length);
      continue;
    }
    if (fields.length < 5) continue;
    var lon = parseFloat(fields[0]);
    if (lon == 0) continue
    var lat = parseFloat(fields[1]);
    if (lat == 0) continue
    var entryDate = fields[2];
    var entryLast = fields[3];
    // if (entryDate != entryLast) continue
    var seqId = parseInt(fields[4]);
    var ep = new erniePoint(lon, lat, entryDate);
    epAll.push(ep);
  }

  var sURL = document.location.href;
  var sURLMatch = "#filter=";
  var iAnchorIndex = sURL.indexOf(sURLMatch);
  if(iAnchorIndex != -1)
  {
	var sFilter = sURL.substring(iAnchorIndex + sURLMatch.length);
	sFilter = sFilter.replace("+"," ");
	sFilter = sFilter.replace("%20"," ");
	//alert(sFilter);
	document.getElementById('match').value = sFilter;
	goButton_Click();
  }
  else
  {
  	var objToday = new Date();
	var sYear = objToday.getFullYear();
	var sMonth = objToday.getMonth() + 1;
	if(sMonth < 10)
		sMonth = '0' + sMonth;
	var sDate = objToday.getDate();
	if(sDate < 10)
		sDate = '0' + sDate;
	var sToday = sYear + '-' + sMonth + '-' + sDate;
	document.getElementById('match').value = sToday;
	goButton_Click();
  }
  //GLog.write("epAll.length=" + epAll.length);
}

function goButton_Click() {
  update_display_start_loading();
  setTimeout(goButton_Click_sync,10);
}

// perform action syncronously, after page updates have been made
//
function goButton_Click_sync() {
  update_display_start_loading();
  //GLog.write("goButton_Click");
  var eleMatch = document.getElementById("match");
  var mvalue = eleMatch.value;
  var sURL = document.location.href;
  if(sURL.indexOf("#") == -1)
  {
    document.location.href += "#filter=" + mvalue;
  }
  else
  {
    document.location.href = sURL.replace(new RegExp("#.*"),"#filter=" + mvalue);
  }
  //GLog.write("eleMatch.value='" + mvalue + "'");
  if (mvalue.length < 1) {
    alert("Match string cannot be empty");
    return;
  }

  resetMap();
  
  var dataBounds = new GLatLngBounds()
  var points = [];
  var epFrst;
  var epLast;

  var icon;
  var point;
  var marker;



  for (var i = 0; i < epAll.length; i++) {
    var ep = epAll[i];
    if (ep.tval.substr(0,mvalue.length) == mvalue) {
      var point = new GLatLng(ep.lat, ep.lon);
      dataBounds.extend(point);
      points.push(point);
      if (points.length == 1) epFrst = ep;
      epLast = ep;
  
  		if(!(i % 10))
		{
			icon= new GIcon(G_DEFAULT_ICON);
  			icon.image = "http://www.google.com/mapfiles/dd-start.png";
  			point = new GLatLng(ep.lat, ep.lon);
  			marker = new GMarker(point, {icon: icon, title: ep.tval});
  			myMap.addOverlay(marker);
		}
 

    }
  }
  //GLog.write("points.length=" + points.length);
  if (points.length < 1) {
    alert("no points matched");
    update_display_done_loading();
    return;
  }
  if (points.length < 2) {
    alert("only one point matched");
    update_display_done_loading();
    return;
  }

  document.getElementById('infoArea').innerHTML = 'Points matched: ' + points.length;

  myMap.setCenter(dataBounds.getCenter(), myMap.getBoundsZoomLevel(dataBounds));
  
  icon= new GIcon(G_DEFAULT_ICON);
  icon.image = "http://www.google.com/mapfiles/dd-start.png";
  point = new GLatLng(epFrst.lat, epFrst.lon);
  marker = new GMarker(point, {icon: icon, title: epFrst.tval});
  myMap.addOverlay(marker);
    
  icon = new GIcon(G_DEFAULT_ICON);
  icon.image = "http://www.google.com/mapfiles/dd-end.png";
  point = new GLatLng(epLast.lat, epLast.lon);
  marker = new GMarker(point, {icon: icon, title: epLast.tval});
  myMap.addOverlay(marker);
  
  var red = "#ff0000";
  var purple = "#ff00ff";
  var width = 5;
  var opacity = 0.9;
  myMap.addOverlay(new GPolyline(points, red, width, opacity));   
  update_display_done_loading();
}

function update_display_done_loading()
{
  document.getElementById('loadingArea').style.display='none';
  document.getElementById('match').disabled = false;
  document.getElementById('goButton').disabled = false;
  //alert('updated done');
}

function update_display_start_loading()
{
  document.getElementById('loadingArea').style.display='';
  document.getElementById('match').disabled = true;
  document.getElementById('goButton').disabled = true;
  //alert('updated loading');
}
