Fix css issues
Fix css issues
Place time/period/location adjuster on many views
Sanitize more user input

--- a/busui/common.inc.php
+++ b/busui/common.inc.php
@@ -1,13 +1,30 @@
 <?php
 date_default_timezone_set('Australia/ACT');
 $APIurl = "http://localhost:8765";
-error_reporting(E_ALL ^ E_NOTICE);
+$cloudmadeAPIkey="daa03470bb8740298d4b10e3f03d63e6";
+$googleMapsAPIkey="ABQIAAAA95XYXN0cki3Yj_Sb71CFvBTPaLd08ONybQDjcH_VdYtHHLgZvRTw2INzI_m17_IoOUqH3RNNmlTk1Q";
+$otpAPIurl = 'http://10.1.0.243:5080/opentripplanner-api-webapp/';
+if (isDebug()) error_reporting(E_ALL ^ E_NOTICE);
 
 // SELECT array_to_string(array(SELECT REPLACE(name_2006, ',', '\,') as name FROM suburbs order by name), ',')
 $suburbs = explode(",","Acton,Ainslie,Amaroo,Aranda,Banks,Barton,Belconnen,Bonner,Bonython,Braddon,Bruce,Calwell,Campbell,Chapman,Charnwood,Chifley,Chisholm,City,Conder,Cook,Curtin,Deakin,Dickson,Downer,Duffy,Dunlop,Evatt,Fadden,Farrer,Fisher,Florey,Flynn,Forrest,Franklin,Fraser,Fyshwick,Garran,Gilmore,Giralang,Gordon,Gowrie,Greenway,Griffith,Gungahlin,Hackett,Hall,Harrison,Hawker,Higgins,Holder,Holt,Hughes,Hume,Isaacs,Isabella Plains,Kaleen,Kambah,Kingston,Latham,Lawson,Lyneham,Lyons,Macarthur,Macgregor,Macquarie,Mawson,McKellar,Melba,Mitchell,Monash,Narrabundah,Ngunnawal,Nicholls,Oaks Estate,O'Connor,O'Malley,Oxley,Page,Palmerston,Parkes,Pearce,Phillip,Pialligo,Red Hill,Reid,Richardson,Rivett,Russell,Scullin,Spence,Stirling,Symonston,Tharwa,Theodore,Torrens,Turner,Wanniassa,Waramanga,Watson,Weetangera,Weston,Yarralumla");
 
  // you have to open the session to be able to modify or remove it 
