More work on mobile UI, changed to network 10 start date
More work on mobile UI, changed to network 10 start date

--- a/betweenpoint.php
+++ b/betweenpoint.php
@@ -129,7 +129,9 @@
 		// Strip off individual platforms because it usually doesn't matter for routes
 		$timetable["time_points"] = preg_replace("/\(Platform.*/","",$timetable["time_points"]);
               for ($i = 0; $i < sizeof($timetable["time_points"]) - 1; $i++) {
-                  @$paths[trim($timetable["time_points"][$i]) . "->" . trim($timetable["time_points"][$i + 1])] .= $timetable["short_name"] . ";";
+		$key = trim($timetable["time_points"][$i]) . "->" . trim($timetable["time_points"][$i + 1]);
+		if (strstr($paths[$key],";" . $timetable["short_name"] . ";") === false)
+                  @$paths[$key] .= $timetable["short_name"] . ";";
               }
           }
       }
@@ -139,9 +141,12 @@
   $completedPaths = array();
   $result_betweenstops = pg_query($conn, "Select * FROM between_stops");
   while ($path = pg_fetch_assoc($result_betweenstops)) {
-      $completedPaths[trim($path['fromlocation']) . "->" . trim($path['tolocation'])] .= trim($path['routes']);
+    $key = trim($path['fromlocation']) . "->" . trim($path['tolocation']);
+    $completedPaths[$key].= trim($path['routes']);
+    
   }
-  
+
+ 
   foreach ($paths as $path => $routes) {
       if (!in_array($path, array_keys($completedPaths))) {
           echo "<option value=\"$routes:$path\">" . sizeof(explode(";", $routes)) . " $path</option>\n";
@@ -150,12 +155,14 @@
 	 $incompleteRoutes = "";
 	foreach (explode(";", $routes) as $route) {
 
-	  if (!in_array($route,$completedRoutes)) {
+	  if (!in_array($route,$completedRoutes) && strstr($incompleteRoutes,';'.$route.';') === false) {
 	  $incompleteRoutes .= $route.';';
 	  }
 	  
 	}
-	if ($incompleteRoutes != "") echo "<option value=\"$incompleteRoutes:$path\">" . sizeof(explode(";", $incompleteRoutes)) . " $path</option>\n";
+	if ($incompleteRoutes != "") {
+	  echo "<option value=\"$incompleteRoutes:$path\">" . sizeof(explode(";", $incompleteRoutes)) . " $path</option>\n";
+	}
       }
       
   }

--- a/betweenpoint.submit.php
+++ b/betweenpoint.submit.php
@@ -16,9 +16,11 @@
          echo("Error in SQL query: " . pg_last_error() ."<br>\n");

      }

      if ($reverse === "on") {

-	$p = implode(";",array_reverse(explode(";",$points))).";";

-	$points = str_replace(";","",$p,1);

-$sql = "INSERT INTO between_stops ( toLocation, fromLocation, points, routes) VALUES('$from','$to','$points','$routes')";

+	$ep = explode(";",$points);

+	$epr = array_reverse($ep); 

+	$p = implode(";",$epr).";";

+	$pointsString = substr($p,1);

+$sql = "INSERT INTO between_stops ( toLocation, fromLocation, points, routes) VALUES('$from','$to','$pointsString','$routes')";

 $result = pg_query($conn, $sql);

      if (!$result) {

          echo("Error in SQL query: " . pg_last_error() ."<br>\n");


--- a/busui/common.inc.php
+++ b/busui/common.inc.php
@@ -12,16 +12,16 @@
     return true;
 }
 
-function include_header($pageTitle) {
+function include_header($pageTitle, $opendiv = true, $geolocate = false) {
     // if (isDebug()) // set php error level high
     echo '
 <!DOCTYPE html> 
 <html> 
 	<head> 
 	<title>bus.lambdacomplex.org - '.$pageTitle.'</title> 
-	<link rel="stylesheet"  href="http://code.jquery.com/mobile/1.0a1/jquery.mobile-1.0a1.min.css" /> 
+	<link rel="stylesheet"  href="http://code.jquery.com/mobile/1.0a2/jquery.mobile-1.0a2.min.css" /> 
 	<script src="http://code.jquery.com/jquery-1.4.3.min.js"></script><script type="text/javascript" 
-src="http://code.jquery.com/mobile/1.0a1/jquery.mobile-1.0a1.min.js"></script> 
+src="http://code.jquery.com/mobile/1.0a2/jquery.mobile-1.0a2.min.js"></script> 
 	<script type="text/javascript" src="docs/docs.js"></script> 
  <meta name="apple-mobile-web-app-capable" content="yes" />
  <meta name="apple-mobile-web-app-status-bar-style" content="black" />
@@ -29,11 +29,12 @@
  <link rel="apple-touch-icon" href="apple-touch-icon.png" />
 </head> 
 <body> 
- 
-<div data-role="page"> 
+ ';
+if ($opendiv) echo '<div data-role="page"> 
  
 	<div data-role="header"> 
-		<h1>'.$pageTitle.'</h1> 
+		<h1>'.$pageTitle.'</h1>
+                <a href="index.php" data-icon="back" class="ui-btn-right">Home</a>
 	</div><!-- /header -->
         <div data-role="content"> ';
 }
@@ -85,6 +86,24 @@
   }
   return $f;
 }
+
+function staticmap($mapPoints)
+{
+$width = 300;
+$height = 300;
+    if (sizeof($mapPoints) < 1) return "";
+    if (sizeof($mapPoints) === 1) $center = "{$mapPoints[0][0]},{$mapPoints[0][1]}";
+    if (sizeof($mapPoints) > 1) $center = "{$mapPoints[0][0]},{$mapPoints[0][1]}"; //TODO average points
+    $markers = "";
+    foreach ($mapPoints as $index => $mapPoint) {
+        if (sizeof($mapPoints) === 1) {
+            $markers .= $mapPoint[0].",".$mapPoint[1].",ol-marker";
+        } else {
+            $markers .= $mapPoint[0].",".$mapPoint[1].",lightblue".($index+1);
+        }
+    }
+    return '<img src="staticmaplite/staticmap.php?center='.$center.'&zoom=14&size='.$width.'x'.$height.'&maptype=mapnik&markers='.$markers.'" width=$width height=$height>';
+}
 ?>
   
 

