Labs Tidy up, depreciate old trip planner tester, promote myway balance/service alerts to main site
[busui.git] / myway / myway_timeliness.php
blob:a/myway/myway_timeliness.php -> blob:b/myway/myway_timeliness.php
  <?php
  include ('../include/common.inc.php');
  include_header("MyWay Deltas", "mywayDelta");
  ?>
   
  <!--[if lte IE 8]><script language="javascript" type="text/javascript" src="../js/flot/excanvas.min.js"></script><![endif]-->
   
  <script language="javascript" type="text/javascript" src="../js/flot/jquery.flot.js"></script>
  <center><div id="placeholder" style="width:900px;height:550px"></div></center>
  <script type="text/javascript">
  $(function () {
  var d = new Date();
  d.setUTCMinutes(0);
  d.setUTCHours(0);
  var midnight = d.getTime();
   
  <?php
  $query = "select * from myway_timingdeltas where abs(timing_delta) < 2*(select stddev(timing_delta) from myway_timingdeltas) order by route_full_name;";
  $query = $conn -> prepare($query);
  $query -> execute();
  if (!$query) {
  databaseError($conn -> errorInfo());
  return Array();
  }
  $i = 0;
  $labels = Array();
  $lastRoute = "";
  foreach ($query -> fetchAll() as $delta) {
  $routeName = $delta['route_full_name'];
  if (strstr($routeName, " 3")) $routeName = "312-319";
  else $routeName = preg_replace('/\D/', '', $routeName);
  if ($routeName != $lastRoute) {
  $i++;
  echo " var d$i = [];";
  $lastRoute = $routeName;
  $labels[$i] = $routeName;
  }
  echo "d$i.push([ midnight+ (1000*" . midnight_seconds(strtotime($delta['time'])) . "), " . intval($delta['timing_delta']) . "]); \n";
  } ;
  ?>
   
  var placeholder = $("#placeholder");
   
  var plot = $.plot(placeholder, [
  <?php
  foreach ($labels as $key => $label) {
  echo " {
  data: d$key,
  points: { show: true },
  label: '$label'
  },";
  }
  ?>
  ],
  {
  xaxis: {
  mode: "time",
  min: midnight + (1000*60*60*8),
  max: midnight + (1000*60*60*23.5)
  },
  yaxis: {
  tickFormatter: yformatter
  },
  grid: { hoverable: true, clickable: true, labelMargin: 32 },
  });
  var o;
  o = plot.pointOffset({ x: midnight+ (9*60*60*1000), y: -1.2});
  placeholder.append('<div style="position:absolute;left:' + (o.left + 4) + 'px;top:' + o.top + 'px;color:#666;font-size:smaller">9am</div>');
  o = plot.pointOffset({ x: midnight+ (16*60*60*1000), y: -1.2});
  placeholder.append('<div style="position:absolute;left:' + (o.left + 4) + 'px;top:' + o.top + 'px;color:#666;font-size:smaller">4pm</div>');
   
  });
  function yformatter(v) {
  if (Math.floor(v/60) < -9) return "";
  return Math.abs(Math.floor(v/60)) + " min " + (v == 0 ? "" : (v >0 ? "early":"late"))
  }
  function showTooltip(x, y, contents) {
  $('<div id="tooltip">' + contents + '</div>').css( {
  position: 'absolute',
  display: 'none',
  top: y + 5,
  left: x + 5,
  border: '1px solid #fdd',
  padding: '2px',
  'background-color': '#fee',
  opacity: 0.80
  }).appendTo("body").fadeIn(200);
  }
   
  var previousPoint = null;
  $("#placeholder").bind("plothover", function (event, pos, item) {
  $("#x").text(pos.x.toFixed(2));
  $("#y").text(pos.y.toFixed(2));
   
  if (item) {
  if (previousPoint != item.dataIndex) {
  previousPoint = item.dataIndex;
   
  $("#tooltip").remove();
  var x = item.datapoint[0].toFixed(2),
  y = item.datapoint[1].toFixed(2);
   
  var d = new Date();
  d.setTime(x);
  var time = d.getUTCHours() +':'+ (d.getUTCMinutes().toString().length == 1 ? '0'+ d.getMinutes(): d.getUTCMinutes())
   
   
  showTooltip(item.pageX, item.pageY,
  item.series.label + " at "+ time +" = " + Math.abs(new Number(y/60).toFixed(2))+" minutes "+(y >0 ? "early":"late"));
  }
  }
  else {
  $("#tooltip").remove();
  previousPoint = null;
  }
  });
   
  </script>