Better trip planning form, autozooming for static map display based on inserted markers
[bus.git] / busui / common.inc.php
blob:a/busui/common.inc.php -> blob:b/busui/common.inc.php
--- a/busui/common.inc.php
+++ b/busui/common.inc.php
@@ -3,36 +3,109 @@
 $APIurl = "http://localhost:8765";
 error_reporting(E_ALL ^ E_NOTICE);
 
+// SELECT array_to_string(array(SELECT REPLACE(name_2006, ',', '\,') as name FROM suburbs order by name), ',')
+$suburbs = explode(",","Acton,Ainslie,Amaroo,Aranda,Banks,Barton,Belconnen,Bonner,Bonython,Braddon,Bruce,Calwell,Campbell,Chapman,Charnwood,Chifley,Chisholm,City,Conder,Cook,Curtin,Deakin,Dickson,Downer,Duffy,Dunlop,Evatt,Fadden,Farrer,Fisher,Florey,Flynn,Forrest,Franklin,Fraser,Fyshwick,Garran,Gilmore,Giralang,Gordon,Gowrie,Greenway,Griffith,Gungahlin,Hackett,Hall,Harrison,Hawker,Higgins,Holder,Holt,Hughes,Hume,Isaacs,Isabella Plains,Kaleen,Kambah,Kingston,Latham,Lawson,Lyneham,Lyons,Macarthur,Macgregor,Macquarie,Mawson,McKellar,Melba,Mitchell,Monash,Narrabundah,Ngunnawal,Nicholls,Oaks Estate,O'Connor,O'Malley,Oxley,Page,Palmerston,Parkes,Pearce,Phillip,Pialligo,Red Hill,Reid,Richardson,Rivett,Russell,Scullin,Spence,Stirling,Symonston,Tharwa,Theodore,Torrens,Turner,Wanniassa,Waramanga,Watson,Weetangera,Weston,Yarralumla");
+
+ // you have to open the session to be able to modify or remove it 
+session_start(); 
+ 
+
 function isDebug()
 {
-    return true;
-}
-
+    return $_SERVER['SERVER_NAME'] == "10.0.1.154" || $_SERVER['SERVER_NAME'] == "localhost" || $_SERVER['SERVER_NAME'] == "127.0.0.1" || !$_SERVER['SERVER_NAME'];
+}
+
+function debug($msg) {
+    if (isDebug()) echo "<!-- $msg -->";
+}
 function isFastDevice() {
     return true;
 }
 
 function include_header($pageTitle, $opendiv = true, $geolocate = false) {
+ // this starts the session 
+ session_start(); 
+ 
     // if (isDebug()) // set php error level high
     echo '
 <!DOCTYPE html> 
 <html> 
 	<head> 
-	<title>bus.lambdacomplex.org - '.$pageTitle.'</title> 
-	<link rel="stylesheet"  href="http://code.jquery.com/mobile/1.0a2/jquery.mobile-1.0a2.min.css" />
+	<title>busness time - '.$pageTitle.'</title> 
+	';
+         if (isDebug()) echo '<link rel="stylesheet"  href="css/jquery-mobile-1.0a3.css" />
+         <script type="text/javascript" src="js/jquery-1.5.js"></script>
+        <script type="text/javascript" src="js/jquery-mobile-1.0a3.js"></script>';
+         else echo '<link rel="stylesheet"  href="http://code.jquery.com/mobile/1.0a3/jquery.mobile-1.0a3.css" />
+        <script type="text/javascript" src="http://code.jquery.com/jquery-1.5.js"></script>
+        <script type="text/javascript" src="http://code.jquery.com/mobile/1.0a3/jquery.mobile-1.0a3.js"></script>';
+echo '
+<link rel="stylesheet"  href="css/jquery.ui.datepicker.mobile.css" />
+	<script> 
+		//reset type=date inputs to text
+		$( document ).bind( "mobileinit", function(){
+			$.mobile.page.prototype.options.degradeInputs.date = true;
+		});	
+	</script> 
+	<script src="js/jQuery.ui.datepicker.js"></script> 
+	<script src="js/jquery.ui.datepicker.mobile.js"></script> 
      <style type="text/css">
      .ui-navbar {
      padding-bottom: 18px;
      width: 100%;
      }
+     
+     .ui-li-heading {
+        white-space: normal !important;
+     }
 </style>
-	<script src="http://code.jquery.com/jquery-1.4.3.min.js"></script><script type="text/javascript" 
-src="http://code.jquery.com/mobile/1.0a2/jquery.mobile-1.0a2.min.js"></script> 
- <meta name="apple-mobile-web-app-capable" content="yes" />
+<meta name="apple-mobile-web-app-capable" content="yes" />
  <meta name="apple-mobile-web-app-status-bar-style" content="black" />
  <link rel="apple-touch-startup-image" href="startup.png" />
- <link rel="apple-touch-icon" href="apple-touch-icon.png" />
-</head> 
+ <link rel="apple-touch-icon" href="apple-touch-icon.png" />';
+ if ($geolocate) {
+echo "<script>
+
+function setCookie(c_name,value,expiredays)
+{
+var exdate=new Date();
+exdate.setDate(exdate.getDate()+expiredays);
+document.cookie=c_name+ \"=\" +escape(value)+
+((expiredays==null) ? \"\" : \";expires=\"+exdate.toUTCString());
+}
+
+function getCookie(c_name)
+{
+if (document.cookie.length>0)
+  {
+  c_start=document.cookie.indexOf(c_name + \"=\");
+  if (c_start!=-1)
+    {
+    c_start=c_start + c_name.length+1;
+    c_end=document.cookie.indexOf(\";\",c_start);
+    if (c_end==-1) c_end=document.cookie.length;
+    return unescape(document.cookie.substring(c_start,c_end));
+    }
+  }
+return \"\";
+}
+
+function success(position) {
+$('#geolocate').val(position.coords.latitude+','+position.coords.longitude);
+setCookie('geolocate',position.coords.latitude+','+position.coords.longitude,1);
+}
+
+function error(msg) {
+ console.log(msg);
+}
+
+if (navigator.geolocation) {
+  navigator.geolocation.getCurrentPosition(success, error);
+}
+
+</script> ";
+ }
+echo '</head> 
 <body> 
  ';
 if ($opendiv) echo '<div data-role="page"> 
@@ -48,8 +121,12 @@
     echo '</div>';
 }
 
+$service_periods = Array ('sunday','saturday','weekday');
+
 function service_period()
 {
+if (isset($_SESSION['service_period'])) return $_SESSION['service_period'];
+
 switch (date('w')){
 
 case 0:
@@ -61,24 +138,39 @@
 }	
 }
 
+function remove_spaces($string)
+{
+    return str_replace(' ','',$string);
+}
+
 function midnight_seconds()
 {
 // from http://www.perturb.org/display/Perlfunc__Seconds_Since_Midnight.html
-  $secs = (date("G") * 3600) + (date("i") * 60) + date("s");
-   return $secs;
+if (isset($_SESSION['time'])) {
+        $time = mkdate($_SESSION['time']);
+        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);
+} else {
+return "";
+}
 }
 function getPage($url)
 {
+    debug($url);
     $ch = curl_init($url);
 curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
 curl_setopt( $ch, CURLOPT_HEADER, 0 );
+          curl_setopt($ch,CURLOPT_TIMEOUT,30); 
 $page = curl_exec($ch);
+ if(curl_errno($ch)) echo "<font color=red> Database temporarily unavailable: ".curl_errno($ch)." ".curl_error($ch)."</font>";
 curl_close($ch);
 return $page;
 }
@@ -265,6 +357,41 @@
     if($case){return (strcmp(substr($haystack, strlen($haystack) - strlen($needle)),$needle)===0);}
     return (strcasecmp(substr($haystack, strlen($haystack) - strlen($needle)),$needle)===0);
 }
+function bracketsMeanNewLine($input) {
+    return str_replace(")","</small>",str_replace("(","<br><small>",$input));
+}
+
+function viaPoints($tripid,$stopid, $timingPointsOnly = false) {
+    global $APIurl;
+    $url = $APIurl."/json/tripstoptimes?trip=".$tripid;
+
+$json = json_decode(getPage($url));
+debug(print_r($json,true));
+$stops = $json[0];
+$times = $json[1];
+$foundStop = false;
+$viaPoints = Array();
+foreach ($stops as $key => $row)
+{
+    if ($foundStop) {
+        if (!$timingPointsOnly || !startsWith($row[5],"Wj") ) {
+            $viaPoints[] = Array("id" => $row[0], "name" => $row[1], "time" => $times[$key]);
+        }
+    } else {
+        if ($row[0] == $stopid) $foundStop = true;
+    }
+}
+    return $viaPoints;
+}
+
+function viaPointNames($tripid,$stopid) {
+    $points = viaPoints($tripid,$stopid,true);
+    $pointNames = Array();
+    foreach ($points as $point) {
+        $pointNames[] = $point['name'];
+    }
+    return implode(", ",$pointNames);
+}
 ?>