--- a/busui/index.php
+++ b/busui/index.php
@@ -1,60 +1,26 @@
 <?php 
-include('common.inc.php'); 
+include('common.inc.php');
+include_header("bus.lambdacomplex.org",false)
 ?>
-<!doctype html>
-<html>
-    <head>
-        <meta charset="UTF-8" />
-        <title>bus.lambdacomplex.org</title>
-	<link rel="stylesheet" href="http://code.jquery.com/mobile/1.0a1/jquery.mobile-1.0a1.min.css" />
-	<script src="http://code.jquery.com/jquery-1.4.3.min.js"></script>
-	<script src="http://code.jquery.com/mobile/1.0a1/jquery.mobile-1.0a1.min.js"></script>
-        <!-- <script src="jqtouch/extensions/jqt.location.js" type="application/x-javascript" charset="utf-8"></script>  -->
- 
-<!--        <script type="text/javascript" charset="utf-8">
-            $(function(){
-                function setDisplay(text) {
-                    $('.latlng').empty().append(text)
-                }
-                
-                // We pass "updateLocation" a callback function,
-                // to run once we have the coordinates.
-                // We also set it to a variable, so we can know
-                // right away if it's working or not
-                var lookup = jQT.updateLocation(function(coords){
-                    if (coords) {
-                        setDisplay('Latitude: ' + coords.latitude + '<br />Longitude: ' + coords.longitude);
-			 $('.nearby').empty().append('<a href="list.php?lat=' + coords.latitude + '&lng=' + coords.longitude + '">Nearby List</a>');
-                    } else {
-                        setDisplay('Device not capable of geo-location.');
-                    }
-                });
- 
-                if (lookup) {
-                    setDisplay('Looking up location&hellip;');
-                }
-            });
-        </script> -->
-    </head>
-    <body>
-<div data-role="page" data-theme="b" id="jqm-home"> 
-	<div id="jqm-homeheader"> 
-		<p>bus.lambdacomplex.org</p> 
+<div data-role="page" data-theme="b" id="jqm-home" class="ui-page ui-body-b ui-page-active">
+	<div id="jqm-homeheader">
+	    	<center><h1 id="jqm-logo"><img src="apple-touch-icon.png" alt="jQuery Mobile Framework" width="64" height="64" />
+		bus.lambdacomplex.org</h1></center>
 	</div> 
 	<div data-role="content"> 
             <ul data-role="listview" data-inset="true" data-theme="c" data-dividertheme="b">
                 <li data-role="list-divider">Stops</li>
                 <li><a href="stopList.php">All stops List</a></li>
-		<li class="nearby"><a href="">Nearby List</a></li>
-                <li><a href="stopList.php">Favourites List</a></li>
+		<li class="nearby"><a href="stopList.php?nearby=yes">Nearby List</a></li>
+                <li><a href="stopList.php?favourites=yes">Favourites List</a></li>
             </ul>
 	    <ul data-role="listview" data-inset="true" data-theme="c" data-dividertheme="b">
                 <li data-role="list-divider">Routes</li>
                 <li><a href="routeList.php">All Routes List</a></li>
-		<li class="nearby"><a href="">Nearby List</a></li>
-                <li><a href="routeList.php">Favourites List</a></li>
+		<li class="nearby"><a href="routeList.php?nearby=yes">Nearby List</a></li>
+                <li><a href="routeList.php?favourites=yes">Favourites List</a></li>
             </ul>
-            <div class="info">
+            <div class="ui-body ui-body-c info">
 		<p class="latlng"></p>
 		Time: <?php echo date("H:m"); ?> <br>
 		Service Period: <?php echo ucwords(service_period()); ?> 

--- a/busui/readme.txt
+++ b/busui/readme.txt
@@ -21,3 +21,10 @@
 OOP stops/routes
 Stop sorting/search-filter
 
