Beginnings of live trip view kml
Beginnings of live trip view kml

file:b/geo/trips.kml.php (new)
--- /dev/null
+++ b/geo/trips.kml.php
@@ -1,1 +1,51 @@
+<?php
+header('Content-Type: application/vnd.google-earth.kml+xml');
+include ('../include/common.inc.php');
+header('Content-Disposition: attachment; filename="trips.' . date('c') . '.kml"');
+$debugOkay = Array(); // disable debugging output even on dev server
+echo '<?xml version="1.0" encoding="UTF-8"?>
+<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom"><Document>';
+echo '
+      <Style id="ylw-pushpin">
+    <IconStyle>
+      <Icon>
+        <href>http://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png</href>
+        
+      </Icon>
+    </IconStyle>
+    
+  </Style>
+          <Style id="bus-pushpin">
+    <IconStyle>
+      <Icon>
+        <href>http://google-maps-icons.googlecode.com/files/bus.png</href>
+        
+      </Icon>
+    </IconStyle>
+    
+  </Style>
+          <Style id="grn-pushpin">
+    <IconStyle>
+      <Icon>
+        <href>http://maps.google.com/mapfiles/kml/pushpin/grn-pushpin.png</href>
+        
+      </Icon>
+    </IconStyle>
+  </Style>';
 
+foreach (getActiveTrips() as $trip) {
+    echo "\n<Placemark>\n";
+    $link = curPageURL() . '/../trip.php?tripid=' . htmlspecialchars($trip['trip_id']);
+    $lastStop = getTripLastStop($trip['trip_id']);
+    echo "<name>" . $lastStop[0]['arrival_time'] . " @ " . htmlspecialchars($lastStop[0]['stop_name']) . "</name>";
+    echo '<atom:link rel="related" href="' . $link . '"/>';
+    echo '<description><![CDATA[ <a href="' . $link . '">' . htmlspecialchars($lastStop[0]['stop_name']) . "</a>]]> </description>";
+    echo "<styleUrl>#bus-pushpin</styleUrl>";
+    echo "<Point><coordinates>" . $lastStop[0]['stop_lon'] . "," . $lastStop[0]['stop_lat'] . "</coordinates></Point>";
+
+    echo "</Placemark>\n";
+}
+echo "</Document></kml>\n";
+?>
+
+

--- a/include/common-auth.inc.php
+++ b/include/common-auth.inc.php
@@ -1,33 +1,32 @@
 <?php
-require $basePath.'lib/openid.php';
+
+require ROOT . '/../lib/openid.php';
 $openid = new LightOpenID($_SERVER['HTTP_HOST']);
- 
-function login()
-{
- global $openid;
- if(!$openid->mode) {
-    $openid->required = array('contact/email');
-            $openid->identity = 'https://www.google.com/accounts/o8/id';
-            header('Location: ' . $openid->authUrl());
- }
-    } 
+
+function login() {
+    global $openid;
+    if (!$openid->mode) {
+        $openid->required = array('contact/email');
+        $openid->identity = 'https://www.google.com/accounts/o8/id';
+        header('Location: ' . $openid->authUrl());
+    }
+}
+
+function auth() {
+    if ($_SESSION['authed'] == true)
+        return true;
+    global $openid;
+
+    if ($openid->mode) {
+        $attr = $openid->getAttributes();
+        if ($attr['contact/email'] != 'maxious@gmail.com') {
+            die('Access Denied');
+        } else {
+            $_SESSION['authed'] = true;
+        }
+    } else {
+        login();
+    }
+}
 
 
-function auth()
-
-{
-  if ($_SESSION['authed'] == true) return true;
- global $openid;
-  
-  if($openid->mode) {
-      $attr = $openid->getAttributes();
-        if ($attr["contact/email"] != "maxious@gmail.com") {
-            die("Access Denied");
-             } else {
-               $_SESSION['authed'] = true;
-             }
-        } else {
-        login();
-         } 
-    } 
-

--- a/include/common-db.inc.php
+++ b/include/common-db.inc.php
@@ -3,31 +3,31 @@
 /*
  *    Copyright 2010,2011 Alexander Sadleir 
 
-  Licensed under the Apache License, Version 2.0 (the "License");
+  Licensed under the Apache License, Version 2.0 (the 'License');
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at
 
   http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
+  distributed under the License is distributed on an 'AS IS' BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
  */