-session_start(); 
+session_start();
+ if (isset($_REQUEST['service_period'])) $_SESSION['service_period'] = filter_var($_REQUEST['service_period'],FILTER_SANITIZE_STRING);
+ if (isset($_REQUEST['time'])) $_SESSION['time'] = filter_var($_REQUEST['time'],FILTER_SANITIZE_STRING);
+ if (isset($_REQUEST['geolocate'])) {
+    $contents = geocode(var_filter($_REQUEST['geolocate'],FILTER_SANITIZE_URL),true);
+    if (isset($contents[0]->centroid)) {
+        $session['lat'] = $contents[0]->centroid->coordinates[0];
+        $session['lon'] = $contents[0]->centroid->coordinates[1];
+    }
+    else {
+        $session['lat'] = "";
+        $session['lon'] = "";
+    }
+ }
+//print_r ($_SESSION);
 function isDebug()
 {
     return $_SERVER['SERVER_NAME'] == "10.0.1.154" || $_SERVER['SERVER_NAME'] == "localhost" || $_SERVER['SERVER_NAME'] == "127.0.0.1" || !$_SERVER['SERVER_NAME'];
@@ -21,10 +38,6 @@
 }
 
 function include_header($pageTitle, $opendiv = true, $geolocate = false) {
- // this starts the session 
- session_start(); 
- 
-    // if (isDebug()) // set php error level high
     echo '
 <!DOCTYPE html> 
 <html> 
@@ -49,12 +62,16 @@
 	<script src="js/jquery.ui.datepicker.mobile.js"></script> 
      <style type="text/css">
      .ui-navbar {
-     padding-bottom: 18px;
      width: 100%;
      }
-     
+     .ui-btn-inner {
+        white-space: normal !important;
+     }
      .ui-li-heading {
         white-space: normal !important;
+     }
+    .ui-listview-filter {
+        margin: 0 !important;
      }
 </style>
 <meta name="apple-mobile-web-app-capable" content="yes" />
@@ -64,35 +81,12 @@
  if ($geolocate) {
 echo "<script>
 
-function setCookie(c_name,value,expiredays)
-{
-var exdate=new Date();
-exdate.setDate(exdate.getDate()+expiredays);
-document.cookie=c_name+ \"=\" +escape(value)+
-((expiredays==null) ? \"\" : \";expires=\"+exdate.toUTCString());
-}
-
-function getCookie(c_name)
-{
-if (document.cookie.length>0)
-  {
-  c_start=document.cookie.indexOf(c_name + \"=\");
-  if (c_start!=-1)
-    {
-    c_start=c_start + c_name.length+1;
-    c_end=document.cookie.indexOf(\";\",c_start);
-    if (c_end==-1) c_end=document.cookie.length;
-    return unescape(document.cookie.substring(c_start,c_end));
-    }
-  }
-return \"\";
-}
-
 function success(position) {
 $('#geolocate').val(position.coords.latitude+','+position.coords.longitude);
-setCookie('geolocate',position.coords.latitude+','+position.coords.longitude,1);
-}
-
+// setCookie('geolocate',position.coords.latitude+','+position.coords.longitude,1);
+$('#here').click(function(event) { $('#geolocate').val(doAJAXrequestForGeolocSessionHere()); return false;});
+$('#here').show();
+}
 function error(msg) {
  console.log(msg);
 }
@@ -106,17 +100,25 @@
 echo '</head> 
 <body> 
  ';
-if ($opendiv) echo '<div data-role="page"> 
+if ($opendiv)  {
+    echo '<div data-role="page"> 
  
 	<div data-role="header"> 
 		<h1>'.$pageTitle.'</h1>
 	</div><!-- /header -->
         <div data-role="content"> ';
 }
+}
 
 function include_footer()
 {
-    echo '</div>';
+    if ($geolocate && isset($_SESSION['lat'])) {
+        echo "<script>
+        $('#here').click(function(event) { $('#geolocate').val(doAJAXrequestForGeolocSessionHere()); return false;});
+$('#here').show();
+</script>";
+    }
+     echo '</div>';
 }
 
 $service_periods = Array ('sunday','saturday','weekday');
@@ -145,7 +147,7 @@
 {
 // from http://www.perturb.org/display/Perlfunc__Seconds_Since_Midnight.html
 if (isset($_SESSION['time'])) {
-        $time = mkdate($_SESSION['time']);
+        $time = strtotime($_SESSION['time']);
         return (date("G",$time) * 3600) + (date("i",$time) * 60) + date("s",$time);
     }
    return (date("G") * 3600) + (date("i") * 60) + date("s");
@@ -336,7 +338,8 @@
 }
 
 function geocode($query, $giveOptions) {
-       $url = "http://geocoding.cloudmade.com/daa03470bb8740298d4b10e3f03d63e6/geocoding/v2/find.js?query=".$query."&bbox=-35.5,149.00,-35.15,149.1930&return_location=true&bbox_only=true";
+    global $cloudmadeAPIkey;
+       $url = "http://geocoding.cloudmade.com/$cloudmadeAPIkey/geocoding/v2/find.js?query=".$query."&bbox=-35.5,149.00,-35.15,149.1930&return_location=true&bbox_only=true";
       $contents = json_decode(getPage($url));
       if ($giveOptions) return $contents->features;
       elseif (isset($contents->features[0]->centroid)) return $contents->features[0]->centroid->coordinates[0].",".$contents->features[0]->centroid->coordinates[1];
@@ -344,7 +347,8 @@
 }
 
 function reverseGeocode($lat,$lng) {
-      $url = "http://geocoding.cloudmade.com/daa03470bb8740298d4b10e3f03d63e6/geocoding/v2/find.js?around=".$lat.",".$lng."&distance=closest&object_type=road";
+    global $cloudmadeAPIkey;
+       $url = "http://geocoding.cloudmade.com/$cloudmadeAPIkey/geocoding/v2/find.js?around=".$lat.",".$lng."&distance=closest&object_type=road";
       $contents = json_decode(getPage($url));
       return $contents->features[0]->properties->name;
 }
@@ -394,10 +398,21 @@
     return implode(", ",$pointNames);
 }
 
-function timePlaceSettings() {
+function timePlaceSettings($geolocate = false) {
     global $service_periods;
-    echo '<div data-role="collapsible" data-collapsed="true">
+    $geoerror = false;
+    if ($geolocate == true) {
+       $geoerror = !isset($_SESSION['lat']) || !isset($_SESSION['lat'])
+       || $_SESSION['lat'] == "" || $_SESSION['lon'] == "";
+    }
+    if ($geoerror) {
+        echo '<div class="error">Sorry, but your location could not currently be detected.
+        Please allow location permission, wait for your location to be detected,
+        or enter an address/co-ordinates in the box below.</div>';
+    }
+    echo '<div data-role="collapsible" data-collapsed="'.!$geoerror.'">
         <h3>Change Time/Place...</h3>
+        <form action="" method="post">
         <div class="ui-body"> 
 		<div data-role="fieldcontain">
 	            <label for="geolocate"> Current Location: </label>
@@ -405,7 +420,7 @@
 	        </div>
     		<div data-role="fieldcontain">
 		        <label for="time"> Time: </label>
-		    	<input type="time" value="'. date("H:m").'"/> <a href="#" style="display:none" name="currentTime" id="currentTime"/>Current Time?</a>
+		    	<input type="time" name="time" id="time" value="'. ($_SESSION['time'] ? $_SESSION['time'] : date("H:m")).'"/> <a href="#" name="currentTime" id="currentTime"/>Current Time?</a>
 	        </div>
 		<div data-role="fieldcontain">
 		    <label for="service_period"> Service Period:  </label>
@@ -419,10 +434,7 @@
 		</div>
 		
 		<input type="submit" value="Update"/>
+                </form>
             </div></div>';
-echo "	<script>
-$('#here').click(function(event) { $('#geolocate').val(getCookie('geolocate')); return false;});
-$('#here').show();
-        </script>";
 }
 ?>

--- a/busui/index.php
+++ b/busui/index.php
@@ -1,20 +1,11 @@
 <?php 
 include('common.inc.php');
- // remove all the variable in the session 
- session_unset(); 
-
- //destroy the session 
- session_destroy();
- if (isset($_REQUEST['service_period'])) $_SESSION['service_period'] = $_REQUEST['service_period'];
- if (isset($_REQUEST['time'])) $_SESSION['time'] = $_REQUEST['time'];
- // todo take in cellids and crossreference with http://realtimeblog.free.fr/latest/cellular/processed/sqlite/505_sqlite_zones.zip to estimate location
 include_header("bus.lambdacomplex.org",false, true)
 ?>
 <div data-role="page">
 	<div data-role="content">
 			<div id="jqm-homeheader">
-	    	<center><h3 id="jqm-logo"><img src="apple-touch-icon.png" alt="logo" width="64" height="64" /><br>
-		busness time</h3></center>
+	    	<center><h3>busness time</h3><br><small>Canberra Bus Timetables and Trip Planner</small></center>
 	</div> 
 	    <a href="tripPlanner.php" data-role="button">Launch Trip Planner...</a>
             <ul data-role="listview" data-inset="true" data-theme="c" data-dividertheme="b">
@@ -22,13 +13,13 @@
                 <li><a href="stopList.php">Major (Timing Point) Stops</a></li>
 		<li><a href="stopList.php">All Stops</a></li>
 		<li><a href="stopList.php?suburbs=yes">Stops By Suburb</a></li>
-		<li><a href="stopList.php?nearby=yes">Nearby Stops</a></li>
+		<li><a class="nearby" href="stopList.php?nearby=yes">Nearby Stops</a></li>
             </ul>
 	    <ul data-role="listview" data-inset="true" data-theme="c" data-dividertheme="b">
                 <li data-role="list-divider">Timetables - Routes</li>
                 <li><a href="routeList.php">Routes By Final Destination</a></li>
 		<li><a href="routeList.php?bynumber=yes">Routes By Number</a></li>
-		<li><a href="routeList.php?nearby=yes">Nearby Routes</a></li>
+		<li><a class="nearby" href="routeList.php?nearby=yes">Nearby Routes</a></li>
             </ul>
 <?php echo timePlaceSettings();?>
         

--- a/busui/routeList.php
+++ b/busui/routeList.php
@@ -6,7 +6,8 @@
 			<ul> 
 				<li><a href="routeList.php">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>-->
+				<li><a href="routeList.php?bysuburb=yes">By Suburb... </a></li>
+				<li><a href="routeList.php?nearby=yes">Nearby... </a></li>
 			</ul>
                 </div>
 	';

--- a/busui/stop.php
+++ b/busui/stop.php
@@ -3,9 +3,9 @@
 $url = $APIurl."/json/stop?stop_id=".$_REQUEST['stopid'];
 $stop = json_decode(getPage($url));
 
-include_header("Trips passing ".$stop[1]);
+include_header($stop[1]);
+timePlaceSettings();
 echo '<div data-role="content" class="ui-content" role="main"><p>'.staticmap(Array(0 => Array($stop[2],$stop[3]))).'</p>';
-// change date/time/service_period
 echo '  <ul data-role="listview"  data-inset="true">';
 $url = $APIurl."/json/stoptrips?stop=".$_REQUEST['stopid']."&time=".midnight_seconds()."&service_period=".service_period();
 $trips = json_decode(getPage($url));

--- a/busui/stopList.php
+++ b/busui/stopList.php
@@ -1,8 +1,9 @@
 <?php
 include('common.inc.php');
-include_header("Stops");
-echo'
-		<div data-role="navbar"> 
+
+function navbar() {
+   echo'
+		<div data-role="navbar">
 			<ul> 
 				<li><a href="stopList.php">Timing Points</a></li>
 				<li><a href="stopList.php?suburbs=yes">By Suburb</a></li>
@@ -11,8 +12,12 @@
 			</ul>
                 </div>
 	';
+	timePlaceSettings();
+}
 // By suburb
 if (isset($_REQUEST['suburbs'])) {
+   include_header("Stops by Suburb");
+   navbar();
    echo '  <ul data-role="listview" data-filter="true" data-inset="true" >';
    foreach ($suburbs as $suburb) {
          echo  '<li><a href="stopList.php?suburb='.urlencode($suburb).'">'.$suburb.'</a></li>';
@@ -20,6 +25,25 @@
 echo '</ul>';
 } else {
 // Timing Points / All stops
+
+if ($_REQUEST['allstops']) {
+   $url = $APIurl."/json/stops";
+   include_header("All Stops");
+   navbar();
+} else if ($_REQUEST['nearby']) {
+   $url = $APIurl."/json/neareststops?lat={$_SESSION['lat']}&lon={$_SESSION['lon']}&limit=15";
+include_header("Nearby Stops");
+   navbar();
+   timePlaceSettings();
+} else if ($_REQUEST['suburb']) {
+   $url = $APIurl."/json/stopzonesearch?q=".filter_var($_REQUEST['suburb'], FILTER_SANITIZE_STRING);
+include_header("Stops in ".ucwords(filter_var($_REQUEST['suburb'], FILTER_SANITIZE_STRING)));
+   navbar();
+} else {
+   $url = $APIurl."/json/timingpoints";
+   include_header("Timing Points / Major Stops");
+   navbar();
+}
         echo '<div class="noscriptnav"> Go to letter: ';
 foreach(range('A','Z') as $letter) 
 { 
@@ -30,10 +54,6 @@
 $('.noscriptnav').hide();
         </script>";
 echo '  <ul data-role="listview" data-filter="true" data-inset="true" >';
-$url = $APIurl."/json/timingpoints";
-if ($_REQUEST['allstops']) $url = $APIurl."/json/stops";
-if ($_REQUEST['nearby']) $url = $APIurl."/json/neareststops?lat={$_REQUEST['lat']}&lon={$_REQUEST['lon']}&limit=15";
-if ($_REQUEST['suburb']) $url = $APIurl."/json/stopzonesearch?q={$_REQUEST['suburb']}";
 $contents = json_decode(getPage($url));
 debug(print_r($contents,true));
 foreach ($contents as $key => $row) {

--- a/busui/trip.php
+++ b/busui/trip.php
@@ -1,12 +1,12 @@
 <?php
 include('common.inc.php');
-$tripid = $_REQUEST['tripid'];
-$stopid = $_REQUEST['stopid'];
+$tripid = filter_var($_REQUEST['tripid'],FILTER_SANITIZE_NUMBER_INT);
+$stopid = filter_var($_REQUEST['stopid'],FILTER_SANITIZE_NUMBER_INT);
 if ($_REQUEST['routeid']) {
-    $url = $APIurl."/json/routetrips?route_id=".$_REQUEST['routeid'];
+    $url = $APIurl."/json/routetrips?route_id=".filter_var($_REQUEST['routeid'],FILTER_SANITIZE_NUMBER_INT);
     $trips = json_decode(getPage($url));
-debug(print_r($trips,true));
-foreach ($trips as $trip)
+    debug(print_r($trips,true));
+    foreach ($trips as $trip)
          {
             if ($trip[0] < midnight_seconds()) {
                 $tripid = $trip[1];
@@ -19,6 +19,7 @@
 $trips = array_flatten(json_decode(getPage($url)));
 debug(print_r($trips,true));
 include_header("Stops on ". $trips[1]->route_short_name . ' '. $trips[1]->route_long_name);
+timePlaceSettings();
 echo '  <ul data-role="listview"  data-inset="true">';
 
 

--- a/busui/tripPlanner.php
+++ b/busui/tripPlanner.php
@@ -1,14 +1,16 @@
 <?php
   include('common.inc.php');
   include_header("Trip Planner", true, true);
+  $from = (isset($_REQUEST['from']) ? filter_var($_REQUEST['from'],FILTER_SANITIZE_STRING) : "Brigalow");
+      $to = (isset($_REQUEST['to']) ? filter_var($_REQUEST['to'],FILTER_SANITIZE_STRING) : "Barry");
+      $date = (isset($_REQUEST['date']) ? filter_var($_REQUEST['date'],FILTER_SANITIZE_STRING) : date("m/d/Y"));
+      $time = (isset($_REQUEST['time']) ? filter_var($_REQUEST['time'],FILTER_SANITIZE_STRING) : date("H:m"));
+      # todo: convert date from form to h:ia?
+
   function tripPlanForm($errorMessage = "")
   {
-      $from = (isset($_REQUEST['from']) ? $_REQUEST['from'] : "Brigalow");
-      $to = (isset($_REQUEST['to']) ? $_REQUEST['to'] : "Barry");
-      $date = (isset($_REQUEST['date']) ? $_REQUEST['date'] : date("m/d/Y"));
-      $time = (isset($_REQUEST['time']) ? $_REQUEST['time'] : date("H:m"));
-      # todo: convert date from form to h:ia?
-      echo "<font color=red>$errorMessage</font>";
+    global $date,$time,$from,$to;
+            echo "<font color=red>$errorMessage</font>";
       echo '<form action="tripPlanner.php" method="post">
     <div data-role="fieldcontain">
         <label for="from">I would like to go from</label>
@@ -86,17 +88,17 @@
   }
   
   if ($_REQUEST['time']) {
-      $toPlace = (startsWith($_REQUEST['to'], "-") ? $_REQUEST['to'] : geocode(urlencode($_REQUEST['to']), false));
-      $fromPlace = (startsWith($_REQUEST['from'], "-") ? $_REQUEST['from'] : geocode(urlencode($_REQUEST['from']), false));
+      $toPlace = (startsWith($to, "-") ? $to : geocode($to, false));
+      $fromPlace = (startsWith($from, "-") ? $from : geocode($from, false));
       if ($toPlace == "" || $fromPlace == "") {
           $errorMessage = "";
           if ($toPlace === "")
-              $errorMessage .= urlencode($_REQUEST['to']) . " not found.<br>\n";
+              $errorMessage .= urlencode($to) . " not found.<br>\n";
           if ($fromPlace === "")
-              $errorMessage .= urlencode($_REQUEST['from']) . " not found.<br>\n";
+              $errorMessage .= urlencode($from) . " not found.<br>\n";
           tripPlanForm($errorMessage);
       } else {
-          $url = "http://10.1.0.243:5080/opentripplanner-api-webapp/ws/plan?_dc=1290254798856&arriveBy=false&date=" . urlencode($_REQUEST['date']) . "&time=" . urlencode($_REQUEST['time']) . "&mode=TRANSIT%2CWALK&optimize=QUICK&maxWalkDistance=840&wheelchair=false&toPlace=$toPlace&fromPlace=$fromPlace&intermediatePlaces=";
+          $url = $otpAPIurl."ws/plan?date=" . urlencode($_REQUEST['date']) . "&time=" . urlencode($_REQUEST['time']) . "&mode=TRANSIT%2CWALK&optimize=QUICK&maxWalkDistance=840&wheelchair=false&toPlace=$toPlace&fromPlace=$fromPlace&intermediatePlaces=";
           $ch = curl_init($url);
           curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
           curl_setopt($ch, CURLOPT_HEADER, 0);

--- a/maxious-canberra-transit-feed/cbrtable.yml.in.in
+++ b/maxious-canberra-transit-feed/cbrtable.yml.in.in
@@ -5,6 +5,7 @@
   agency_name: ACT Internal Omnibus Network (ACTION)
   agency_url: http://www.action.act.gov.au/ 
   agency_timezone: Australia/Sydney
+  agency_phone: 131710
+  agency_lang: en
 
 
-