+static maps
+https://code.google.com/apis/maps/documentation/staticmaps/
+http://www.multimap.com/openapidocs/1.2/web_service/staticmaps.htm
+http://dev.openstreetmap.de/staticmap/ (os @ http://sourceforge.net/projects/staticmaplite/)
+(php and open source @ http://trac.openstreetmap.org/browser/sites/other/StaticMap?rev=16348)
+http://pafciu17.dev.openstreetmap.org/
+

file:a/busui/route.php (deleted)
--- a/busui/route.php
+++ /dev/null

--- a/busui/routeList.php
+++ b/busui/routeList.php
@@ -7,28 +7,49 @@
 $url = $APIurl."/json/routes";
 
 $contents = json_decode(getPage($url));
-foreach ($contents as $key => $row) {
-    $routeDestinations[$row[2]][]  = $row;
-}
-foreach ($routeDestinations as $destination => $routes)
-{
-	echo '<li>'.$destination."... <ul>\n";
-		foreach($routes as $row) {
-      			echo  '<li>'.$row[1].' <a href="route.php?routeid='.$row[0].'">'.$row[2]."</a></li>\n";
+if ($_REQUEST['bynumber']) {
+	$routeSeries = Array();
+	foreach ($contents as $key => $row) {
+		foreach (explode(" ",$row[1]) as $routeNumber ) {
+			$seriesNum = substr($routeNumber, 0, -1)."0";
+			if ($seriesNum == "0") $seriesNum = $routeNumber;
+			$routeSeries[$seriesNum][$seriesNum."-".$row[1]."-".$row[0]]  = $row;
+
+			
 		}
-	echo "</ul></li>\n";
+	}
+	ksort($routeSeries);
+	foreach ($routeSeries as $series => $routes)
+	{
+		echo '<li>'.$series."... <ul>\n";
+			foreach($routes as $row) {
+				echo  '<li>'.$row[1].' <a href="route.php?routeid='.$row[0].'">'.$row[2]."</a></li>\n";
+			}
+		echo "</ul></li>\n";
+	}
+} else {
+	foreach ($contents as $key => $row) {
+	    $routeDestinations[$row[2]][]  = $row;
+	}
+	foreach ($routeDestinations as $destination => $routes)
+	{
+		echo '<li>'.$destination."... <ul>\n";
+			foreach($routes as $row) {
+				echo  '<li>'.$row[1].' <a href="trip.php?routeid='.$row[0].'">'.$row[2]."</a></li>\n";
+			}
+		echo "</ul></li>\n";
+	}
 }
 echo "</ul>\n";
-/*
+echo'
  <div data-role="footer" data-id="foo1" data-position="fixed"> 
 		<div data-role="navbar"> 
 			<ul> 
-				<li><a href="footer-persist-a.html" class="ui-btn-active">Friends</a></li> 
-				<li><a href="footer-persist-b.html">Albums</a></li> 
-				<li><a href="footer-persist-c.html">Emails</a></li> 
+				<li><a href="routeList.php" class="ui-btn-active">By Final Destination...</a></li> 
+				<li><a href="routeList.php?bynumber=yes">By Number... </a></li>
+				<li><a href="routeList.php?bysuburb=yes">By Suburb... </a></li> 
 			</ul> 
-		</div><!-- /navbar -->
-*/
+	';
 include_footer();
 ?>
 

--- a/busui/schedule_viewer.py
+++ b/busui/schedule_viewer.py
@@ -264,7 +264,19 @@
     schedule = self.server.schedule
     route = schedule.GetRoute(params.get('route', None))
     return [transitfeed.Route._FIELD_NAMES, route.GetFieldValuesTuple()]
-
+    
+  def handle_json_GET_routetrips(self, params):
+    """ Get a trip for a route_id (preferablly the next one) """
+    schedule = self.server.schedule
+    query = params.get('route_id', None).lower()
+    result = []
+    for t in schedule.GetTripList():
+      if t.route_id == query:
+        result.append ( (t.GetStartTime(), t.trip_id) )
+        """ UGH fails for 300s """
+    """return result"""
+    return sorted(result, key=lambda trip: trip[0])
+  
   def handle_json_GET_triprows(self, params):
     """Return a list of rows from the feed file that are related to this
     trip."""

--- a/busui/stop.php
+++ b/busui/stop.php
@@ -4,15 +4,19 @@
 $stop = json_decode(getPage($url));
 
 include_header("Trips passing ".$stop[1]);
+echo '<div data-role="content" class="ui-content" role="main"><p>'.staticmap(Array(0 => Array($stop[2],$stop[3]))).'</p>';
 echo '  <ul data-role="listview" >';
 $url = $APIurl."/json/stoptrips?stop=".$_REQUEST['stopid']."&time=".midnight_seconds()."&service_period=".service_period();
-$page = getPage($url);
-echo $page;
-foreach (json_decode($page) as $row)
+$trips = json_decode(getPage($url));
+foreach ($trips as $row)
 {
-echo  '<li>'.midnight_seconds_to_time($row[0]).' <a href="trip.php?stopid='.$_REQUEST['stopid'].'&tripid='.$row[1][0].'">'.$row[1][1].'</a></li>';        
+echo  '<li>';
+echo '<h3><a href="trip.php?stopid='.$_REQUEST['stopid'].'&tripid='.$row[1][0].'">'.$row[1][1].'</a></h3>';      
+echo '<p class="ui-li-aside"><strong>'.midnight_seconds_to_time($row[0]).'</strong></p>';
+echo '</li>';  
 }
-echo '</ul>';
+if (sizeof($trips) == 0) echo "<li> <center>No trips in the near future.</center> </li>";
+echo '</ul></div>';
 include_footer();
 ?>
 

--- a/busui/trip.php
+++ b/busui/trip.php
@@ -1,23 +1,36 @@
 <?php
 include('common.inc.php');
-$url = $APIurl."/json/triprows?trip=".$_REQUEST['tripid'];
+$tripid = $_REQUEST['tripid'];
+if ($_REQUEST['routeid']) {
+    $url = $APIurl."/json/routetrips?route_id=".$_REQUEST['routeid'];
+    $trips = json_decode(getPage($url));
+foreach ($trips as $trip)
+         {
+            if ($trip[0] < midnight_seconds()) {
+                $tripid = $trip[1];
+                break;
+            }
+         }
+         if (!($tripid > 0)) $tripid = $trips[0][1];
+}
+$url = $APIurl."/json/triprows?trip=".$tripid;
 $trips = array_flatten(json_decode(getPage($url)));
-print_r($trips);
 
 include_header("Stops on ". $trips[1]->route_short_name . ' '. $trips[1]->route_long_name);
 echo '  <ul data-role="listview" >';
 
 
-
-
-$url = $APIurl."/json/tripstoptimes?trip=".$_REQUEST['tripid'];
+$url = $APIurl."/json/tripstoptimes?trip=".$tripid;
 
 $json = json_decode(getPage($url));
 $stops = $json[0];
 $times = $json[1];
 foreach ($stops as $key => $row)
 {
-echo  '<li>'.midnight_seconds_to_time($times[$key]).' <a href="stop.php?stopid='.$row[0].'">'.$row[1].'</a></li>';        
+    echo  '<li>';
+echo '<h3><a href="stop.php?stopid='.$row[0].'">'.$row[1].'</a></h3>';      
+echo '<p class="ui-li-aside">'.midnight_seconds_to_time($times[$key]).'</p>';
+echo '</li>';       
 }
 echo '</ul>';
 include_footer();

--- a/maxious-canberra-transit-feed/cbrtable.yml
+++ b/maxious-canberra-transit-feed/cbrtable.yml
@@ -1,7 +1,7 @@
 options:
-  start_date: 20090525
-  end_date: 20101001
-  remove_date: 20101001
+  start_date: 20101115
+  end_date: 20111231
+  remove_date: 20111231
   agency_name: ACT Internal Omnibus Network (ACTION)
   agency_url: http://www.action.act.gov.au/ 
   agency_timezone: Australia/Sydney
@@ -1768,6 +1768,7 @@
       Macarthur / Northbourne Ave-Northbourne Avenue / Antill St: [Wjz5RkN, Wjz5Rsi, Wjz5RvC, Wjz5Sqk, Wjz5SrO, Wjz5Sux, Wjz5SDc]
       City Bus Station (Platform 8)-Macarthur / Northbourne Ave: [Wjz5O3Q, Wjz5Oci, Wjz5P8n, Wjz5P8K, Wjz5PdJ, Wjz5Pl0, Wjz5Qi2, Wjz5Qgn, Wjz5Qmu, Wjz5QmR]
       Belconnen Community Bus Station-Westfield Bus Station: []
+      Chuculba / William Slim Dr-Belconnen Community Bus Station: [Wjz6mip, Wjz69vO, Wjz69uI, Wjz69ht, Wjz69gA]
     short_name: "59"
     stop_times: [["-", "-", "-", "-", 645a, 648a, 703a, 709a, 718a, 734a, 736a, 741a], ["-", "-", "-", "-", 710a, 713a, 728a, 734a, 743a, 800a, 802a, 807a], ["-", "-", "-", "-", 730a, 733a, 748a, 754a, 803a, 820a, 822a, 827a], ["-", "-", "-", "-", 755a, 758a, 813a, 819a, 828a, 845a, 847a, 852a], ["-", "-", "-", "-", 815a, 818a, 833a, 839a, 848a, 905a, 907a, 912a], ["-", "-", "-", "-", 907a, 910a, 925a, 931a, 940a, 956a, 958a, 1003a], ["-", "-", "-", "-", 1007a, 1010a, 1025a, 1031a, 1040a, 1056a, 1058a, 1103a], ["-", "-", "-", "-", 1107a, 1110a, 1125a, 1131a, 1140a, 1156a, 1158a, 1203p], ["-", "-", "-", "-", 1207p, 1210p, 1225p, 1231p, 1240p, 1256p, 1258p, 103p], ["-", "-", "-", "-", 107p, 110p, 125p, 131p, 140p, 156p, 158p, 203p], ["-", "-", "-", "-", 207p, 210p, 225p, 231p, 240p, 256p, 258p, 303p], ["-", "-", "-", "-", 307p, 310p, 325p, 331p, 340p, 356p, 358p, 403p], [328p, 334p, 336p, 344p, 347p, 350p, 405p, 411p, 421p, 438p, 440p, 445p], [337p, 343p, 345p, 353p, 356p, 359p, 414p, 420p, 430p, 447p, 449p, 454p], [351p, 357p, 359p, 408p, 413p, 416p, 431p, 437p, 447p, 504p, 506p, 511p], [409p, 416p, 418p, 427p, 432p, 435p, 450p, 456p, 506p, 523p, 525p, 530p], [423p, 430p, 432p, 441p, 446p, 449p, 504p, 510p, 520p, 537p, 539p, 544p], [437p, 444p, 446p, 455p, 500p, 503p, 518p, 524p, 534p, 551p, 553p, 558p], [453p, 500p, 502p, 511p, 516p, 519p, 534p, 540p, 550p, 607p, 609p, 614p], [507p, 514p, 516p, 525p, 530p, 533p, 548p, 554p, 604p, 620p, 622p, 627p], [524p, 531p, 533p, 542p, 547p, 550p, 605p, 611p, 620p, 636p, 638p, 643p], [544p, 551p, 553p, 602p, 605p, 608p, 623p, 629p, 638p, 654p, 656p, 701p], [557p, 603p, 605p, 612p, 615p, 618p, 633p, 639p, 648p, 704p, 706p, 711p], ["-", "-", "-", "-", 707p, 710p, 725p, 731p, 740p, 756p, 758p, 803p], ["-", "-", "-", "-", 807p, 810p, 825p, 831p, 840p, 856p, 858p, 903p], ["-", "-", "-", "-", 907p, 910p, 925p, 931p, 940p, 956p, 958p, 1003p], ["-", "-", "-", "-", 1007p, 1010p, 1025p, 1031p, 1040p, 1056p, 1058p, 1103p], ["-", "-", "-", "-", 1107p, 1110p, 1125p, 1131p, 1140p, 1156p, 1158p, 1203a]]
   -  
@@ -1803,8 +1804,10 @@
   -  
     time_points: [Gungahlin Marketplace, Nicholls Primary, Federation Square, Chuculba / William Slim Dr, Belconnen Community Bus Station, Westfield Bus Station, Cohen Street Bus Station]
     long_name: To Cohen Street Bus Station
-    between_stops: {}
-    
+    between_stops: 
+      Westfield Bus Station-Cohen Street Bus Station: []
+      Belconnen Community Bus Station-Westfield Bus Station: []
+      Chuculba / William Slim Dr-Belconnen Community Bus Station: [Wjz6mip, Wjz69vO, Wjz69uI, Wjz69ht, Wjz69gA]
     stop_times_saturday: [[0839a, 0847a, 0900a, 0905a, 0918a, 0920a, 0925a], [0939a, 0947a, 1000a, 1005a, 1018a, 1020a, 1025a], [1039a, 1047a, 1100a, 1105a, 1118a, 1120a, 1125a], [1139a, 1147a, 1200p, 1205p, 1218p, 1220p, 1225p], [1239p, 1247p, 0100p, 0105p, 0118p, 0120p, 0125p], [0139p, 0147p, 0200p, 0205p, 0218p, 0220p, 0225p], [0239p, 0247p, 0300p, 0305p, 0318p, 0320p, 0325p], [0339p, 0347p, 0400p, 0405p, 0418p, 0420p, 0425p], [0439p, 0447p, 0500p, 0505p, 0518p, 0520p, 0525p], [0539p, 0547p, 0600p, 0605p, 0618p, 0620p, 0625p], [0639p, 0647p, 0700p, 0705p, 0718p, 0720p, 0725p]]
     short_name: "952"
   -  
@@ -1817,15 +1820,20 @@
   -  
     time_points: [Cohen Street Bus Station (Platform 1), Westfield Bus Station (Platform 1), Belconnen Community Bus Station (Platform 3), Calvary Hospital, Jamison Centre, Cook Shops, Hawker Shops, Page Shops, Florey Shops, Cohen Street Bus Station, Westfield Bus Station, Belconnen Community Bus Station]
     long_name: To Belconnen Community Bus Station
-    between_stops: {}
-    
+    between_stops: 
+      Westfield Bus Station (Platform 1)-Belconnen Community Bus Station (Platform 3): []
+      Cohen Street Bus Station (Platform 1)-Westfield Bus Station (Platform 1): []
+      Westfield Bus Station-Belconnen Community Bus Station: []
+      Cohen Street Bus Station-Westfield Bus Station: []
     short_name: "74"
     stop_times: [[950a, 952a, 956a, 1005a, 1012a, 1015a, 1023a, 1027a, 1033a, 1039a, 1041a, 1045a], [1120a, 1122a, 1126a, 1135a, 1142a, 1145a, 1153a, 1157a, 1203p, 1209p, 1211p, 1215p], [1250p, 1252p, 1256p, 105p, 112p, 115p, 123p, 127p, 133p, 139p, 141p, 145p], [220p, 222p, 226p, 235p, 242p, 245p, 253p, 257p, 303p, 309p, 311p, 315p]]
   -  
     time_points: [City Bus Station (Platform 8), Macarthur / Northbourne Ave, Flemington Rd / Sandford St, Kosciuszko / Everard, Gungahlin Marketplace, Chuculba / William Slim Dr, William Webb / Ginninderra Drive, Belconnen Community Bus Station, Westfield Bus Station, Cohen Street Bus Station]
     long_name: To Cohen Street Bus Station
-    between_stops: {}
-    
+    between_stops: 
+      Westfield Bus Station-Cohen Street Bus Station: []
+      City Bus Station (Platform 8)-Macarthur / Northbourne Ave: [Wjz5O3Q, Wjz5Oci, Wjz5P8n, Wjz5P8K, Wjz5PdJ, Wjz5Pl0, Wjz5Qi2, Wjz5Qgn, Wjz5Qmu, Wjz5QmR]
+      Belconnen Community Bus Station-Westfield Bus Station: []
     short_name: "956"
     stop_times: [[838a, 844a, 852a, 859a, 909a, 919a, 924a, 930a, 932a, 937a], [938a, 944a, 952a, 959a, 1009a, 1019a, 1024a, 1030a, 1032a, 1037a], [1038a, 1044a, 1052a, 1059a, 1109a, 1119a, 1124a, 1130a, 1132a, 1137a], [1138a, 1144a, 1152a, 1159a, 1209p, 1219p, 1224p, 1230p, 1232p, 1237p], [1238p, 1244p, 1252p, 1259p, 109p, 119p, 124p, 130p, 132p, 137p], [138p, 144p, 152p, 159p, 209p, 219p, 224p, 230p, 232p, 237p], [238p, 244p, 252p, 259p, 309p, 319p, 324p, 330p, 332p, 337p], [338p, 344p, 352p, 359p, 409p, 419p, 424p, 430p, 432p, 437p], [438p, 444p, 452p, 459p, 509p, 519p, 524p, 530p, 532p, 537p], [538p, 544p, 552p, 559p, 609p, 619p, 624p, 630p, 632p, 637p], [638p, 644p, 652p, 659p, 709p, 719p, 724p, 730p, 732p, 737p]]
   -  
@@ -1838,8 +1846,11 @@
   -  
     time_points: [Cohen Street Bus Station (Platform 1), Westfield Bus Station (Platform 1), Belconnen Community Bus Station (Platform 2), Chuculba / William Slim Dr, Ngunnawal Primary, Shoalhaven / Katherine Ave, Gungahlin Marketplace, Anthony Rolfe Av / Moonlight Av, Flemington Rd / Nullabor Ave, Flemington Rd / Sandford St, Macarthur / Northbourne Ave, City Bus Station]
     long_name: To City Bus Station
-    between_stops: {}
-    
+    between_stops: 
+      Belconnen Community Bus Station (Platform 2)-Chuculba / William Slim Dr: [Wjz69gA, Wjz69ht, Wjz69uI, Wjz69vO, Wjz6mip]
+      Macarthur / Northbourne Ave-City Bus Station: [Wjz5QmR, Wjz5Qmu, Wjz5Qgn, Wjz5Qi2, Wjz5Pl0, Wjz5PdJ, Wjz5P8K, Wjz5P8n, Wjz5Oci, Wjz5O3Q]
+      Cohen Street Bus Station (Platform 1)-Westfield Bus Station (Platform 1): []
+      Westfield Bus Station (Platform 1)-Belconnen Community Bus Station (Platform 2): []
     short_name: "958"
     stop_times_sunday: [[852a, 854a, 858a, 908a, 919a, 927a, 935a, 944a, 951a, 958a, 1006a, 1013a], [952a, 954a, 958a, 1008a, 1019a, 1027a, 1035a, 1044a, 1051a, 1058a, 1106a, 1113a], [1052a, 1054a, 1058a, 1108a, 1119a, 1127a, 1135a, 1144a, 1151a, 1158a, 1206p, 1213p], [1152a, 1154a, 1158a, 1208p, 1219p, 1227p, 1235p, 1244p, 1251p, 1258p, 106p, 113p], [1252p, 1254p, 1258p, 108p, 119p, 127p, 135p, 144p, 151p, 158p, 206p, 213p], [152p, 154p, 158p, 208p, 219p, 227p, 235p, 244p, 251p, 258p, 306p, 313p], [252p, 254p, 258p, 308p, 319p, 327p, 335p, 344p, 351p, 358p, 406p, 413p], [352p, 354p, 358p, 408p, 419p, 427p, 435p, 444p, 451p, 458p, 506p, 513p], [452p, 454p, 458p, 508p, 519p, 527p, 535p, 544p, 551p, 558p, 606p, 613p], [552p, 554p, 558p, 608p, 619p, 627p, 635p, 644p, 651p, 658p, 706p, 713p], [652p, 654p, 658p, 708p, 719p, 727p, 735p, 744p, 751p, 758p, 806p, 813p]]
   -  
@@ -1859,29 +1870,36 @@
   -  
     time_points: [Cohen Street Bus Station (Platform 2), Westfield Bus Station (Platform 1), Belconnen Community Bus Station (Platform 3), Calvary Hospital, O'Connor Shops, Burton and Garran Hall Daley Road, National Museum of Australia, City Bus Station (Platform 2), Kings Ave / National Circuit, Deakin Shops, Hughes Shops, Garran Shops, Canberra Hospital, Woden Bus Station]
     long_name: To Woden Bus Station
-    between_stops: {}
-    
+    between_stops: 
+      Westfield Bus Station (Platform 1)-Belconnen Community Bus Station (Platform 3): []
+      City Bus Station (Platform 2)-Kings Ave / National Circuit: [Wjz5FOn, Wjz4S1U, Wjz4Rs-, Wjz4RFJ, Wjz4RwH, Wjz4Quk]
+      Cohen Street Bus Station (Platform 2)-Westfield Bus Station (Platform 1): []
+      Canberra Hospital-Woden Bus Station: [Wjz3mWn, Wjz3mPO, Wjz3mAg]
     stop_times_saturday: [[729a, 731a, 735a, 752a, 759a, 804a, 809a, 819a, 828a, 837a, 842a, 846a, 848a, 855a], [829a, 831a, 835a, 852a, 859a, 904a, 909a, 919a, 928a, 937a, 942a, 946a, 948a, 955a], [929a, 931a, 935a, 952a, 959a, 1004a, 1009a, 1019a, 1028a, 1037a, 1042a, 1046a, 1048a, 1055a], [1029a, 1031a, 1035a, 1052a, 1059a, 1104a, 1109a, 1119a, 1128a, 1137a, 1142a, 1146a, 1148a, 1155a], [1129a, 1131a, 1135a, 1152a, 1159a, 1204p, 1209p, 1219p, 1228p, 1237p, 1242p, 1246p, 1248p, 1255p], [1229p, 1231p, 1235p, 1252p, 1259p, 104p, 109p, 119p, 128p, 137p, 142p, 146p, 148p, 155p], [129p, 131p, 135p, 152p, 159p, 204p, 209p, 219p, 228p, 237p, 242p, 246p, 248p, 255p], [229p, 231p, 235p, 252p, 259p, 304p, 309p, 319p, 328p, 337p, 342p, 346p, 348p, 355p], [329p, 331p, 335p, 352p, 359p, 404p, 409p, 419p, 428p, 437p, 442p, 446p, 448p, 455p], [429p, 431p, 435p, 452p, 459p, 504p, 509p, 519p, 528p, 537p, 542p, 546p, 548p, 555p], [529p, 531p, 535p, 552p, 559p, 604p, 609p, 619p, 628p, 637p, 642p, 646p, 648p, 655p], [629p, 631p, 635p, 652p, 659p, 704p, 709p, 719p, 728p, 737p, 742p, 746p, 748p, 755p], [729p, 731p, 735p, 752p, 759p, 804p, 809p, 819p, 828p, 837p, 842p, 846p, 848p, 855p], [829p, 831p, 835p, 852p, 859p, 904p, 909p, 919p, 928p, 937p, 942p, 946p, 948p, 955p], [929p, 931p, 935p, 952p, 959p, 1004p, 1009p, 1019p, 1028p, 1037p, 1042p, 1046p, 1048p, 1055p], [1029p, 1031p, 1035p, 1052p, 1059p, 1104p, 1109p, 1117p, "-", "-", "-", "-", "-", "-"]]
     short_name: "934"
   -  
     time_points: [Cohen Street Bus Station (Platform 2), Westfield Bus Station (Platform 1), Belconnen Community Bus Station (Platform 1), City Bus Station (Platform 1), Woden Bus Station (Platform 6), Erindale Centre, Tuggeranong Bus Station]
     long_name: To Tuggeranong Bus Station
-    between_stops: {}
-    
+    between_stops: 
+      Cohen Street Bus Station (Platform 2)-Westfield Bus Station (Platform 1): []
+      Westfield Bus Station (Platform 1)-Belconnen Community Bus Station (Platform 1): []
     short_name: "900"
     stop_times_sunday: [[731a, 733a, 737a, 757a, 814a, 829a, 835a], [746a, 748a, 752a, 812a, 829a, 844a, 850a], [801a, 803a, 807a, 827a, 844a, 859a, 905a], [816a, 818a, 822a, 842a, 859a, 914a, 920a], [831a, 833a, 837a, 857a, 914a, 929a, 935a], [846a, 848a, 852a, 912a, 929a, 944a, 950a], [901a, 903a, 907a, 927a, 944a, 959a, 1005a], [916a, 918a, 922a, 942a, 959a, 1014a, 1020a], [931a, 933a, 937a, 957a, 1014a, 1029a, 1035a], [946a, 948a, 952a, 1012a, 1029a, 1044a, 1050a], [1001a, 1003a, 1007a, 1027a, 1044a, 1059a, 1105a], [1016a, 1018a, 1022a, 1042a, 1059a, 1114a, 1120a], [1031a, 1033a, 1037a, 1057a, 1114a, 1129a, 1135a], [1046a, 1048a, 1052a, 1112a, 1129a, 1144a, 1150a], [1101a, 1103a, 1107a, 1127a, 1144a, 1159a, 1205p], [1116a, 1118a, 1122a, 1142a, 1159a, 1214p, 1220p], [1131a, 1133a, 1137a, 1157a, 1214p, 1229p, 1235p], [1146a, 1148a, 1152a, 1212p, 1229p, 1244p, 1250p], [1201p, 1203p, 1207p, 1227p, 1244p, 1259p, 105p], [1216p, 1218p, 1222p, 1242p, 1259p, 114p, 120p], [1231p, 1233p, 1237p, 1257p, 114p, 129p, 135p], [1246p, 1248p, 1252p, 112p, 129p, 144p, 150p], [101p, 103p, 107p, 127p, 144p, 159p, 205p], [116p, 118p, 122p, 142p, 159p, 214p, 220p], [131p, 133p, 137p, 157p, 214p, 229p, 235p], [146p, 148p, 152p, 212p, 229p, 244p, 250p], [201p, 203p, 207p, 227p, 244p, 259p, 305p], [216p, 218p, 222p, 242p, 259p, 314p, 320p], [231p, 233p, 237p, 257p, 314p, 329p, 335p], [246p, 248p, 252p, 312p, 329p, 344p, 350p], [301p, 303p, 307p, 327p, 344p, 359p, 405p], [316p, 318p, 322p, 342p, 359p, 414p, 420p], [331p, 333p, 337p, 357p, 414p, 429p, 435p], [346p, 348p, 352p, 412p, 429p, 444p, 450p], [401p, 403p, 407p, 427p, 444p, 459p, 505p], [416p, 418p, 422p, 442p, 459p, 514p, 520p], [431p, 433p, 437p, 457p, 514p, 529p, 535p], [446p, 448p, 452p, 512p, 529p, 544p, 550p], [501p, 503p, 507p, 527p, 544p, 559p, 605p], [516p, 518p, 522p, 542p, 559p, 614p, 620p], [531p, 533p, 537p, 557p, 614p, 629p, 635p], [546p, 548p, 552p, 612p, 629p, 643p, 649p], [601p, 603p, 607p, 627p, 642p, 656p, 702p], [616p, 618p, 622p, 641p, 655p, 709p, 715p], [631p, 633p, 637p, 656p, 710p, 724p, 730p], [646p, 648p, 652p, 711p, 725p, 739p, 745p], [701p, 703p, 707p, 726p, 740p, 754p, 800p]]
   -  
     time_points: [Woden Bus Station (Platform 15), Canberra Hospital, Isaacs Shops, Farrer Terminus, Southlands Mawson, Chifley Shops, Lyons Shops, Woden Bus Station]
     long_name: To Woden Bus Station
-    between_stops: {}
-    
+    between_stops: 
+      Woden Bus Station (Platform 15)-Canberra Hospital: [Wjz3mAg, Wjz3mPO, Wjz3mWn]
     short_name: "24"
     stop_times: [["-", "-", "-", 703a, 709a, 715a, 720a, 724a], [702a, 708a, 715a, 720a, 726a, 732a, 737a, 742a], [739a, 746a, 754a, 800a, 806a, 813a, 818a, 823a], [809a, 816a, 824a, 830a, 836a, 843a, 848a, 853a], [839a, 846a, 854a, 900a, 906a, 913a, 918a, 923a], [956a, 1002a, 1009a, 1014a, 1020a, 1026a, 1031a, 1035a], [1056a, 1102a, 1109a, 1114a, 1120a, 1126a, 1131a, 1135a], [1156a, 1202p, 1209p, 1214p, 1220p, 1226p, 1231p, 1235p], [1256p, 102p, 109p, 114p, 120p, 126p, 131p, 135p], [156p, 202p, 209p, 214p, 220p, 226p, 231p, 235p], [256p, 302p, 310p, 316p, 322p, 329p, 334p, 339p], [339p, 346p, 354p, 400p, 406p, 413p, 418p, 423p], [409p, 416p, 424p, 430p, 436p, 443p, 448p, 453p], [439p, 446p, 454p, 500p, 506p, 513p, 518p, 523p], [509p, 516p, 524p, 530p, 536p, 543p, 548p, 553p], [538p, 545p, 553p, 559p, 605p, 612p, 617p, 622p], [608p, 615p, 623p, 629p, 635p, 641p, 646p, 650p], [659p, 705p, 712p, 717p, 723p, 729p, 734p, 738p], [759p, 805p, 812p, 817p, 823p, 829p, 834p, 838p], [859p, 905p, 912p, 917p, 923p, 929p, 934p, 938p], [959p, 1005p, 1012p, 1017p, 1023p, 1029p, 1034p, 1038p], [1059p, 1105p, 1112p, 1117p, 1123p, 1129p, 1134p, 1138p]]
   -  
     time_points: [Belconnen Community Bus Station (Platform 6), Westfield Bus Station (Platform 2), Cohen Street Bus Station (Platform 5), Higgins Shops, Kippax, Higgins Shops, Cohen Street Bus Station, Westfield Bus Station, Belconnen Community Bus Station]
     long_name: To Belconnen Community Bus Station
-    between_stops: {}
-    
+    between_stops: 
+      Belconnen Community Bus Station (Platform 6)-Westfield Bus Station (Platform 2): []
+      Westfield Bus Station-Belconnen Community Bus Station: []
+      Cohen Street Bus Station-Westfield Bus Station: []
+      Westfield Bus Station (Platform 2)-Cohen Street Bus Station (Platform 5): []
     stop_times_saturday: [["-", "-", "-", "-", 757a, 807a, 828a, 830a, 834a], [819a, 821a, 825a, 846a, 857a, 907a, 928a, 930a, 934a], [919a, 921a, 925a, 946a, 957a, 1007a, 1028a, 1030a, 1034a], [1019a, 1021a, 1025a, 1046a, 1057a, 1107a, 1128a, 1130a, 1134a], [1119a, 1121a, 1125a, 1146a, 1157a, 1207p, 1228p, 1230p, 1234p], [1219p, 1221p, 1225p, 1246p, 1257p, 107p, 128p, 130p, 134p], [119p, 121p, 125p, 146p, 157p, 207p, 228p, 230p, 234p], [219p, 221p, 225p, 246p, 257p, 307p, 328p, 330p, 334p], [319p, 321p, 325p, 346p, 357p, 407p, 428p, 430p, 434p], [419p, 421p, 425p, 446p, 457p, 507p, 528p, 530p, 534p], [519p, 521p, 525p, 546p, 557p, 607p, 628p, 630p, 634p], [619p, 621p, 625p, 645p, 656p, 706p, 726p, 728p, 732p], [718p, 720p, 724p, 744p, 755p, 805p, 825p, 827p, 831p], [818p, 820p, 824p, 844p, 855p, 905p, 925p, 927p, 931p], [918p, 920p, 924p, 944p, 955p, 1005p, 1025p, 1027p, 1031p], [1018p, 1020p, 1024p, 1044p, 1055p, 1105p, 1125p, 1127p, 1131p], [1118p, 1120p, 1124p, 1144p, 1155p, "-", "-", "-", "-"]]
     short_name: "904"
   -  
@@ -1911,8 +1929,8 @@
   -  
     time_points: [Woden Bus Station (Platform 15), Lyons Shops, Chifley Shops, Southlands Mawson, Farrer Terminus, Isaacs Shops, Canberra Hospital, Woden Bus Station]
     long_name: To Woden Bus Station
-    between_stops: {}
-    
+    between_stops: 
+      Canberra Hospital-Woden Bus Station: [Wjz3mWn, Wjz3mPO, Wjz3mAg]
     short_name: "23"
     stop_times: [[607a, 609a, 613a, 622a, 628a, 634a, 642a, 647a], [644a, 646a, 650a, 659a, 705a, 711a, 719a, 724a], [714a, 716a, 720a, 729a, 736a, 742a, 752a, 757a], [744a, 748a, 753a, 801a, 808a, 814a, 824a, 829a], [814a, 818a, 823a, 831a, 838a, 844a, 854a, 859a], [844a, 848a, 853a, 901a, 908a, 914a, 924a, 929a], [926a, 930a, 934a, 943a, 949a, 955a, 1003a, 1008a], [1026a, 1028a, 1032a, 1041a, 1047a, 1053a, 1101a, 1106a], [1126a, 1128a, 1132a, 1141a, 1147a, 1153a, 1201p, 1206p], [1226p, 1228p, 1232p, 1241p, 1247p, 1253p, 101p, 106p], [126p, 128p, 132p, 141p, 147p, 153p, 201p, 206p], [226p, 228p, 232p, 241p, 247p, 253p, 301p, 306p], [314p, 318p, 323p, 331p, 338p, 344p, 354p, 359p], [344p, 348p, 353p, 401p, 408p, 414p, 424p, 429p], [414p, 418p, 423p, 431p, 438p, 444p, 454p, 459p], [444p, 448p, 453p, 501p, 508p, 514p, 524p, 529p], [514p, 518p, 523p, 531p, 538p, 544p, 554p, 559p], [544p, 548p, 553p, 601p, 608p, 614p, 624p, 629p], [626p, 630p, 634p, 643p, 649p, 655p, 703p, 708p], [726p, 728p, 732p, 741p, 747p, 753p, 801p, 806p], [826p, 828p, 832p, 841p, 847p, 853p, 901p, 906p], [926p, 928p, 932p, 941p, 947p, 953p, 1001p, 1006p], [1026p, 1028p, 1032p, 1041p, 1047p, 1053p, 1101p, 1106p], [1126p, 1128p, 1132p, 1141p, "-", "-", "-", "-"]]
   -  
@@ -1925,15 +1943,17 @@
   -  
     time_points: [Woden Bus Station (Platform 11), Athllon / Sulwood Kambah, MacKillop College Wanniassa Campus, Monash Primary, Tuggeranong Bus Station]
     long_name: To Tuggeranong Bus Station
-    between_stops: {}
-    
+    between_stops: 
+      Woden Bus Station (Platform 11)-Athllon / Sulwood Kambah: [Wjz3kAx, Wjz3kyX, Wjz3kwU, Wjz3iFK, Wjz3hL_, Wjz3gK-, Wjz3gQn, Wjz3gMq, Wjz2mTK]
     short_name: "64"
     stop_times: [["-", "-", 651a, 655a, 702a], [706a, 714a, 721a, 725a, 733a], ["-", "-", 751a, 756a, 805a], [806a, 816a, 823a, 828a, 837a], [836a, 846a, 853a, 858a, 907a], [906a, 916a, 923a, 928a, 936a], [1006a, 1015a, 1022a, 1026a, 1034a], [1106a, 1115a, 1122a, 1126a, 1134a], [1206p, 1215p, 1222p, 1226p, 1234p], [106p, 115p, 122p, 126p, 134p], [206p, 215p, 222p, 226p, 234p], [306p, 316p, 323p, 328p, 337p], [336p, 346p, 353p, 358p, 407p], [406p, 416p, 423p, 428p, 437p], [436p, 446p, 453p, 458p, 507p], [506p, 516p, 523p, 528p, 537p], [536p, 546p, 553p, 558p, 607p], [606p, 616p, 623p, 628p, 636p], [706p, 715p, 722p, 726p, 734p], [806p, 815p, 822p, 826p, 834p], [906p, 915p, 922p, 926p, 934p], [1006p, 1015p, 1022p, 1026p, 1034p], [1106p, 1115p, 1122p, 1126p, 1134p]]
   -  
     time_points: [Cohen Street Bus Station (Platform 1), Westfield Bus Station (Platform 1), Belconnen Community Bus Station (Platform 2), Chuculba / William Slim Dr, Federation Square, Nicholls Primary, Ngunnawal Primary, Gungahlin Marketplace]
     long_name: To Gungahlin Market Place
-    between_stops: {}
-    
+    between_stops: 
+      Belconnen Community Bus Station (Platform 2)-Chuculba / William Slim Dr: [Wjz69gA, Wjz69ht, Wjz69uI, Wjz69vO, Wjz6mip]
+      Cohen Street Bus Station (Platform 1)-Westfield Bus Station (Platform 1): []
+      Westfield Bus Station (Platform 1)-Belconnen Community Bus Station (Platform 2): []
     short_name: "