-if (strstr(php_uname('n'),"actbus")) {
-    $conn = new PDO("pgsql:dbname=transitdata;user=transitdata;password=transitdata;host=bus-main.lambdacomplex.org");
+if (strstr(php_uname('n'),'actbus')) {
+    $conn = new PDO('pgsql:dbname=transitdata;user=transitdata;password=transitdata;host=bus-main.lambdacomplex.org');
 } else if (isDebugServer()) {
-    $conn = new PDO("pgsql:dbname=transitdata;user=postgres;password=snmc;host=localhost");
+    $conn = new PDO('pgsql:dbname=transitdata;user=postgres;password=snmc;host=localhost');
 } else {
-    $conn = new PDO("pgsql:dbname=transitdata;user=transitdata;password=transitdata;host=localhost");
+    $conn = new PDO('pgsql:dbname=transitdata;user=transitdata;password=transitdata;host=localhost');
 }
 if (!$conn) {
-    die("A database error occurred.\n");
+    die('A database error occurred.'.PHP_EOL);
 }
 
 function databaseError($errMsg) {
-    if ($errMsg[1] != "") {
+    if ($errMsg[1] != '') {
     die(print_r($errMsg,true));
     }
 }

--- a/include/common-geo.inc.php
+++ b/include/common-geo.inc.php
@@ -3,64 +3,66 @@
 /*
  *    Copyright 2010,2011 Alexander Sadleir 
 
-  Licensed under the Apache License, Version 2.0 (the "License");
+  Licensed under the Apache License, Version 2.0 (the 'License');
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at
 
   http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
+  distributed under the License is distributed on an 'AS IS' BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
  */
 // 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");
+$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');
 
 function staticmap($mapPoints, $collapsible = true, $twotone = false, $path = false, $numbered = false) {
 
-    $markers = "";
+    $markers = '';
     $height = 300;
     $width = $height;
     $index = 0;
     if (sizeof($mapPoints) < 1)
-        return "map error";
+        return 'map error';
     if (sizeof($mapPoints) === 1) {
-        $markers = "markers={$mapPoints[0][0]},{$mapPoints[0][1]}";
+        $markers = 'markers={$mapPoints[0][0]},{$mapPoints[0][1]}';
     } else {
         if (!$numbered) {
-            $markers = "markers=";
+            $markers = 'markers=';
         }
         if ($path) {
-            $markers.= "markers={$mapPoints[0][0]},{$mapPoints[0][1]}&amp;path=";
+            $markers.= 'markers={$mapPoints[0][0]},{$mapPoints[0][1]}&amp;path=';
         }
         foreach ($mapPoints as $index => $mapPoint) {
             if ($twotone && $index == 0) {
-                $markers = "markerd=color:red|".$mapPoint[0] . "," . $mapPoint[1]."&amp;markers=";
+                $markers = 'markerd=color:red|' . $mapPoint[0] . ',' . $mapPoint[1] . '&amp;markers=';
             } else {
                 if ($numbered) {
                     $label = ($index > 9 ? 9 : $index);
-                    $markers.= "markers=label:$label|" . $mapPoint[0] . "," . $mapPoint[1];
+                    $markers.= 'markers=label:' . $label . '|' . $mapPoint[0] . ',' . $mapPoint[1];
                     if ($index + 1 != sizeof($mapPoints)) {
-                        $markers.= "&amp;";
+                        $markers.= '&amp;';
                     }
                 } else {
-                    $markers.= $mapPoint[0] . "," . $mapPoint[1];
+                    $markers.= $mapPoint[0] . ',' . $mapPoint[1];
                     if ($index + 1 != sizeof($mapPoints)) {
-                        $markers.= "|";
+                        $markers.= '|';
                     }
                 }
                 $index++;
             }
         }
     }
-    $output = "";
+    $output = '';
     if ($collapsible)
         $output.= '<div class="map" data-role="collapsible" data-collapsed="true"><h3>Open Map...</h3>';
-   if (isIOSDevice()) $output.= '<img class="hiresmap" src="http://maps.googleapis.com/maps/api/staticmap?size=' . $width . 'x' . $height . '&amp;' . $markers . '&amp;scale=2&amp;sensor=true" width=' . $width . ' height=' . $height . ' alt="map of stop location">';
- else $output.= '<img class="lowresmap" src="http://maps.googleapis.com/maps/api/staticmap?size=' . $width . 'x' . $height . '&amp;' . $markers . '&amp;scale=1&amp;format=jpg&amp;sensor=true" width=' . $width . ' height=' . $height . ' alt="map of stop location">';
-   
+    if (isIOSDevice())
+        $output.= '<img class="hiresmap" src="http://maps.googleapis.com/maps/api/staticmap?size=' . $width . 'x' . $height . '&amp;' . $markers . '&amp;scale=2&amp;sensor=true" width=' . $width . ' height=' . $height . '" alt="map of stop location">';
+    else
+        $output.= '<img class="lowresmap" src="http://maps.googleapis.com/maps/api/staticmap?size=' . $width . 'x' . $height . '&amp;' . $markers . '&amp;scale=1&amp;format=jpg&amp;sensor=true" width=' . $width . ' height=' . $height . '" alt="map of stop location">';
+
     if ($collapsible)
         $output.= '</div>';
     return $output;
@@ -82,7 +84,7 @@
         if ($km < 1)
             return floor($km * 1000);
         else
-            return round($km, 2) . "k";
+            return round($km, 2) . 'k';
     }
     else
         return floor($km * 1000);
@@ -151,19 +153,19 @@
 
 function geocode($query, $giveOptions) {
     global $cloudmadeAPIkey;
-    $url = "http://geocoding.cloudmade.com/$cloudmadeAPIkey/geocoding/v2/find.js?query=" . urlencode($query) . "&bbox=-35.5,149.00,-35.15,149.1930&return_location=true&bbox_only=true";
+    $url = 'http://geocoding.cloudmade.com/$cloudmadeAPIkey/geocoding/v2/find.js?query=' . urlencode($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];
+        return $contents->features[0]->centroid->coordinates[0] . ',' . $contents->features[0]->centroid->coordinates[1];
     else
-        return "";
+        return '';
 }
 
 function reverseGeocode($lat, $lng) {
     global $cloudmadeAPIkey;
-    $url = "http://geocoding.cloudmade.com/$cloudmadeAPIkey/geocoding/v2/find.js?around=" . $lat . "," . $lng . "&distance=closest&object_type=road";
+    $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;
 }

--- a/include/common-net.inc.php
+++ b/include/common-net.inc.php
@@ -3,43 +3,44 @@
 /*
  *    Copyright 2010,2011 Alexander Sadleir 
 
-  Licensed under the Apache License, Version 2.0 (the "License");
+  Licensed under the Apache License, Version 2.0 (the 'License');
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at
 
   http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
+  distributed under the License is distributed on an 'AS IS' BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
  */
 
 function getPage($url) {
-    debug($url, "json");
+    debug($url, 'json');
     $ch = curl_init($url);
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
     curl_setopt($ch, CURLOPT_HEADER, 0);
     curl_setopt($ch, CURLOPT_TIMEOUT, 45);
     $page = curl_exec($ch);
     if (curl_errno($ch)) {
-        echo "<font color=red> Database temporarily unavailable: ";
-        echo curl_errno($ch) . " " . curl_error($ch);
+        echo '<font color=red> Database temporarily unavailable: ';
+        echo curl_errno($ch) . ' ' . curl_error($ch);
         if (isDebug()) {
             echo $url;
         }
-        echo "</font><br>";
+        echo '</font><br>';
     }
     curl_close($ch);
-    debug(print_r($page, true), "json");
+    debug(print_r($page, true), 'json');
     return $page;
 }
+
 function curPageURL() {
-    $isHTTPS = (isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] == "on");
-    $port = (isset($_SERVER["SERVER_PORT"]) && ((!$isHTTPS && $_SERVER["SERVER_PORT"] != "80") || ($isHTTPS && $_SERVER["SERVER_PORT"] != "443")));
-    $port = ($port) ? ':' . $_SERVER["SERVER_PORT"] : '';
-    $url = ($isHTTPS ? 'https://' : 'http://') . $_SERVER["SERVER_NAME"] . $port . htmlentities(dirname($_SERVER['PHP_SELF']), ENT_QUOTES);
+    $isHTTPS = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on');
+    $port = (isset($_SERVER['SERVER_PORT']) && ((!$isHTTPS && $_SERVER['SERVER_PORT'] != '80') || ($isHTTPS && $_SERVER['SERVER_PORT'] != '443')));
+    $port = ($port) ? ':' . $_SERVER['SERVER_PORT'] : '';
+    $url = ($isHTTPS ? 'https://' : 'http://') . $_SERVER['SERVER_NAME'] . $port . htmlentities(dirname($_SERVER['PHP_SELF']), ENT_QUOTES);
     return $url;
 }
 

--- a/include/common-session.inc.php
+++ b/include/common-session.inc.php
@@ -3,33 +3,33 @@
 /*
  *    Copyright 2010,2011 Alexander Sadleir 
 
-  Licensed under the Apache License, Version 2.0 (the "License");
+  Licensed under the Apache License, Version 2.0 (the 'License');
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at
 
   http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
+  distributed under the License is distributed on an 'AS IS' BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
  */
 // you have to open the session to be able to modify or remove it
 session_start();
-if (isset($_REQUEST['geolocate']) && $_REQUEST['geolocate'] != "Enter co-ordinates or address here") {
+if (isset($_REQUEST['geolocate']) && $_REQUEST['geolocate'] != 'Enter co-ordinates or address here') {
     $geocoded = false;
     if (isset($_REQUEST['lat']) && isset($_REQUEST['lon'])) {
         $_SESSION['lat'] = trim(filter_var($_REQUEST['lat'], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION));
         $_SESSION['lon'] = trim(filter_var($_REQUEST['lon'], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION));
     } else {
-        if (startsWith($geolocate, "-")) {
-            $locateparts = explode(",", $geolocate);
+        if (startsWith($geolocate, '-')) {
+            $locateparts = explode(',', $geolocate);
             $_SESSION['lat'] = $locateparts[0];
             $_SESSION['lon'] = $locateparts[1];
-        } else if (strpos($geolocate, "(") !== false) {
-            $geoParts = explode("(", $geolocate);
-            $locateparts = explode(",", str_replace(")", "", $geoParts[1]));
+        } else if (strpos($geolocate, '(') !== false) {
+            $geoParts = explode('(', $geolocate);
+            $locateparts = explode(',', str_replace(')', '', $geoParts[1]));
             $_SESSION['lat'] = $locateparts[0];
             $_SESSION['lon'] = $locateparts[1];
         } else {
@@ -40,8 +40,8 @@
                 $_SESSION['lat'] = $contents[0]->centroid->coordinates[0];
                 $_SESSION['lon'] = $contents[0]->centroid->coordinates[1];
             } else {
-                $_SESSION['lat'] = "";
-                $_SESSION['lon'] = "";
+                $_SESSION['lat'] = '';
+                $_SESSION['lon'] = '';
             }
         }
     }
@@ -55,16 +55,19 @@
 // timeoutSession
 $TIMEOUT_LIMIT = 60 * 5; // 5 minutes
 if (isset($_SESSION['lastUpdated']) && $_SESSION['lastUpdated'] + $TIMEOUT_LIMIT < time()) {
-    debug("Session timeout " . ($_SESSION['lastUpdated'] + $TIMEOUT_LIMIT) . ">" . time(), "session");
+    debug('Session timeout ' . ($_SESSION['lastUpdated'] + $TIMEOUT_LIMIT) . '>' . time(), 'session');
     session_destroy();
     session_start();
 }
 
-//debug(print_r($_SESSION, true) , "session");
-function current_time($time = "") {
-    if (isset($_REQUEST['time'])) return $_REQUEST['time'];
-    else if ($time != "") date("H:i:s",$time);
-    else return date("H:i:s");
+//debug(print_r($_SESSION, true) , 'session');
+function current_time($time = '') {
+    if (isset($_REQUEST['time']))
+        return $_REQUEST['time'];
+    else if ($time != '')
+        date('H:i:s', $time);
+    else
+        return date('H:i:s');
 }
 
 

--- a/include/common-template.inc.php
+++ b/include/common-template.inc.php
@@ -54,7 +54,7 @@
 <link rel="dns-prefetch" href="//code.jquery.com">
 <link rel="dns-prefetch" href="//ajax.googleapis.com">
 	<link rel="stylesheet"  href="' . $basePath . 'css/jquery-ui-1.8.12.custom.css" />';
-    $jqmVersion = "1.0.1";
+    $jqmVersion = "1.1.0-rc.1";
     if (isDebugServer()) {
         $jqmcss = $basePath . "css/jquery.mobile-$jqmVersion.css";
         $jqjs = $basePath . "js/jquery-1.6.4.min.js";
@@ -64,7 +64,7 @@
         $jqmjs = $basePath . "js/jquery.mobile-b90eab4935.js";
     } else {
         $jqmcss = "//code.jquery.com/mobile/$jqmVersion/jquery.mobile-$jqmVersion.min.css";
-        $jqjs = "//ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js";
+        $jqjs = "//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js";
         $jqmjs = "//code.jquery.com/mobile/$jqmVersion/jquery.mobile-$jqmVersion.min.js";
     }
     echo '<link rel="stylesheet"  href="' . $jqmcss . '" />

--- a/include/common-transit.inc.php
+++ b/include/common-transit.inc.php
@@ -3,14 +3,14 @@
 /*
  *    Copyright 2010,2011 Alexander Sadleir 
 
-  Licensed under the Apache License, Version 2.0 (the "License");
+  Licensed under the Apache License, Version 2.0 (the 'License');
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at
 
   http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
+  distributed under the License is distributed on an 'AS IS' BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
@@ -21,7 +21,7 @@
     'weekday'
 );
 
-function service_period($date = "") {
+function service_period($date = '') {
 
     if (isset($_REQUEST['service_period'])) {
         return $_REQUEST['service_period'];
@@ -31,7 +31,7 @@
     if (isset($override['service_id'])) {
         return strtolower($override['service_id']);
     }
-    $date = ($date != "" ? $date : time());
+    $date = ($date != '' ? $date : time());
     $dow = date('w', $date);
 
     switch ($dow) {
@@ -44,92 +44,92 @@
     }
 }
 
-function service_ids($service_period, $date = "") {
+function service_ids($service_period, $date = '') {
     switch ($service_period) {
         case 'sunday':
-            return Array("Sunday", "Sunday");
+            return Array('Sunday', 'Sunday');
         case 'saturday':
-            return Array("Saturday", "Saturday");
+            return Array('Saturday', 'Saturday');
         default:
-            $date = ($date != "" ? $date : time());
+            $date = ($date != '' ? $date : time());
 // school holidays
             $ymd = date('Ymd', $date);
             $dow = date('w', $date);
-            if (intval($ymd) < "20120203" && $dow != 0 && $dow != 6) {
-                return Array("Weekday-SchoolVacation", "Weekday-SchoolVacation");
+            if (intval($ymd) < '20120203' && $dow != 0 && $dow != 6) {
+                return Array('Weekday-SchoolVacation', 'Weekday-SchoolVacation');
             } else {
-                return Array("Weekday", "Weekday");
+                return Array('Weekday', 'Weekday');
             }
     }
 }
 
 function valid_service_ids() {
-    return array_merge(service_ids(""), service_ids('saturday'), service_ids('sunday'));
-}
-
-function midnight_seconds($time = "") {
+    return array_merge(service_ids(''), service_ids('saturday'), service_ids('sunday'));
+}
+
+function midnight_seconds($time = '') {
     // from http://www.perturb.org/display/Perlfunc__Seconds_Since_Midnight.html
-    if ($time != "") {
-        return (date("G", $time) * 3600) + (date("i", $time) * 60) + date("s", $time);
+    if ($time != '') {
+        return (date('G', $time) * 3600) + (date('i', $time) * 60) + date('s', $time);
     }
     if (isset($_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");
+        return (date('G', $time) * 3600) + (date('i', $time) * 60) + date('s', $time);
+    }
+    return (date('G') * 3600) + (date('i') * 60) + date('s');
 }
 
 function midnight_seconds_to_time($seconds) {
     if ($seconds > 0) {
-        $midnight = mktime(0, 0, 0, date("n"), date("j"), date("Y"));
-        return date("h:ia", $midnight + $seconds);
+        $midnight = mktime(0, 0, 0, date('n'), date('j'), date('Y'));
+        return date('h:ia', $midnight + $seconds);
     } else {
-        return "";
+        return '';
     }
 }
 
 if ($GTFSREnabled) {
     $serviceAlertCause = Array(
-        "UNKNOWN_CAUSE" => "Unknown cause",
-        "OTHER_CAUSE" => "Other cause",
-        "TECHNICAL_PROBLEM" => "Technical problem",
-        "STRIKE" => "Strike",
-        "DEMONSTRATION" => "Demonstration",
-        "ACCIDENT" => "Accident",
-        "HOLIDAY" => "Holiday",
-        "WEATHER" => "Weather",
-        "MAINTENANCE" => "Maintenance",
-        "CONSTRUCTION" => "Construction",
-        "POLICE_ACTIVITY" => "Police activity",
-        "MEDICAL_EMERGENCY" => "Medical emergency"
+        'UNKNOWN_CAUSE' => 'Unknown cause',
+        'OTHER_CAUSE' => 'Other cause',
+        'TECHNICAL_PROBLEM' => 'Technical problem',
+        'STRIKE' => 'Strike',
+        'DEMONSTRATION' => 'Demonstration',
+        'ACCIDENT' => 'Accident',
+        'HOLIDAY' => 'Holiday',
+        'WEATHER' => 'Weather',
+        'MAINTENANCE' => 'Maintenance',
+        'CONSTRUCTION' => 'Construction',
+        'POLICE_ACTIVITY' => 'Police activity',
+        'MEDICAL_EMERGENCY' => 'Medical emergency'
     );
     $serviceAlertEffect = Array(
-        "NO_SERVICE" => "No service",
-        "REDUCED_SERVICE" => "Reduced service",
-        "SIGNIFICANT_DELAYS" => "Significant delays",
-        "DETOUR" => "Detour",
-        "ADDITIONAL_SERVICE" => "Additional service",
-        "MODIFIED_SERVICE" => "Modified service",
-        "OTHER_EFFECT" => "Other effect",
-        "UNKNOWN_EFFECT" => "Unknown effect",
-        "STOP_MOVED" => "Stop moved");
-
-    set_include_path(get_include_path() . PATH_SEPARATOR . ($basePath . "lib/Protobuf-PHP/library/DrSlump/"));
-
-    include_once("Protobuf.php");
-    include_once("Protobuf/Message.php");
-    include_once("Protobuf/Registry.php");
-    include_once("Protobuf/Descriptor.php");
-    include_once("Protobuf/Field.php");
-
-    include_once($basePath . "lib/Protobuf-PHP/gtfs-realtime.php");
-    include_once("Protobuf/CodecInterface.php");
-    include_once("Protobuf/Codec/PhpArray.php");
-    include_once("Protobuf/Codec/Binary.php");
-    include_once("Protobuf/Codec/Binary/Writer.php");
-    include_once("Protobuf/Codec/Json.php");
-
-    function getServiceAlerts($filter_class = "", $filter_id = "") {
+        'NO_SERVICE' => 'No service',
+        'REDUCED_SERVICE' => 'Reduced service',
+        'SIGNIFICANT_DELAYS' => 'Significant delays',
+        'DETOUR' => 'Detour',
+        'ADDITIONAL_SERVICE' => 'Additional service',
+        'MODIFIED_SERVICE' => 'Modified service',
+        'OTHER_EFFECT' => 'Other effect',
+        'UNKNOWN_EFFECT' => 'Unknown effect',
+        'STOP_MOVED' => 'Stop moved');
+
+    set_include_path(get_include_path() . PATH_SEPARATOR . (ROOT. '/../lib/Protobuf-PHP/library/DrSlump/'));
+
+    include_once('Protobuf.php');
+    include_once('Protobuf/Message.php');
+    include_once('Protobuf/Registry.php');
+    include_once('Protobuf/Descriptor.php');
+    include_once('Protobuf/Field.php');
+
+    include_once(ROOT. '/../lib/Protobuf-PHP/gtfs-realtime.php');
+    include_once('Protobuf/CodecInterface.php');
+    include_once('Protobuf/Codec/PhpArray.php');
+    include_once('Protobuf/Codec/Binary.php');
+    include_once('Protobuf/Codec/Binary/Writer.php');
+    include_once('Protobuf/Codec/Json.php');
+
+    function getServiceAlerts($filter_class = '', $filter_id = '') {
         /*
 
           also need last modified epoch of client gtfs
@@ -176,16 +176,16 @@
 	$informed_count++;
                     $informed = Array();
                     $es = new transit_realtime\EntitySelector();
-                    if ($informedEntity['informed_class'] == "agency") {
+                    if ($informedEntity['informed_class'] == 'agency') {
                         $es->setAgencyId($informedEntity['informed_id']);
                     }
-                    if ($informedEntity['informed_class'] == "stop") {
+                    if ($informedEntity['informed_class'] == 'stop') {
                         $es->setStopId($informedEntity['informed_id']);
                     }
-                    if ($informedEntity['informed_class'] == "route") {
+                    if ($informedEntity['informed_class'] == 'route') {
                         $es->setRouteId($informedEntity['informed_id']);
                     }
-                    if ($informedEntity['informed_class'] == "trip") {
+                    if ($informedEntity['informed_class'] == 'trip') {
                         $td = new transit_realtime\TripDescriptor();
                         $td->setTripId($informedEntity['informed_id']);
                         $es->setTrip($td);
@@ -193,33 +193,33 @@
                     $alert->addInformedEntity($es);
 }
                 }
-                if ($current_alert['cause'] != "") {
-                    $alert->setCause(constant("transit_realtime\Alert\Cause::" . $current_alert['cause']));
-                }
-                if ($current_alert['effect'] != "") {
-                    $alert->setEffect(constant("transit_realtime\Alert\Effect::" . $current_alert['effect']));
-                }
-                if ($current_alert['url'] != "") {
+                if ($current_alert['cause'] != '') {
+                    $alert->setCause(constant('transit_realtime\Alert\Cause::' . $current_alert['cause']));
+                }
+                if ($current_alert['effect'] != '') {
+                    $alert->setEffect(constant('transit_realtime\Alert\Effect::' . $current_alert['effect']));
+                }
+                if ($current_alert['url'] != '') {
                     $tsUrl = new transit_realtime\TranslatedString();
                     $tUrl = new transit_realtime\TranslatedString\Translation();
                     $tUrl->setText($current_alert['url']);
-                    $tUrl->setLanguage("en");
+                    $tUrl->setLanguage('en');
                     $tsUrl->addTranslation($tUrl);
                     $alert->setUrl($tsUrl);
                 }
-                if ($current_alert['header'] != "") {
+                if ($current_alert['header'] != '') {
                     $tsHeaderText = new transit_realtime\TranslatedString();
                     $tHeaderText = new transit_realtime\TranslatedString\Translation();
                     $tHeaderText->setText($current_alert['header']);
-                    $tHeaderText->setLanguage("en");
+                    $tHeaderText->setLanguage('en');
                     $tsHeaderText->addTranslation($tHeaderText);
                     $alert->setHeaderText($tsHeaderText);
                 }
-                if ($current_alert['description'] != "") {
+                if ($current_alert['description'] != '') {
                     $tsDescriptionText = new transit_realtime\TranslatedString();
                     $tDescriptionText = new transit_realtime\TranslatedString\Translation();
                     $tDescriptionText->setText(trim($current_alert['description']));
-                    $tDescriptionText->setLanguage("en");
+                    $tDescriptionText->setLanguage('en');
                     $tsDescriptionText->addTranslation($tDescriptionText);
                     $alert->setDescriptionText($tsDescriptionText);
                 }
@@ -237,7 +237,7 @@
             return null;
     }
 
-    function getServiceAlertsAsArray($filter_class = "", $filter_id = "") {
+    function getServiceAlertsAsArray($filter_class = '', $filter_id = '') {
 
         $alerts = getServiceAlerts($filter_class, $filter_id);
         if ($alerts != null) {
@@ -249,23 +249,23 @@
         }
     }
 
-    function getServiceAlertsAsBinary($filter_class = "", $filter_id = "") {
+    function getServiceAlertsAsBinary($filter_class = '', $filter_id = '') {
         $codec = new DrSlump\Protobuf\Codec\Binary();
         return $codec->encode(getServiceAlerts($filter_class, $filter_id));
     }
 
-    function getServiceAlertsAsJSON($filter_class = "", $filter_id = "") {
+    function getServiceAlertsAsJSON($filter_class = '', $filter_id = '') {
         $codec = new DrSlump\Protobuf\Codec\Json();
         return $codec->encode(getServiceAlerts($filter_class, $filter_id));
     }
 
     function getServiceAlertsByClass() {
         $return = Array();
-        $alerts = getServiceAlertsAsArray("", "");
+        $alerts = getServiceAlertsAsArray('', '');
         foreach ($alerts['entities'] as $entity) {
             foreach ($entity['informed'] as $informed) {
                 foreach ($informed as $key => $value) {
-                    if (strpos("_id", $key) > 0) {
+                    if (strpos('_id', $key) > 0) {
                         $parts = explode($key);
                         $class = $parts[0];
                         $id = $value;
@@ -276,7 +276,7 @@
         }
     }
 
-    function getTripUpdates($filter_class = "", $filter_id = "") {
+    function getTripUpdates($filter_class = '', $filter_id = '') {
         $fm = new transit_realtime\FeedMessage();
         $fh = new transit_realtime\FeedHeader();
         $fh->setGtfsRealtimeVersion(1);
@@ -287,12 +287,12 @@
             $stops = Array();
             $routestrips = Array();
             if (sizeof($informedEntities) > 0) {
-                if ($informedEntity['informed_class'] == "stop" && $informed["x-action"] == "remove") {
+                if ($informedEntity['informed_class'] == 'stop' && $informed['x-action'] == 'remove') {
                     $stops[] = $informedEntity['informed_id'];
                 }
-                if (($informedEntity['informed_class'] == "route" || $informedEntity['informed_class'] == "trip") && $informed["x-action"] == "patch") {
-                    $routestrips[] = Array("id" => $informedEntity['informed_id'],
-                        "type" => $informedEntity['informed_class']);
+                if (($informedEntity['informed_class'] == 'route' || $informedEntity['informed_class'] == 'trip') && $informed['x-action'] == 'patch') {
+                    $routestrips[] = Array('id' => $informedEntity['informed_id'],
+                        'type' => $informedEntity['informed_class']);
                 }
             }
             foreach ($routestrips as $routetrip) {
@@ -301,9 +301,9 @@
                 $fe->setIsDeleted(false);
                 $tu = new transit_realtime\TripUpdate();
                 $td = new transit_realtime\TripDescriptor();
-                if ($routetrip['type'] == "route") {
+                if ($routetrip['type'] == 'route') {
                     $td->setRouteId($routetrip['id']);
-                } else if ($routetrip['type'] == "trip") {
+                } else if ($routetrip['type'] == 'trip') {
                     $td->setTripId($routetrip['id']);
                 }
                 $tu->setTrip($td);
@@ -320,17 +320,17 @@
         return $fm;
     }
 
-    function getTripUpdatesAsArray($filter_class = "", $filter_id = "") {
+    function getTripUpdatesAsArray($filter_class = '', $filter_id = '') {
         $codec = new DrSlump\Protobuf\Codec\PhpArray();
         return $codec->encode(getTripUpdates($filter_class, $filter_id));
     }
 
-    function getTripUpdatesAsBinary($filter_class = "", $filter_id = "") {
+    function getTripUpdatesAsBinary($filter_class = '', $filter_id = '') {
         $codec = new DrSlump\Protobuf\Codec\Binary();
         return $codec->encode(getTripUpdates($filter_class, $filter_id));
     }
 
-    function getTripUpdatesAsJSON($filter_class = "", $filter_id = "") {
+    function getTripUpdatesAsJSON($filter_class = '', $filter_id = '') {
         $codec = new DrSlump\Protobuf\Codec\Json();
         return $codec->encode(getTripUpdates($filter_class, $filter_id));
     }

--- a/include/common.inc.php
+++ b/include/common.inc.php
@@ -3,14 +3,14 @@
 /*
  *    Copyright 2010,2011 Alexander Sadleir 
 
-  Licensed under the Apache License, Version 2.0 (the "License");
+  Licensed under the Apache License, Version 2.0 (the 'License');
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at
 
   http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
+  distributed under the License is distributed on an 'AS IS' BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
@@ -18,34 +18,35 @@
 
 date_default_timezone_set('Australia/ACT');
 $debugOkay = Array(
-    "session",
-    "json",
-    "phperror",
-    "awsotp",
-    //"squallotp",
-    //"vanilleotp",
-    "database",
-    "other"
+    'session',
+    'json',
+    'phperror',
+    'awsotp',
+    //'squallotp',
+    //'vanilleotp',
+    'database',
+    'other'
 );
 $GTFSREnabled = true;
-$cloudmadeAPIkey = "daa03470bb8740298d4b10e3f03d63e6";
-$googleMapsAPIkey = "ABQIAAAA95XYXN0cki3Yj_Sb71CFvBTPaLd08ONybQDjcH_VdYtHHLgZvRTw2INzI_m17_IoOUqH3RNNmlTk1Q";
+$cloudmadeAPIkey = 'daa03470bb8740298d4b10e3f03d63e6';
+$googleMapsAPIkey = 'ABQIAAAA95XYXN0cki3Yj_Sb71CFvBTPaLd08ONybQDjcH_VdYtHHLgZvRTw2INzI_m17_IoOUqH3RNNmlTk1Q';
 $otpAPIurl = 'http://localhost:8080/opentripplanner-api-webapp/';
-if (isDebug("awsotp") || php_uname('n') == "maxious.xen.prgmr.com" || strstr(php_uname('n'),"actbus")) {
+if (isDebug('awsotp') || php_uname('n') == 'maxious.xen.prgmr.com' || strstr(php_uname('n'),'actbus')) {
     $otpAPIurl = 'http://bus-main.lambdacomplex.org:8080/opentripplanner-api-webapp/';
 }
-if (isDebug("dotcloudotp") || php_uname('n') == "actbus-www") {
+if (isDebug('dotcloudotp') || php_uname('n') == 'actbus-www') {
     $otpAPIurl = 'http://otp.actbus.dotcloud.com/opentripplanner-api-webapp/';
 }
-if (isDebug("squallotp")) {
+if (isDebug('squallotp')) {
     $otpAPIurl = 'http://10.0.1.108:5080/opentripplanner-api-webapp/';
 }
-if (isDebug("vanilleotp")) {
+if (isDebug('vanilleotp')) {
     $otpAPIurl = 'http://10.0.1.135:8080/opentripplanner-api-webapp/';
 }
-if (isDebug("phperror"))
+if (isDebug('phperror'))
     error_reporting(E_ALL ^ E_NOTICE);
-$basePath = "";
+
+define('ROOT' , pathinfo(__FILE__, PATHINFO_DIRNAME));
 if (strstr($_SERVER['PHP_SELF'], "labs/")
         || strstr($_SERVER['PHP_SELF'], "myway/")
         || strstr($_SERVER['PHP_SELF'], "lib/")
@@ -57,27 +58,27 @@
 
 function isDebugServer() {
     
-    return php_sapi_name() == "cli" || strstr(php_uname('n'),"actbus") || isset($_SERVER['SERVER_NAME']) && ( $_SERVER['SERVER_NAME'] == "azusa" || $_SERVER['SERVER_NAME'] == "vanille"
-            || $_SERVER['SERVER_NAME'] == "localhost" || $_SERVER['SERVER_NAME'] == "127.0.0.1" ||  $_SERVER['SERVER_NAME'] == "192.168.1.8" || $_SERVER['SERVER_NAME'] == "192.168.178.24");
-}
-
-if (isset($_SERVER['SERVER_NAME'])  && $_SERVER['SERVER_NAME'] == "maxious.xen.prgmr.com") {
+    return php_sapi_name() == 'cli' || strstr(php_uname('n'),'actbus') || isset($_SERVER['SERVER_NAME']) && ( $_SERVER['SERVER_NAME'] == 'azusa' || $_SERVER['SERVER_NAME'] == 'vanille'
+            || $_SERVER['SERVER_NAME'] == 'localhost' || $_SERVER['SERVER_NAME'] == '127.0.0.1' ||  $_SERVER['SERVER_NAME'] == '192.168.1.8' || $_SERVER['SERVER_NAME'] == '192.168.178.24');
+}
+
+if (isset($_SERVER['SERVER_NAME'])  && $_SERVER['SERVER_NAME'] == 'maxious.xen.prgmr.com') {
 // Set the exception handler
-require $basePath."/lib/amon-php/amon.php";
+require ROOT.'../lib/amon-php/amon.php';
 Amon::setup_exception_handler();
 }
 
-include_once ("common-geo.inc.php");
-include_once ("common-net.inc.php");
-include_once ("common-transit.inc.php");
-if (!strstr($_SERVER['PHP_SELF'], "feedback")) {
-	include_once ("common-db.inc.php");
-}
-
-include_once ("common-request.inc.php");
-include_once ("common-session.inc.php");
-include_once ("common-auth.inc.php");
-include_once ("common-template.inc.php");
+include_once ('common-geo.inc.php');
+include_once ('common-net.inc.php');
+include_once ('common-transit.inc.php');
+if (!strstr($_SERVER['PHP_SELF'], 'feedback')) {
+	include_once ('common-db.inc.php');
+}
+
+include_once ('common-request.inc.php');
+include_once ('common-session.inc.php');
+include_once ('common-auth.inc.php');
+include_once ('common-template.inc.php');
 
 function isAnalyticsOn() {
     $user_agent = $_SERVER['HTTP_USER_AGENT'];
@@ -85,14 +86,14 @@
             !preg_match('/baidu/i', $user_agent);
 }
 
-function isDebug($debugReason = "other") {
+function isDebug($debugReason = 'other') {
     global $debugOkay;
     return in_array($debugReason, $debugOkay, false) && isDebugServer();
 }
 
-function debug($msg, $debugReason = "other") {
+function debug($msg, $debugReason = 'other') {
     if (isDebug($debugReason))
-        echo "\n<!-- " . date(DATE_RFC822) . "\n $msg -->\n";
+        echo PHP_EOL.'<!-- ' . date(DATE_RFC822) . PHP_EOL.$msg.PHP_EOL.' -->'.PHP_EOL;
 }
 function isIOSDevice() {
    return strstr($_SERVER['HTTP_USER_AGENT'], 'iPhone') || strstr($_SERVER['HTTP_USER_AGENT'], 'iPod') || strstr($_SERVER['HTTP_USER_AGENT'], 'iPad');
@@ -145,7 +146,7 @@
     return (strcasecmp(substr($haystack, strlen($haystack) - strlen($needle)), $needle) === 0);
 }
 
-function sksort(&$array, $subkey = "id", $sort_ascending = false) {
+function sksort(&$array, $subkey = 'id', $sort_ascending = false) {
     if (count($array))
         $temp_array[key($array)] = array_shift($array);
     foreach ($array as $key => $val) {
@@ -171,7 +172,7 @@
         $array = $temp_array;
 }
 
-function sktimesort(&$array, $subkey = "id", $sort_ascending = false) {
+function sktimesort(&$array, $subkey = 'id', $sort_ascending = false) {
     if (count($array))
         $temp_array[key($array)] = array_shift($array);
     foreach ($array as $key => $val) {

--- a/include/db/route-dao.inc.php
+++ b/include/db/route-dao.inc.php
@@ -3,14 +3,14 @@
 /*
  *    Copyright 2010,2011 Alexander Sadleir 
 
-  Licensed under the Apache License, Version 2.0 (the "License");
+  Licensed under the Apache License, Version 2.0 (the 'License');
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at
 
   http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
+  distributed under the License is distributed on an 'AS IS' BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
@@ -18,10 +18,10 @@
 
 function getRoute($routeID) {
     global $conn;
-    $query = "Select * from routes where route_id = :routeID LIMIT 1";
-    debug($query, "database");
-    $query = $conn->prepare($query);
-    $query->bindParam(":routeID", $routeID);
+    $query = 'Select * from routes where route_id = :routeID LIMIT 1';
+    debug($query, 'database');
+    $query = $conn->prepare($query);
+    $query->bindParam(':routeID', $routeID);
     $query->execute();
     if (!$query) {
         databaseError($conn->errorInfo());
@@ -32,10 +32,10 @@
 
 function getRoutesByShortName($routeShortName) {
     global $conn;
-    $query = "Select distinct route_id, route_short_name from routes where route_short_name = :routeShortName";
-    debug($query, "database");
-    $query = $conn->prepare($query);
-    $query->bindParam(":routeShortName", $routeShortName);
+    $query = 'Select distinct route_id, route_short_name from routes where route_short_name = :routeShortName';
+    debug($query, 'database');
+    $query = $conn->prepare($query);
+    $query->bindParam(':routeShortName', $routeShortName);
     $query->execute();
     if (!$query) {
         databaseError($conn->errorInfo());
@@ -46,14 +46,14 @@
 
 function getRouteHeadsigns($routeID) {
     global $conn;
-    $query = "select stops.stop_name, trip_headsign, direction_id,max(service_id) as service_id, count(*)
+    $query = 'select stops.stop_name, trip_headsign, direction_id,max(service_id) as service_id, count(*)
         from routes join trips on trips.route_id = routes.route_id
 join stop_times on stop_times.trip_id = trips.trip_id join stops on 
 stop_times.stop_id = stops.stop_id where trips.route_id = :routeID 
-and stop_times.stop_sequence = 1 group by stops.stop_name, trip_headsign, direction_id having count(*) > 2";
-    debug($query, "database");
-    $query = $conn->prepare($query);
-    $query->bindParam(":routeID", $routeID);
+and stop_times.stop_sequence = 1 group by stops.stop_name, trip_headsign, direction_id having count(*) > 2';
+    debug($query, 'database');
+    $query = $conn->prepare($query);
+    $query->bindParam(':routeID', $routeID);
     $query->execute();
     if (!$query) {
         databaseError($conn->errorInfo());
@@ -66,18 +66,20 @@
         return Array($results);
     }
 }
+
 function getRouteDescription($routeID, $directionID) {
     $trip = getRouteNextTrip($routeID, $directionID);
-    $start = getTripStartingPoint($trip['trip_id']); 
+    $start = getTripStartingPoint($trip['trip_id']);
     $end = getTripDestination($trip['trip_id']);
-    return "From ".$start['stop_name']." to ".$end['stop_name'];
-}
+    return 'From ' . $start['stop_name'] . ' to ' . $end['stop_name'];
+}
+
 function getRouteByFullName($routeFullName) {
     global $conn;
-    $query = "Select * from routes where route_short_name||route_long_name = :routeFullName LIMIT 1";
-    debug($query, "database");
-    $query = $conn->prepare($query);
-    $query->bindParam(":routeFullName", $routeFullName);
+    $query = 'Select * from routes where route_short_name||route_long_name = :routeFullName LIMIT 1';
+    debug($query, 'database');
+    $query = $conn->prepare($query);
+    $query->bindParam(':routeFullName', $routeFullName);
     $query->execute();
     if (!$query) {
         databaseError($conn->errorInfo());
@@ -88,32 +90,32 @@
 
 function getRoutes() {
     global $conn;
-    $query = "Select * from routes order by route_short_name;";
-    debug($query, "database");
-    $query = $conn->prepare($query);
-    $query->execute();
-    if (!$query) {
-        databaseError($conn->errorInfo());
-        return Array();
-    }
-    return $query->fetchAll();
-}
-
-function getRoutesByNumberSeries($routeNumberSeries = "") {
+    $query = 'Select * from routes order by route_short_name;';
+    debug($query, 'database');
+    $query = $conn->prepare($query);
+    $query->execute();
+    if (!$query) {
+        databaseError($conn->errorInfo());
+        return Array();
+    }
+    return $query->fetchAll();
+}
+
+function getRoutesByNumberSeries($routeNumberSeries = '') {
     global $conn;
     if (strlen($routeNumberSeries) == 1) {
         return getRoute($routeNumberSeries);
     }
-    $seriesMin = substr($routeNumberSeries, 0, -1) . "0";
-    $seriesMax = substr($routeNumberSeries, 0, -1) . "9";
-    $query = "Select distinct routes.route_id,routes.route_short_name,routes.route_long_name,service_id from routes  join trips on trips.route_id =
-routes.route_id join stop_times on stop_times.trip_id = trips.trip_id where to_number(route_short_name, 'FM999') between :seriesMin and :seriesMax OR route_short_name LIKE :routeNumberSeries order by route_short_name;";
-    debug($query, "database");
-    $query = $conn->prepare($query);
-    $query->bindParam(":seriesMin", $seriesMin);
-    $query->bindParam(":seriesMax", $seriesMax);
-    $routeNumberSeries = "% " . substr($routeNumberSeries, 0, -1) . "%";
-    $query->bindParam(":routeNumberSeries", $routeNumberSeries);
+    $seriesMin = substr($routeNumberSeries, 0, -1) . '0';
+    $seriesMax = substr($routeNumberSeries, 0, -1) . '9';
+    $query = 'Select distinct routes.route_id,routes.route_short_name,routes.route_long_name,service_id from routes  join trips on trips.route_id =
+routes.route_id join stop_times on stop_times.trip_id = trips.trip_id where to_number(route_short_name, \'FM999\') between :seriesMin and :seriesMax OR route_short_name LIKE :routeNumberSeries order by route_short_name;';
+    debug($query, 'database');
+    $query = $conn->prepare($query);
+    $query->bindParam(':seriesMin', $seriesMin);
+    $query->bindParam(':seriesMax', $seriesMax);
+    $routeNumberSeries = '% ' . substr($routeNumberSeries, 0, -1) . '%';
+    $query->bindParam(':routeNumberSeries', $routeNumberSeries);
     $query->execute();
     if (!$query) {
         databaseError($conn->errorInfo());
@@ -124,19 +126,20 @@
 
 function getRouteNextTrip($routeID, $directionID) {
     global $conn;
-   
-    $query = "select routes.route_id,routes.route_url,direction_id,trips.trip_id,trip_headsign,departure_time,service_id from routes join trips on trips.route_id = routes.route_id
+
+    $query = 'select routes.route_id,routes.route_url,direction_id,trips.trip_id,trip_headsign,departure_time,service_id from routes join trips on trips.route_id = routes.route_id
 join stop_times on stop_times.trip_id = trips.trip_id where  arrival_time between :currentTime and :futureTime 
 and routes.route_id = :routeID and trips.direction_id = :directionID order by
-arrival_time limit 1";
-    debug($query, "database");
-    $query = $conn->prepare($query);
-    $query->bindParam(":currentTime", current_time());
-    $futureTime = current_time(strtotime(current_time() ." +2h"));
-    if (date("h",strtotime(current_time()) > 22)) $futureTime = "23:59:59";
-        $query->bindParam(":futureTime", $futureTime);
-    $query->bindParam(":routeID", $routeID);
-    $query->bindParam(":directionID", $directionID);
+arrival_time limit 1';
+    debug($query, 'database');
+    $query = $conn->prepare($query);
+    $query->bindParam(':currentTime', current_time());
+    $futureTime = current_time(strtotime(current_time() . ' +2h'));
+    if (date('h', strtotime(current_time()) > 22))
+        $futureTime = '23:59:59';
+    $query->bindParam(':futureTime', $futureTime);
+    $query->bindParam(':routeID', $routeID);
+    $query->bindParam(':directionID', $directionID);
     $query->execute();
     databaseError($conn->errorInfo());
     if (!$query) {
@@ -147,26 +150,26 @@
     return $r;
 }
 
-function getRouteFirstTrip($routeID,$directionID) {
-       global $conn;
-       
-       $query = "select * from routes join trips on trips.route_id = routes.route_id
+function getRouteFirstTrip($routeID, $directionID) {
+    global $conn;
+
+    $query = 'select * from routes join trips on trips.route_id = routes.route_id
 join stop_times on stop_times.trip_id = trips.trip_id where routes.route_id = :routeID 
 and trips.direction_id = :directionID order by
-arrival_time DESC limit 1";
-        debug($query, "database");
-        $query = $conn->prepare($query);
-        $query->bindParam(":routeID", $routeID);
-        
-    $query->bindParam(":directionID", $directionID);
-        $query->execute();
-        if (!$query) {
-            databaseError($conn->errorInfo());
-            return Array();
-        }
-
-        $r = $query->fetch(PDO :: FETCH_ASSOC);
-        return $r;
+arrival_time DESC limit 1';
+    debug($query, 'database');
+    $query = $conn->prepare($query);
+    $query->bindParam(':routeID', $routeID);
+
+    $query->bindParam(':directionID', $directionID);
+    $query->execute();
+    if (!$query) {
+        databaseError($conn->errorInfo());
+        return Array();
+    }
+
+    $r = $query->fetch(PDO :: FETCH_ASSOC);
+    return $r;
 }
 
 function getRouteAtStop($routeID, $directionID, $stop_id) {
@@ -180,128 +183,128 @@
     return Array();
 }
 
-function getRouteTrips($routeID, $directionID = "", $service_period = "") {
-    global $conn;
-    if ($service_period == "")
+function getRouteTrips($routeID, $directionID = '', $service_period = '') {
+    global $conn;
+    if ($service_period == '')
         $service_period = service_period();
     $service_ids = service_ids($service_period);
     $sidA = $service_ids[0];
     $sidB = $service_ids[1];
-    $directionSQL = "";
-    if ($directionID != "")
-        $directionSQL = " and direction_id = :directionID ";
-    $query = "select routes.route_id,trips.trip_id,service_id,arrival_time, stop_id, stop_sequence from routes join trips on trips.route_id = routes.route_id
+    $directionSQL = '';
+    if ($directionID != '')
+        $directionSQL = ' and direction_id = :directionID ';
+    $query = 'select routes.route_id,trips.trip_id,service_id,arrival_time, stop_id, stop_sequence from routes join trips on trips.route_id = routes.route_id
 join stop_times on stop_times.trip_id = trips.trip_id where (service_id=:service_periodA OR service_id=:service_periodB)
-AND (routes.route_id = :routeID) " . $directionSQL . " and stop_sequence = '1' order by
-arrival_time ";
-    debug($query, "database");
-    $query = $conn->prepare($query);
-    $query->bindParam(":routeID", $routeID);
-    $query->bindParam(":service_periodA", $sidA);
-    $query->bindParam(":service_periodB", $sidB);
-    if ($directionSQL != "")
-        $query->bindParam(":directionID", $directionID);
-    $query->execute();
-    if (!$query) {
-        databaseError($conn->errorInfo());
-        return Array();
-    }
-    return $query->fetchAll();
-}
-
-function getRoutesByDestination($destination = "", $service_period = "") {
-    global $conn;
-    if ($service_period == "")
+AND (routes.route_id = :routeID) ' . $directionSQL . ' and stop_sequence = \'1\' order by
+arrival_time ';
+    debug($query, 'database');
+    $query = $conn->prepare($query);
+    $query->bindParam(':routeID', $routeID);
+    $query->bindParam(':service_periodA', $sidA);
+    $query->bindParam(':service_periodB', $sidB);
+    if ($directionSQL != '')
+        $query->bindParam(':directionID', $directionID);
+    $query->execute();
+    if (!$query) {
+        databaseError($conn->errorInfo());
+        return Array();
+    }
+    return $query->fetchAll();
+}
+
+function getRoutesByDestination($destination = '', $service_period = '') {
+    global $conn;
+    if ($service_period == '')
         $service_period = service_period();
     $service_ids = service_ids($service_period);
     $sidA = $service_ids[0];
     $sidB = $service_ids[1];
-    if ($destination != "") {
-       /* $query = "SELECT DISTINCT trips.route_id,route_short_name,route_long_name, service_id
-FROM stop_times join trips on trips.trip_id =
-stop_times.trip_id join routes on trips.route_id = routes.route_id
-WHERE route_long_name = :destination AND (service_id=:service_periodA OR service_id=:service_periodB)
- order by route_short_name";*/
-        $query = "select route_id, direction_id, stop_name, b.trip_id, b.stop_sequence from (select route_id, direction_id, max(stop_sequence) as stop_sequence, max(a.trip_id) as trip_id  from stop_times inner join (SELECT route_id, direction_id, max(trip_id) as trip_id
-        from trips group by route_id,direction_id) as a on stop_times.trip_id = a.trip_id group by route_id, direction_id) as b inner join stop_times on b.trip_id = stop_times.trip_id inner join stops on stop_times.stop_id = stops.stop_id where stop_times.stop_sequence = b.stop_sequence and stop_name = :destination order by route_id;";
+    if ($destination != '') {
+        /* $query = 'SELECT DISTINCT trips.route_id,route_short_name,route_long_name, service_id
+          FROM stop_times join trips on trips.trip_id =
+          stop_times.trip_id join routes on trips.route_id = routes.route_id
+          WHERE route_long_name = :destination AND (service_id=:service_periodA OR service_id=:service_periodB)
+          order by route_short_name'; */
+        $query = 'select route_id, direction_id, stop_name, b.trip_id, b.stop_sequence from (select route_id, direction_id, max(stop_sequence) as stop_sequence, max(a.trip_id) as trip_id  from stop_times inner join (SELECT route_id, direction_id, max(trip_id) as trip_id
+        from trips group by route_id,direction_id) as a on stop_times.trip_id = a.trip_id group by route_id, direction_id) as b inner join stop_times on b.trip_id = stop_times.trip_id inner join stops on stop_times.stop_id = stops.stop_id where stop_times.stop_sequence = b.stop_sequence and stop_name = :destination order by route_id;';
     } else {
-        $query = "select stop_name from (select route_id, direction_id, max(stop_sequence) as stop_sequence, max(a.trip_id) as trip_id  from stop_times inner join (SELECT route_id, direction_id, max(trip_id) as trip_id
-        from trips group by route_id,direction_id) as a on stop_times.trip_id = a.trip_id group by route_id, direction_id) as b inner join stop_times on b.trip_id = stop_times.trip_id inner join stops on stop_times.stop_id = stops.stop_id where stop_times.stop_sequence = b.stop_sequence group by stop_name order by stop_name;";
-    }
-    debug($query, "database");
-    $query = $conn->prepare($query);
-
-    //$query->bindParam(":service_periodA", $sidA);
-    //$query->bindParam(":service_periodB", $sidB);
-    if ($destination != "")
-        $query->bindParam(":destination", $destination);
-    $query->execute();
-    if (!$query) {
-        databaseError($conn->errorInfo());
-        return Array();
-    }
-    return $query->fetchAll();
-}
-
-function getRoutesBySuburb($suburb, $service_period = "") {
-    if ($service_period == "")
+        $query = 'select stop_name from (select route_id, direction_id, max(stop_sequence) as stop_sequence, max(a.trip_id) as trip_id  from stop_times inner join (SELECT route_id, direction_id, max(trip_id) as trip_id
+        from trips group by route_id,direction_id) as a on stop_times.trip_id = a.trip_id group by route_id, direction_id) as b inner join stop_times on b.trip_id = stop_times.trip_id inner join stops on stop_times.stop_id = stops.stop_id where stop_times.stop_sequence = b.stop_sequence group by stop_name order by stop_name;';
+    }
+    debug($query, 'database');
+    $query = $conn->prepare($query);
+
+    //$query->bindParam(':service_periodA', $sidA);
+    //$query->bindParam(':service_periodB', $sidB);
+    if ($destination != '')
+        $query->bindParam(':destination', $destination);
+    $query->execute();
+    if (!$query) {
+        databaseError($conn->errorInfo());
+        return Array();
+    }
+    return $query->fetchAll();
+}
+
+function getRoutesBySuburb($suburb, $service_period = '') {
+    if ($service_period == '')
         $service_period = service_period();
     $service_ids = service_ids($service_period);
     $sidA = $service_ids[0];
     $sidB = $service_ids[1];
-   
-    global $conn;
-    $query = "SELECT DISTINCT service_id,trips.route_id,route_short_name,route_long_name
+
+    global $conn;
+    $query = 'SELECT DISTINCT service_id,trips.route_id,route_short_name,route_long_name
 FROM stop_times join trips on trips.trip_id = stop_times.trip_id
 join routes on trips.route_id = routes.route_id
 join stops on stops.stop_id = stop_times.stop_id
 WHERE stop_desc LIKE :suburb AND (service_id=:service_periodA OR service_id=:service_periodB)
- ORDER BY route_short_name";
-    debug($query, "database");
-    $query = $conn->prepare($query);
-    $query->bindParam(":service_periodA", $sidA);
-    $query->bindParam(":service_periodB", $sidB);
-    $suburb = "%Suburb: %" . $suburb . "%";
-    $query->bindParam(":suburb", $suburb);
-    $query->execute();
-    
-        databaseError($conn->errorInfo());
-  
-    return $query->fetchAll();
-}
-
-function getRoutesNearby($lat, $lng, $limit = "", $distance = 500) {
-   // if ($service_period == "")
-        $service_period = service_period();
+ ORDER BY route_short_name';
+    debug($query, 'database');
+    $query = $conn->prepare($query);
+    $query->bindParam(':service_periodA', $sidA);
+    $query->bindParam(':service_periodB', $sidB);
+    $suburb = '%Suburb: %' . $suburb . '%';
+    $query->bindParam(':suburb', $suburb);
+    $query->execute();
+
+    databaseError($conn->errorInfo());
+
+    return $query->fetchAll();
+}
+
+function getRoutesNearby($lat, $lng, $limit = '', $distance = 500) {
+    // if ($service_period == '')
+    $service_period = service_period();
     $service_ids = service_ids($service_period);
     $sidA = $service_ids[0];
     $sidB = $service_ids[1];
- $limitSQL = "";
-    if ($limit != "") 	
-        $limitSQL = " LIMIT :limit ";
-    global $conn;
-    $query = "SELECT service_id,trips.route_id,trips.direction_id,route_short_name,route_long_name,min(stops.stop_id) as stop_id,
-        min(ST_Distance(position, ST_GeographyFromText('SRID=4326;POINT($lng $lat)'), FALSE)) as distance
+    $limitSQL = '';
+    if ($limit != '')
+        $limitSQL = ' LIMIT :limit ';
+    global $conn;
+    $query = 'SELECT service_id,trips.route_id,trips.direction_id,route_short_name,route_long_name,min(stops.stop_id) as stop_id,
+        min(ST_Distance(position, ST_GeographyFromText(\'SRID=4326;POINT($lng $lat)\'), FALSE)) as distance
 FROM stop_times
 join trips on trips.trip_id = stop_times.trip_id
 join routes on trips.route_id = routes.route_id
 join stops on stops.stop_id = stop_times.stop_id
 WHERE (service_id=:service_periodA OR service_id=:service_periodB)
-AND ST_DWithin(position, ST_GeographyFromText('SRID=4326;POINT($lng $lat)'), :distance, FALSE)
+AND ST_DWithin(position, ST_GeographyFromText(\'SRID=4326;POINT($lng $lat)\'), :distance, FALSE)
         group by service_id,trips.route_id,trips.direction_id,route_short_name,route_long_name
-        order by distance $limitSQL";
-    debug($query, "database");
-    $query = $conn->prepare($query);
-    $query->bindParam(":service_periodA", $sidA);
-    $query->bindParam(":service_periodB", $sidB);
-    $query->bindParam(":distance", $distance);
-    if ($limit != "")
-        $query->bindParam(":limit", $limit);
-    $query->execute();
-    if (!$query) {
-        databaseError($conn->errorInfo());
-        return Array();
-    }
-    return $query->fetchAll();
-}
-
+        order by distance $limitSQL';
+    debug($query, 'database');
+    $query = $conn->prepare($query);
+    $query->bindParam(':service_periodA', $sidA);
+    $query->bindParam(':service_periodB', $sidB);
+    $query->bindParam(':distance', $distance);
+    if ($limit != '')
+        $query->bindParam(':limit', $limit);
+    $query->execute();
+    if (!$query) {
+        databaseError($conn->errorInfo());
+        return Array();
+    }
+    return $query->fetchAll();
+}
+

--- a/include/db/servicealert-dao.inc.php
+++ b/include/db/servicealert-dao.inc.php
@@ -3,26 +3,26 @@
 /*
  *    Copyright 2010,2011 Alexander Sadleir 
 
-  Licensed under the Apache License, Version 2.0 (the "License");
+  Licensed under the Apache License, Version 2.0 (the 'License');
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at
 
   http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
+  distributed under the License is distributed on an 'AS IS' BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
  */
 
-function getServiceOverride($date = "") {
+function getServiceOverride($date = '') {
     global $conn;
-    $query = "Select * from calendar_dates where date = :date and exception_type = '1' LIMIT 1";
-    // debug($query,"database");
+    $query = 'Select * from calendar_dates where date = :date and exception_type = \'1\' LIMIT 1';
+    // debug($query,'database');
     $query = $conn->prepare($query); // Create a prepared statement
-    $date = date("Ymd", ($date != "" ? $date : time()));
-    $query->bindParam(":date", $date);
+    $date = date('Ymd', ($date != '' ? $date : time()));
+    $query->bindParam(':date', $date);
     $query->execute();
     if (!$query) {
         databaseError($conn->errorInfo());
@@ -33,10 +33,10 @@
 
 function getServiceAlert($alertID) {
     global $conn;
-    $query = "SELECT id,extract('epoch' from start) as start, extract('epoch' from \"end\") as \"end\",cause,effect,header,description,url from servicealerts_alerts where id = :servicealert_id";
-    debug($query, "database");
+    $query = 'SELECT id,extract(\'epoch\' from start) as start, extract(\'epoch\' from "end") as \\\'end\\\',cause,effect,header,description,url from servicealerts_alerts where id = :servicealert_id';
+    debug($query, 'database');
     $query = $conn->prepare($query);
-    $query->bindParam(":servicealert_id", $alertID);
+    $query->bindParam(':servicealert_id', $alertID);
     $query->execute();
     if (!$query) {
         databaseError($conn->errorInfo());
@@ -48,16 +48,16 @@
 function updateServiceAlert($alertID, $alert) {
     global $conn;
     $query = 'update servicealerts_alerts set start=:start, "end"=:end, header=:header, description=:description, url=:url, cause=:cause, effect=:effect where id = :servicealert_id';
-    debug($query, "database");
+    debug($query, 'database');
     $query = $conn->prepare($query);
-    $query->bindValue(":servicealert_id", $alertID);
-    $query->bindValue(":start", $alert['startdate']);
-    $query->bindValue(":end", $alert['enddate']);
-    $query->bindValue(":header", $alert['header']);
-    $query->bindValue(":description", $alert['description']);
-    $query->bindValue(":url", $alert['url']);
-    $query->bindValue(":cause", $alert['cause']);
-    $query->bindValue(":effect", $alert['effect']);
+    $query->bindValue(':servicealert_id', $alertID);
+    $query->bindValue(':start', $alert['startdate']);
+    $query->bindValue(':end', $alert['enddate']);
+    $query->bindValue(':header', $alert['header']);
+    $query->bindValue(':description', $alert['description']);
+    $query->bindValue(':url', $alert['url']);
+    $query->bindValue(':cause', $alert['cause']);
+    $query->bindValue(':effect', $alert['effect']);
     $query->execute();
 
     print_r($conn->errorInfo());
@@ -71,16 +71,16 @@
 function addServiceAlert($alert) {
     global $conn;
     $query = 'INSERT INTO servicealerts_alerts (start, "end", header, description, url,cause,effect) VALUES (:start, :end, :header, :description, :url,:cause,:effect) ';
-    debug($query, "database");
+    debug($query, 'database');
     $query = $conn->prepare($query);
     //print_r($alert);
-    $query->bindValue(":start", $alert['startdate']);
-    $query->bindValue(":end", $alert['enddate']);
-    $query->bindValue(":header", $alert['header']);
-    $query->bindValue(":description", $alert['description']);
-    $query->bindValue(":url", $alert['url']);
-    $query->bindValue(":cause", $alert['cause']);
-    $query->bindValue(":effect", $alert['effect']);
+    $query->bindValue(':start', $alert['startdate']);
+    $query->bindValue(':end', $alert['enddate']);
+    $query->bindValue(':header', $alert['header']);
+    $query->bindValue(':description', $alert['description']);
+    $query->bindValue(':url', $alert['url']);
+    $query->bindValue(':cause', $alert['cause']);
+    $query->bindValue(':effect', $alert['effect']);
     $query->execute();
 
     print_r($conn->errorInfo());
@@ -93,8 +93,8 @@
 
 function getCurrentAlerts() {
     global $conn;
-    $query = "SELECT id,extract('epoch' from start) as start, extract('epoch' from \"end\") as \"end\",cause,effect,header,description,url from servicealerts_alerts where NOW() > start and NOW() < \"end\"";
-    // debug($query, "database");
+    $query = 'SELECT id,extract(\'epoch\' from start) as start, extract(\'epoch\' from "end") as "end",cause,effect,header,description,url from servicealerts_alerts where NOW() > start and NOW() < "end"';
+    // debug($query, 'database');
     $query = $conn->prepare($query);
     $query->execute();
     if (!$query) {
@@ -106,8 +106,8 @@
 
 function getFutureAlerts() {
     global $conn;
-    $query = "SELECT id,extract('epoch' from start) as start, extract('epoch' from \"end\") as \"end\",cause,effect,header,description,url from servicealerts_alerts where  NOW() < \"end\"";
-    // debug($query, "database");
+    $query = 'SELECT id,extract(\'epoch\' from start) as start, extract(\'epoch\' from "end") as "end",cause,effect,header,description,url from servicealerts_alerts where  NOW() < "end"';
+    // debug($query, 'database');
     $query = $conn->prepare($query);
     $query->execute();
     if (!$query) {
@@ -116,10 +116,11 @@
     }
     return $query->fetchAll();
 }
+
 function getAllAlerts() {
     global $conn;
-    $query = "SELECT id,extract('epoch' from start) as start, extract('epoch' from \"end\") as \"end\",cause,effect,header,description,url from servicealerts_alerts";
-    // debug($query, "database");
+    $query = 'SELECT id,extract(\'epoch\' from start) as start, extract(\'epoch\' from "end") as "end",cause,effect,header,description,url from servicealerts_alerts';
+    // debug($query, 'database');
     $query = $conn->prepare($query);
     $query->execute();
     if (!$query) {
@@ -132,24 +133,24 @@
 function getInformedAlerts($id, $filter_class, $filter_id) {
 
     global $conn;
-    //echo "$id, $filter_class, $filter_id\n";
-    $query = "SELECT * from servicealerts_informed where servicealert_id = :servicealert_id";
+    //echo '$id, $filter_class, $filter_id\n';
+    $query = 'SELECT * from servicealerts_informed where servicealert_id = :servicealert_id';
 
-    if ($filter_class != "") {
-        $query .= " AND informed_class = :informed_class  ";
+    if ($filter_class != '') {
+        $query .= ' AND informed_class = :informed_class  ';
     }
-    if ($filter_id != "") {
-        $query .= " AND informed_id = :informed_id ";
+    if ($filter_id != '') {
+        $query .= ' AND informed_id = :informed_id ';
     }
-    // debug($query, "database");
+    // debug($query, 'database');
     $query = $conn->prepare($query);
-    if ($filter_class != "") {
-        $query->bindParam(":informed_class", $filter_class);
+    if ($filter_class != '') {
+        $query->bindParam(':informed_class', $filter_class);
     }
-    if ($filter_id != "") {
-        $query->bindParam(":informed_id", $filter_id);
+    if ($filter_id != '') {
+        $query->bindParam(':informed_id', $filter_id);
     }
-    $query->bindParam(":servicealert_id", $id);
+    $query->bindParam(':servicealert_id', $id);
     $query->execute();
     if (!$query) {
         databaseError($conn->errorInfo());
@@ -161,11 +162,11 @@
 function deleteInformedAlert($serviceAlertID, $class, $id) {
     global $conn;
     $query = 'DELETE from servicealerts_informed where servicealert_id = :servicealert_id and informed_class = :informed_class  AND informed_id = :informed_id';
-    debug($query, "database");
+    debug($query, 'database');
     $query = $conn->prepare($query);
-    $query->bindParam(":servicealert_id", $serviceAlertID);
-    $query->bindParam(":informed_class", $class);
-    $query->bindParam(":informed_id", $id);
+    $query->bindParam(':servicealert_id', $serviceAlertID);
+    $query->bindParam(':informed_class', $class);
+    $query->bindParam(':informed_id', $id);
     $query->execute();
     print_r($conn->errorInfo());
     if (!$query) {
@@ -179,12 +180,12 @@
     global $conn;
     $query = 'INSERT INTO servicealerts_informed (servicealert_id , informed_class , informed_id, informed_action) 
         VALUES(:servicealert_id ,:informed_class, :informed_id, :informed_action)';
-    debug($query, "database");
+    debug($query, 'database');
     $query = $conn->prepare($query);
-    $query->bindParam(":servicealert_id", $serviceAlertID);
-    $query->bindParam(":informed_class", $class);
-    $query->bindParam(":informed_id", $id);
-    $query->bindParam(":informed_action", $action);
+    $query->bindParam(':servicealert_id', $serviceAlertID);
+    $query->bindParam(':informed_class', $class);
+    $query->bindParam(':informed_id', $id);
+    $query->bindParam(':informed_action', $action);
     $query->execute();
 
     print_r($conn->errorInfo());

--- a/include/db/stop-dao.inc.php
+++ b/include/db/stop-dao.inc.php
@@ -3,14 +3,14 @@
 /*
  *    Copyright 2010,2011 Alexander Sadleir 
 
-  Licensed under the Apache License, Version 2.0 (the "License");
+  Licensed under the Apache License, Version 2.0 (the 'License');
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at
 
   http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
+  distributed under the License is distributed on an 'AS IS' BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
@@ -18,10 +18,10 @@
 
 function getStop($stopID) {
     global $conn;
-    $query = "Select * from stops where stop_id = :stopID LIMIT 1";
-    debug($query, "database");
-    $query = $conn->prepare($query);
-    $query->bindParam(":stopID", $stopID);
+    $query = 'Select * from stops where stop_id = :stopID LIMIT 1';
+    debug($query, 'database');
+    $query = $conn->prepare($query);
+    $query->bindParam(':stopID', $stopID);
     $query->execute();
     if (!$query) {
         databaseError($conn->errorInfo());
@@ -30,52 +30,52 @@
     return $query->fetch(PDO :: FETCH_ASSOC);
 }
 
-function getStops($firstLetter = "", $startsWith = "") {
+function getStops($firstLetter = '', $startsWith = '') {
     global $conn;
     $conditions = Array();
-    if ($firstLetter != "")
-        $conditions[] = "substr(stop_name,1,1) = :firstLetter";
-    if ($startsWith != "")
-        $conditions[] = "stop_name like :startsWith";
-    $query = "Select * from stops";
+    if ($firstLetter != '')
+        $conditions[] = 'substr(stop_name,1,1) = :firstLetter';
+    if ($startsWith != '')
+        $conditions[] = 'stop_name like :startsWith';
+    $query = 'Select * from stops';
     if (sizeof($conditions) > 0) {
         if (sizeof($conditions) > 1) {
-            $query .= " Where " . implode(" AND ", $conditions) . " ";
+            $query .= ' Where ' . implode(' AND ', $conditions) . ' ';
         } else {
-            $query .= " Where " . $conditions[0] . " ";
+            $query .= ' Where ' . $conditions[0] . ' ';
         }
     }
-    $query .= " order by stop_name;";
-    debug($query, "database");
-    $query = $conn->prepare($query);
-    if ($firstLetter != "")
-        $query->bindParam(":firstLetter", $firstLetter);
-
-    if ($startsWith != "") {
-        $startsWith = $startsWith . "%";
-        $query->bindParam(":startsWith", $startsWith);
-    }
-    $query->execute();
-    if (!$query) {
-        databaseError($conn->errorInfo());
-        return Array();
-    }
-    return $query->fetchAll();
-}
-
-function getNearbyStops($lat, $lng, $limit = "", $distance = 1000) {
+    $query .= ' order by stop_name;';
+    debug($query, 'database');
+    $query = $conn->prepare($query);
+    if ($firstLetter != '')
+        $query->bindParam(':firstLetter', $firstLetter);
+
+    if ($startsWith != '') {
+        $startsWith = $startsWith . '%';
+        $query->bindParam(':startsWith', $startsWith);
+    }
+    $query->execute();
+    if (!$query) {
+        databaseError($conn->errorInfo());
+        return Array();
+    }
+    return $query->fetchAll();
+}
+
+function getNearbyStops($lat, $lng, $limit = '', $distance = 1000) {
     if ($lat == null || $lng == null)
         return Array();
-    if ($limit != "")
-        $limitSQL = " LIMIT :limit ";
-    global $conn;
-    $query = "Select *, ST_Distance(position, ST_GeographyFromText('SRID=4326;POINT($lng $lat)'), FALSE) as distance
-        from stops WHERE ST_DWithin(position, ST_GeographyFromText('SRID=4326;POINT($lng $lat)'), :distance, FALSE)
-        order by distance $limitSQL;";
-    debug($query, "database");
-    $query = $conn->prepare($query);
-    $query->bindParam(":distance", $distance);
-    $query->bindParam(":limit", $limit);
+    if ($limit != '')
+        $limitSQL = ' LIMIT :limit ';
+    global $conn;
+    $query = 'Select *, ST_Distance(position, ST_GeographyFromText(\'SRID=4326;POINT($lng $lat)\'), FALSE) as distance
+        from stops WHERE ST_DWithin(position, ST_GeographyFromText(\'SRID=4326;POINT($lng $lat)\'), :distance, FALSE)
+        order by distance $limitSQL;';
+    debug($query, 'database');
+    $query = $conn->prepare($query);
+    $query->bindParam(':distance', $distance);
+    $query->bindParam(':limit', $limit);
     $query->execute();
     if (!$query) {
         databaseError($conn->errorInfo());
@@ -86,11 +86,11 @@
 
 function getStopsByName($name) {
     global $conn;
-    $query = "Select * from stops where stop_name LIKE :name;";
-    debug($query, "database");
-    $query = $conn->prepare($query);
-    $name = $name . "%";
-    $query->bindParam(":name", $name);
+    $query = 'Select * from stops where stop_name LIKE :name;';
+    debug($query, 'database');
+    $query = $conn->prepare($query);
+    $name = $name . '%';
+    $query->bindParam(':name', $name);
     $query->execute();
     if (!$query) {
         databaseError($conn->errorInfo());
@@ -101,34 +101,34 @@
 
 function getStopsBySuburb($suburb) {
     global $conn;
-    $query = "Select * from stops where stop_desc LIKE :suburb order by stop_name;";
-    debug($query, "database");
-    $query = $conn->prepare($query);
-    $suburb = "%<br>Suburb: %" . $suburb . "%";
-    $query->bindParam(":suburb", $suburb);
-    $query->execute();
-    if (!$query) {
-        databaseError($conn->errorInfo());
-        return Array();
-    }
-    return $query->fetchAll();
-}
-
-function getStopsByStopCode($stop_code, $startsWith = "") {
-    global $conn;
-    $query = "Select * from stops where (stop_code = :stop_code OR stop_code LIKE :stop_code2)";
-    if ($startsWith != "")
-        $query .= " AND stop_name like :startsWith";
-
-    debug($query, "database");
-    $query = $conn->prepare($query);
-
-    $query->bindParam(":stop_code", $stop_code);
-    $stop_code2 = $stop_code . "%";
-    $query->bindParam(":stop_code2", $stop_code2);
-    if ($startsWith != "") {
-        $startsWith = $startsWith . "%";
-        $query->bindParam(":startsWith", $startsWith);
+    $query = 'Select * from stops where stop_desc LIKE :suburb order by stop_name;';
+    debug($query, 'database');
+    $query = $conn->prepare($query);
+    $suburb = '%<br>Suburb: %' . $suburb . '%';
+    $query->bindParam(':suburb', $suburb);
+    $query->execute();
+    if (!$query) {
+        databaseError($conn->errorInfo());
+        return Array();
+    }
+    return $query->fetchAll();
+}
+
+function getStopsByStopCode($stop_code, $startsWith = '') {
+    global $conn;
+    $query = 'Select * from stops where (stop_code = :stop_code OR stop_code LIKE :stop_code2)';
+    if ($startsWith != '')
+        $query .= ' AND stop_name like :startsWith';
+
+    debug($query, 'database');
+    $query = $conn->prepare($query);
+
+    $query->bindParam(':stop_code', $stop_code);
+    $stop_code2 = $stop_code . '%';
+    $query->bindParam(':stop_code2', $stop_code2);
+    if ($startsWith != '') {
+        $startsWith = $startsWith . '%';
+        $query->bindParam(':startsWith', $startsWith);
     }
     $query->execute();
     if (!$query) {
@@ -139,44 +139,44 @@
 }
 
 function getStopRoutes($stopID, $service_period) {
-    if ($service_period == "") {
+    if ($service_period == '') {
         $service_period = service_period();
     }
     $service_ids = service_ids($service_period);
     $sidA = $service_ids[0];
     $sidB = $service_ids[1];
     global $conn;
-    $query = "SELECT distinct service_id,trips.route_id,route_short_name,route_long_name
+    $query = 'SELECT distinct service_id,trips.route_id,route_short_name,route_long_name
 FROM stop_times join trips on trips.trip_id =
 stop_times.trip_id join routes on trips.route_id = routes.route_id WHERE stop_id = :stopID 
-AND (service_id=:service_periodA OR service_id=:service_periodB)";
-    debug($query, "database");
-    $query = $conn->prepare($query);
-    $query->bindParam(":service_periodA", $sidA);
-    $query->bindParam(":service_periodB", $sidB);
-    $query->bindParam(":stopID", $stopID);
-    $query->execute();
-    if (!$query) {
-        databaseError($conn->errorInfo());
-        return Array();
-    }
-    return $query->fetchAll();
-}
-
-function getStopTrips($stopID, $service_period = "", $afterTime = "", $limit = "", $route_short_name = "") {
-    if ($service_period == "") {
+AND (service_id=:service_periodA OR service_id=:service_periodB)';
+    debug($query, 'database');
+    $query = $conn->prepare($query);
+    $query->bindParam(':service_periodA', $sidA);
+    $query->bindParam(':service_periodB', $sidB);
+    $query->bindParam(':stopID', $stopID);
+    $query->execute();
+    if (!$query) {
+        databaseError($conn->errorInfo());
+        return Array();
+    }
+    return $query->fetchAll();
+}
+
+function getStopTrips($stopID, $service_period = '', $afterTime = '', $limit = '', $route_short_name = '') {
+    if ($service_period == '') {
         $service_period = service_period();
     }
     $service_ids = service_ids($service_period);
     $sidA = $service_ids[0];
     $sidB = $service_ids[1];
-    $limitSQL = "";
-    if ($limit != "")
-        $limitSQL .= " LIMIT :limit ";
-
-    global $conn;
-    if ($afterTime != "") {
-        $query = " SELECT stop_times.trip_id,stop_times.arrival_time,stop_times.stop_id,stop_sequence,service_id,trips.route_id,trips.direction_id,trips.trip_headsign,route_short_name,route_long_name,end_times.arrival_time as end_time
+    $limitSQL = '';
+    if ($limit != '')
+        $limitSQL .= ' LIMIT :limit ';
+
+    global $conn;
+    if ($afterTime != '') {
+        $query = ' SELECT stop_times.trip_id,stop_times.arrival_time,stop_times.stop_id,stop_sequence,service_id,trips.route_id,trips.direction_id,trips.trip_headsign,route_short_name,route_long_name,end_times.arrival_time as end_time
 FROM stop_times
 join trips on trips.trip_id =
 stop_times.trip_id
@@ -184,52 +184,52 @@
 	WHERE stop_times.arrival_time IS NOT NULL group by trip_id) as end_times 
 WHERE stop_times.stop_id = :stopID
 AND stop_times.trip_id = end_times.trip_id
-AND (service_id=:service_periodA OR service_id=:service_periodB) " . ($route_short_name != "" ? " AND route_short_name = :route_short_name " : "") . " 
+AND (service_id=:service_periodA OR service_id=:service_periodB) ' . ($route_short_name != '' ? ' AND route_short_name = :route_short_name ' : '') . ' 
 AND end_times.arrival_time > :afterTime
-ORDER BY end_time $limitSQL";
+ORDER BY end_time $limitSQL';
     } else {
-        $query = "SELECT stop_times.trip_id,arrival_time,stop_times.stop_id,stop_sequence,service_id,trips.route_id,route_short_name,route_long_name
+        $query = 'SELECT stop_times.trip_id,arrival_time,stop_times.stop_id,stop_sequence,service_id,trips.route_id,route_short_name,route_long_name
 FROM stop_times
 join trips on trips.trip_id =
 stop_times.trip_id
 join routes on trips.route_id = routes.route_id
 WHERE stop_times.stop_id = :stopID
-AND (service_id=:service_periodA OR service_id=:service_periodB) " . ($route_short_name != "" ? " AND route_short_name = :route_short_name " : "") . " 
-ORDER BY arrival_time $limitSQL";
-    }
-    debug($query, "database");
-    $query = $conn->prepare($query);
-    $query->bindParam(":service_periodA", $sidA);
-    $query->bindParam(":service_periodB", $sidB);
-    $query->bindParam(":stopID", $stopID);
-    if ($limit != "")
-        $query->bindParam(":limit", $limit);
-    if ($afterTime != "")
-        $query->bindParam(":afterTime", $afterTime);
-    if ($route_short_name != "")
-        $query->bindParam(":route_short_name", $route_short_name);
-    $query->execute();
-    if (!$query) {
-        databaseError($conn->errorInfo());
-        return Array();
-    }
-    return $query->fetchAll();
-}
-
-function getStopTripsWithTimes($stopID, $time = "", $service_period = "", $time_range = "", $limit = "") {
-    if ($service_period == "")
+AND (service_id=:service_periodA OR service_id=:service_periodB) ' . ($route_short_name != '' ? ' AND route_short_name = :route_short_name ' : '') . ' 
+ORDER BY arrival_time $limitSQL';
+    }
+    debug($query, 'database');
+    $query = $conn->prepare($query);
+    $query->bindParam(':service_periodA', $sidA);
+    $query->bindParam(':service_periodB', $sidB);
+    $query->bindParam(':stopID', $stopID);
+    if ($limit != '')
+        $query->bindParam(':limit', $limit);
+    if ($afterTime != '')
+        $query->bindParam(':afterTime', $afterTime);
+    if ($route_short_name != '')
+        $query->bindParam(':route_short_name', $route_short_name);
+    $query->execute();
+    if (!$query) {
+        databaseError($conn->errorInfo());
+        return Array();
+    }
+    return $query->fetchAll();
+}
+
+function getStopTripsWithTimes($stopID, $time = '', $service_period = '', $time_range = '', $limit = '') {
+    if ($service_period == '')
         $service_period = service_period();
-    if ($time_range == "")
+    if ($time_range == '')
         $time_range = (24 * 60 * 60);
-    if ($time == "")
+    if ($time == '')
         $time = current_time();
-    if ($limit == "")
+    if ($limit == '')
         $limit = 10;
     $trips = getStopTrips($stopID, $service_period, $time);
     $timedTrips = Array();
     if ($trips && sizeof($trips) > 0) {
         foreach ($trips as $trip) {
-            if ($trip['arrival_time'] != "") {
+            if ($trip['arrival_time'] != '') {
                 if (strtotime($trip['arrival_time']) > strtotime($time) and strtotime($trip['arrival_time']) < (strtotime($time) + $time_range)) {
                     $timedTrips[] = $trip;
                 }
@@ -242,7 +242,7 @@
             if (sizeof($timedTrips) > $limit)
                 break;
         }
-        sktimesort($timedTrips, "arrival_time", true);
+        sktimesort($timedTrips, 'arrival_time', true);
     }
     return $timedTrips;
 }

--- a/include/db/trip-dao.inc.php
+++ b/include/db/trip-dao.inc.php
@@ -3,14 +3,14 @@
 /*
  *    Copyright 2010,2011 Alexander Sadleir 
 
-  Licensed under the Apache License, Version 2.0 (the "License");
+  Licensed under the Apache License, Version 2.0 (the 'License');
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at
 
   http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
+  distributed under the License is distributed on an 'AS IS' BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
@@ -18,13 +18,13 @@
 
 function getTrip($tripID) {
     global $conn;
-    $query = "Select * from trips
+    $query = 'Select * from trips
 	join routes on trips.route_id = routes.route_id
 	where trip_id =	:tripID
-	LIMIT 1";
-    debug($query, "database");
-    $query = $conn->prepare($query);
-    $query->bindParam(":tripID", $tripID);
+	LIMIT 1';
+    debug($query, 'database');
+    $query = $conn->prepare($query);
+    $query->bindParam(':tripID', $tripID);
     $query->execute();
     if (!$query) {
         databaseError($conn->errorInfo());
@@ -33,17 +33,18 @@
     }
     return $query->fetch(PDO :: FETCH_ASSOC);
 }
+
 function getTripStops($tripID) {
     global $conn;
-    $query = "SELECT stops.stop_id, stop_name, ST_AsKML(position) as positionkml,
+    $query = 'SELECT stops.stop_id, stop_name, ST_AsKML(position) as positionkml,
 	stop_sequence, trips.trip_id
 FROM stop_times
 join trips on trips.trip_id = stop_times.trip_id
 join stops on stops.stop_id = stop_times.stop_id
-WHERE trips.trip_id = :tripID ORDER BY stop_sequence";
-    debug($query, "database");
-    $query = $conn->prepare($query);
-    $query->bindParam(":tripID", $tripID);
+WHERE trips.trip_id = :tripID ORDER BY stop_sequence';
+    debug($query, 'database');
+    $query = $conn->prepare($query);
+    $query->bindParam(':tripID', $tripID);
     $query->execute();
     if (!$query) {
         databaseError($conn->errorInfo());
@@ -53,15 +54,15 @@
 }
 
 function getTripHasStop($tripID, $stopID) {
-        global $conn;
-    $query = "SELECT stop_id
+    global $conn;
+    $query = 'SELECT stop_id
 FROM stop_times
 join trips on trips.trip_id = stop_times.trip_id
-WHERE trips.trip_id = :tripID and stop_times.stop_id = :stopID";
-    debug($query, "database");
-    $query = $conn->prepare($query);
-    $query->bindParam(":tripID", $tripID);
-    $query->bindParam(":stopID", $stopID);
+WHERE trips.trip_id = :tripID and stop_times.stop_id = :stopID';
+    debug($query, 'database');
+    $query = $conn->prepare($query);
+    $query->bindParam(':tripID', $tripID);
+    $query->bindParam(':stopID', $stopID);
     $query->execute();
     if (!$query) {
         databaseError($conn->errorInfo());
@@ -71,15 +72,14 @@
 }
 
 function getTripShape($tripID) {
-    // todo, use shapes table if shape_id specified
-    global $conn;
-    $query = "SELECT ST_AsKML(ST_MakeLine(geometry(a.shape_pt))) as the_route
+    global $conn;
+    $query = 'SELECT ST_AsKML(ST_MakeLine(geometry(a.shape_pt))) as the_route
 FROM (SELECT shapes.shape_id,shape_pt from shapes
 inner join trips on shapes.shape_id = trips.shape_id
-WHERE trips.trip_id = :tripID ORDER BY shape_pt_sequence) as a group by a.shape_id";
-    debug($query, "database");
-    $query = $conn->prepare($query);
-    $query->bindParam(":tripID", $tripID);
+WHERE trips.trip_id = :tripID ORDER BY shape_pt_sequence) as a group by a.shape_id';
+    debug($query, 'database');
+    $query = $conn->prepare($query);
+    $query->bindParam(':tripID', $tripID);
     $query->execute();
     if (!$query) {
         databaseError($conn->errorInfo());
@@ -90,17 +90,17 @@
 
 function getTripStopTimes($tripID) {
     global $conn;
-    $query = "SELECT stop_times.trip_id,trip_headsign,arrival_time,stop_times.stop_id
+    $query = 'SELECT stop_times.trip_id,trip_headsign,arrival_time,stop_times.stop_id
     ,stop_lat,stop_lon,stop_name,stop_desc,stop_code,
 	stop_sequence,service_id,trips.route_id,route_short_name,route_long_name
 FROM stop_times
 join trips on trips.trip_id = stop_times.trip_id
 join routes on trips.route_id = routes.route_id
 join stops on stops.stop_id = stop_times.stop_id
-WHERE trips.trip_id = :tripID ORDER BY stop_sequence";
-    debug($query, "database");
-    $query = $conn->prepare($query);
-    $query->bindParam(":tripID", $tripID);
+WHERE trips.trip_id = :tripID ORDER BY stop_sequence';
+    debug($query, 'database');
+    $query = $conn->prepare($query);
+    $query->bindParam(':tripID', $tripID);
     $query->execute();
     if (!$query) {
         databaseError($conn->errorInfo());
@@ -121,13 +121,13 @@
 
 function getTripStartTime($tripID) {
     global $conn;
-    $query = "Select * from stop_times
+    $query = 'Select * from stop_times
 	where trip_id = :tripID
 	AND arrival_time IS NOT NULL
-	AND stop_sequence = '1'";
-    debug($query, "database");
-    $query = $conn->prepare($query);
-    $query->bindParam(":tripID", $tripID);
+	AND stop_sequence = \'1\'';
+    debug($query, 'database');
+    $query = $conn->prepare($query);
+    $query->bindParam(':tripID', $tripID);
     $query->execute();
     if (!$query) {
         databaseError($conn->errorInfo());
@@ -139,11 +139,11 @@
 
 function getTripEndTime($tripID) {
     global $conn;
-    $query = "SELECT trip_id,max(arrival_time) as arrival_time from stop_times
-	WHERE stop_times.arrival_time IS NOT NULL and trip_id = :tripID group by trip_id";
-    debug($query, "database");
-    $query = $conn->prepare($query);
-    $query->bindParam(":tripID", $tripID);
+    $query = 'SELECT trip_id,max(arrival_time) as arrival_time from stop_times
+	WHERE stop_times.arrival_time IS NOT NULL and trip_id = :tripID group by trip_id';
+    debug($query, 'database');
+    $query = $conn->prepare($query);
+    $query->bindParam(':tripID', $tripID);
     $query->execute();
     if (!$query) {
         databaseError($conn->errorInfo());
@@ -152,14 +152,15 @@
     $r = $query->fetch(PDO :: FETCH_ASSOC);
     return $r['arrival_time'];
 }
+
 function getTripStartingPoint($tripID) {
     global $conn;
-    $query = "SELECT stops.stop_id, stops.stop_name, stops.stop_desc 
+    $query = 'SELECT stops.stop_id, stops.stop_name, stops.stop_desc 
         from stop_times inner join stops on stop_times.stop_id =  stops.stop_id
-	WHERE trip_id = :tripID and stop_sequence = '1' limit 1";
-    debug($query, "database");
-    $query = $conn->prepare($query);
-    $query->bindParam(":tripID", $tripID);
+	WHERE trip_id = :tripID and stop_sequence = \'1\' limit 1';
+    debug($query, 'database');
+    $query = $conn->prepare($query);
+    $query->bindParam(':tripID', $tripID);
     $query->execute();
     if (!$query) {
         databaseError($conn->errorInfo());
@@ -171,12 +172,12 @@
 
 function getTripDestination($tripID) {
     global $conn;
-    $query = "SELECT stops.stop_id, stops.stop_name, stops.stop_desc 
+    $query = 'SELECT stops.stop_id, stops.stop_name, stops.stop_desc 
         from stop_times inner join stops on stop_times.stop_id =  stops.stop_id
-	WHERE trip_id = :tripID order by stop_sequence desc limit 1";
-    debug($query, "database");
-    $query = $conn->prepare($query);
-    $query->bindParam(":tripID", $tripID);
+	WHERE trip_id = :tripID order by stop_sequence desc limit 1';
+    debug($query, 'database');
+    $query = $conn->prepare($query);
+    $query->bindParam(':tripID', $tripID);
     $query->execute();
     if (!$query) {
         databaseError($conn->errorInfo());
@@ -186,39 +187,57 @@
     return $r;
 }
 
-function getActiveTrips($time) {
-    global $conn;
-    if ($time == "")
+function getActiveTrips($time='') {
+    global $conn;
+    if ($time == '') {
         $time = current_time();
-    $query = "Select distinct stop_times.trip_id, start_times.arrival_time as start_time, end_times.arrival_time as end_time from stop_times, (SELECT trip_id,arrival_time from stop_times WHERE stop_times.arrival_time IS NOT NULL
-AND stop_sequence = '1') as start_times, (SELECT trip_id,max(arrival_time) as arrival_time from stop_times WHERE stop_times.arrival_time IS NOT NULL group by trip_id) as end_times
-WHERE start_times.trip_id = end_times.trip_id AND stop_times.trip_id = end_times.trip_id AND :time > start_times.arrival_time  AND :time < end_times.arrival_time";
-    debug($query, "database");
-    $query = $conn->prepare($query);
-    $query->bindParam(":time", $time);
-    $query->execute();
-    if (!$query) {
-        databaseError($conn->errorInfo());
-        return Array();
-    }
-    return $query->fetchAll();
-}
-
-function viaPoints($tripID, $stop_sequence = "") {
-    global $conn;
-    $query = "SELECT stops.stop_id, stop_name, arrival_time
+    }
+    $query = 'Select distinct stop_times.trip_id, start_times.arrival_time as start_time, end_times.arrival_time as end_time from stop_times, (SELECT trip_id,arrival_time from stop_times WHERE stop_times.arrival_time IS NOT NULL
+AND stop_sequence = \'1\') as start_times, (SELECT trip_id,max(arrival_time) as arrival_time from stop_times WHERE stop_times.arrival_time IS NOT NULL group by trip_id) as end_times
+WHERE start_times.trip_id = end_times.trip_id AND stop_times.trip_id = end_times.trip_id AND :time > start_times.arrival_time  AND :time < end_times.arrival_time';
+    debug($query, 'database');
+    $query = $conn->prepare($query);
+    $query->bindParam(':time', $time);
+    $query->execute();
+    if (!$query) {
+        databaseError($conn->errorInfo());
+        return Array();
+    }
+    return $query->fetchAll();
+}
+function getTripLastStop($tripid, $time='') {
+    global $conn;
+    if ($time == '') {
+        $time = current_time();
+    }
+    $query = 'Select trip_id,stops.stop_id,stop_sequence,stop_code,stop_name,stop_lat,stop_lon,arrival_time,(arrival_time - :time::time) as time_diff  from stop_times inner join stops on stop_times.stop_id = stops.stop_id WHERE trip_id = :tripid  and arrival_time >= :time::time order by stop_sequence limit 2';
+    debug($query, 'database');
+    $query = $conn->prepare($query);
+    $query->bindParam(':time', $time);
+    $query->bindParam(':tripid', $tripid);
+    $query->execute();
+    if (!$query) {
+        databaseError($conn->errorInfo());
+        return Array();
+    }
+    return $query->fetchAll();
+}
+
+function viaPoints($tripID, $stop_sequence = '') {
+    global $conn;
+    $query = 'SELECT stops.stop_id, stop_name, arrival_time
 FROM stop_times join stops on stops.stop_id = stop_times.stop_id
 WHERE stop_times.trip_id = :tripID
-" . ($stop_sequence != "" ? " AND stop_sequence > :stop_sequence " : "") . " ORDER BY stop_sequence";
-    debug($query, "database");
-    $query = $conn->prepare($query);
-    if ($stop_sequence != "")
-        $query->bindParam(":stop_sequence", $stop_sequence);
-    $query->bindParam(":tripID", $tripID);
-    $query->execute();
-    if (!$query) {
-        databaseError($conn->errorInfo());
-        return Array();
-    }
-    return $query->fetchAll();
-}
+' . ($stop_sequence != '' ? ' AND stop_sequence > :stop_sequence ' : '') . ' ORDER BY stop_sequence';
+    debug($query, 'database');
+    $query = $conn->prepare($query);
+    if ($stop_sequence != '')
+        $query->bindParam(':stop_sequence', $stop_sequence);
+    $query->bindParam(':tripID', $tripID);
+    $query->execute();
+    if (!$query) {
+        databaseError($conn->errorInfo());
+        return Array();
+    }
+    return $query->fetchAll();
+}

--- a/myway/myway_timeliness.php
+++ b/myway/myway_timeliness.php
@@ -89,8 +89,8 @@
             },
             yaxis: {
                 tickFormatter: yformatter,
-                min: -60*8,
-                max: 60*8
+                min: -60*10,
+                max: 60*10
             },
             mouse: { track: true, relative: true, trackFormatter: showTooltip}
         });
@@ -112,3 +112,4 @@
     }
 
 </script> 
+

--- a/sitemap.xml.php
+++ b/sitemap.xml.php
@@ -19,33 +19,33 @@
 $last_updated = date('Y-m-d', @filemtime('cbrfeed.zip'));
 header("Content-Type: text/xml");
 echo "<?xml version='1.0' encoding='UTF-8'?>";
-echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:geo="http://www.google.com/geo/schemas/sitemap/1.0">' . "\n";
-echo " <url><loc>" . curPageURL() . "index.php</loc><priority>1.0</priority></url>\n";
+echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:geo="http://www.google.com/geo/schemas/sitemap/1.0">' .PHP_EOL;
+echo " <url><loc>" . curPageURL() . "index.php</loc><priority>1.0</priority></url>".PHP_EOL;
 foreach (scandir("./") as $file) {
     if (strpos($file, ".php") !== false && $file != "index.php" && $file != "sitemap.xml.php")
-        echo " <url><loc>" . curPageURL() . "$file</loc><priority>0.3</priority></url>\n";
+        echo " <url><loc>" . curPageURL() . "$file</loc><priority>0.3</priority></url>".PHP_EOL;
 }
 foreach (scandir("./labs") as $file) {
     if (strpos($file, ".php") !== false)
-        echo " <url><loc>" . curPageURL() . "/labs/$file</loc><priority>0.3</priority></url>\n";
+        echo " <url><loc>" . curPageURL() . "/labs/$file</loc><priority>0.3</priority></url>".PHP_EOL;
 }
 foreach (scandir("./myway") as $file) {
     if (strpos($file, ".php") !== false)
-        echo " <url><loc>" . curPageURL() . "/myway/$file</loc><priority>0.3</priority></url>\n";
+        echo " <url><loc>" . curPageURL() . "/myway/$file</loc><priority>0.3</priority></url>".PHP_EOL;
 }
 foreach (getStops() as $stop) {
     echo " <url><loc>" . curPageURL() . "stop.php?stopid=" . htmlspecialchars($stop["stop_id"]) . "</loc>";
     echo "<lastmod>" . $last_updated . "</lastmod>";
     echo "<changefreq>monthly</changefreq>";
     echo "<priority>0.9</priority>";
-    echo "</url>\n";
+    echo "</url>".PHP_EOL;
 }
 foreach (getRoutes() as $route) {
     echo " <url><loc>" . curPageURL() . "trip.php?routeid=" . htmlspecialchars($route["route_id"]) . "</loc>";
     echo "<lastmod>" . $last_updated . "</lastmod>";
     echo "<changefreq>monthly</changefreq>";
     echo "<priority>0.9</priority>";
-    echo "</url>\n";
+    echo "</url>".PHP_EOL;
 }
 
 // geosite map
@@ -55,7 +55,7 @@
     echo "<geo:geo>
        <geo:format>kml</geo:format>
    </geo:geo>";
-    echo "</url>\n";
+    echo "</url>".PHP_EOL;
 }
 
 echo '</urlset>';

file:a/stop.php -> file:b/stop.php
--- a/stop.php
+++ b/stop.php
@@ -141,7 +141,7 @@
 if (sizeof($trips) == 0) {
     echo "<li style='text-align: center;'>No trips in the near future.</li>";
 } else {
-            if ($labs) {
+            if (isset($labs)) {
 // ETA calculation
                 
                 $tripETA = Array();
@@ -176,7 +176,7 @@
             $destination = getTripDestination($trip['trip_id']);
             echo '<a href="trip.php?stopid=' . $stopid . '&amp;tripid=' . $trip['trip_id'] . '"><h3>' . $trip['route_short_name'] . " towards " . $destination['stop_name'] . "</h3><p>";
             $viaPoints = viaPointNames($trip['trip_id'], $trip['stop_sequence']);
-if ($labs) {
+if (isset($labs)) {
                 echo '<br><span class="eta">ETA: ' . $tripETA[$trip['trip_id']] . '</span>';
             }
             if ($viaPoints != "")

--- a/stopList.php
+++ b/stopList.php
@@ -81,7 +81,7 @@
         trackEvent("Stop Lists", "Stops By Suburb", $suburb);
     } else {
         $listType = 'allstops=yes';
-        $stops = getStops($firstLetter);
+        $stops = getStops((isset($firstLetter)? $firstLetter : ""));
         include_header("Stops by Name", "stopList");
         navbar();
     } 

--- a/updatedb.php
+++ b/updatedb.php
@@ -40,7 +40,7 @@
             while ($zip_entry = zip_read($zip)) {
                 $fp = fopen($tmpdir . zip_entry_name($zip_entry), "w");
                 if (zip_entry_open($zip, $zip_entry, "r")) {
-                    echo "Extracting " . zip_entry_name($zip_entry) . "\n";
+                    echo "Extracting " . zip_entry_name($zip_entry) . PHP_EOL;
                     $buf = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));
                     fwrite($fp, "$buf");
                     zip_entry_close($zip_entry);
@@ -55,7 +55,7 @@
         $headers = Array();
         if (!strpos($file, ".txt") === false) {
             $fieldseparator = ",";
-            $lineseparator = "\n";
+            $lineseparator = PHP_EOL;
             $tablename = str_replace(".txt", "", $file);
             echo "Opening $file \n";
             $line = 0;
@@ -128,7 +128,7 @@
                 }
                 $line++;
                 if ($line % 10000 == 0)
-                    echo "$line records... " . date('c') . "\n";
+                    echo "$line records... " . date('c') . PHP_EOL;
             }
             fclose($handle);
             $stmt->closeCursor();