Merge branch 'master' of https://github.com/maxious/ACTBus-ui
--- /dev/null
+++ b/.box
@@ -1,1 +1,5 @@
+shared_writable_dirs:
+ - /labs/tiles
+ - /lib/staticmaplite/cache
+php_extensions: [pgsql, pdo, pdo_pgsql, curl]
--- /dev/null
+++ b/.gitignore
@@ -1,1 +1,8 @@
+/labs/tiles/12
+/labs/tiles/13
+/labs/tiles/14
+/labs/tiles/15
+/labs/tiles/16
+/labs/tiles/17
+/labs/tiles/19
--- a/about.php
+++ b/about.php
@@ -17,6 +17,14 @@
Feedback encouraged; contact maxious@lambdacomplex.org<br />
<br />
Some icons by Joseph Wain / glyphish.com<br />
+Native clients also available for iPhone(<a href="http://itunes.apple.com/au/app/cbrtimetable/id444287349?mt=8">cbrTimetable by Sandor Kolotenko</a>
+, <a href="http://itunes.apple.com/au/app/act-buses/id376634797?mt=8">ACT Buses by David Sullivan</a>)
+and Android (<a href="https://market.android.com/details?id=com.action">MyBus 2.0 by Imagine Team</a>)
+<br />
+GTFS-realtime API;
+Alerts and Trip Updates (but only Cancelled or Stop Skipped)
+Default format binary but can get JSON by adding ?ascii=yes
+<br />
<br />
<small>Disclaimer: The content of this website is of a general and informative nature. Please check with printed timetables or those available on http://action.act.gov.au before your trip.
Whilst every effort has been made to ensure the high quality and accuracy of the Site, the Author makes no warranty,
--- a/aws/awsStartup.sh
+++ b/aws/awsStartup.sh
@@ -5,35 +5,9 @@
#postgres postgres-server php-pg
#http://www.how2forge.org/installing-lighttpd-with-php5-and-mysql-support-on-fedora-12
-cp /root/aws.php /tmp/
-mkdir /var/www/lib/staticmaplite/cache
-chcon -h system_u:object_r:httpd_sys_content_t /var/www
-chcon -R -h root:object_r:httpd_sys_content_t /var/www/*
-chcon -R -t httpd_sys_content_rw_t /var/www/lib/staticmaplite/cache
-chmod -R 777 /var/www/lib/staticmaplite/cache
-chcon -R -t httpd_sys_content_rw_t /var/www/labs/tiles
-chmod -R 777 /var/www/labs/tiles
-wget http://s3-ap-southeast-1.amazonaws.com/busresources/cbrfeed.zip \
--O /var/www/cbrfeed.zip
+sh busuiphp.sh
+sh busuidb.sh
+sh busuiotp.sh
-createdb transitdata
-createlang -d transitdata plpgsql
-psql -d transitdata -f /var/www/lib/postgis.sql
-# curl https://github.com/maxious/ACTBus-ui/raw/master/transitdata.cbrfeed.sql.gz -o transitdata.cbrfeed.sql.gz
-#made with pg_dump transitdata | gzip -c > transitdata.cbrfeed.sql.gz
-gunzip /var/www/transitdata.cbrfeed.sql.gz
-psql -d transitdata -f /var/www/transitdata.cbrfeed.sql
-#createuser transitdata -SDRP
-#password transitdata
-#psql -d transitdata -c \"GRANT SELECT ON TABLE agency,calendar,calendar_dates,routes,stop_times,stops,trips TO transitdata;\"
-php /var/www/updatedb.php
-wget http://s3-ap-southeast-1.amazonaws.com/busresources/Graph.obj \
--O /tmp/Graph.obj
-rm -rfv /usr/share/tomcat6/webapps/opentripplanner*
-wget http://s3-ap-southeast-1.amazonaws.com/busresources/opentripplanner-webapp.war \
--O /usr/share/tomcat6/webapps/opentripplanner-webapp.war
-wget http://s3-ap-southeast-1.amazonaws.com/busresources/opentripplanner-api-webapp.war \
--O /usr/share/tomcat6/webapps/opentripplanner-api-webapp.war
-/etc/init.d/tomcat6 restart
--- /dev/null
+++ b/aws/busuidb.sh
@@ -1,1 +1,14 @@
-
+createdb transitdata
+createlang -d transitdata plpgsql
+psql -d transitdata -f /var/www/lib/postgis.sql
+# curl https://github.com/maxious/ACTBus-ui/raw/master/transitdata.cbrfeed.sql.gz -o transitdata.cbrfeed.sql.gz
+#made with pg_dump transitdata | gzip -c > transitdata.cbrfeed.sql.gz
+gunzip /var/www/transitdata.cbrfeed.sql.gz
+psql -d transitdata -f /var/www/transitdata.cbrfeed.sql
+#createuser transitdata -SDRP
+#password transitdata
+#psql -d transitdata -c "GRANT SELECT ON TABLE agency,calendar,calendar_dates,routes,stop_times,stops,trips TO transitdata;"
+#psql -d transitdata -c "GRANT SELECT,INSERT ON TABLE myway_observations,myway_routes,myway_stops,myway_timingdeltas TO transitdata;"
+#psql -d transitdata -c "GRANT SELECT,INSERT,UPDATE ON TABLE myway_routes,myway_stops TO transitdata;"
+##psql -d transitdata -c "GRANT SELECT ON ALL TABLES IN SCHEMA public TO transitdata;"
+php /var/www/updatedb.php
--- /dev/null
+++ b/aws/busuiotp.sh
@@ -1,1 +1,10 @@
+wget http://s3-ap-southeast-1.amazonaws.com/busresources/Graph.obj \
+-O /tmp/Graph.obj
+/etc/init.d/tomcat6 stop
+rm -rfv /usr/share/tomcat6/webapps/opentripplanner*
+wget http://s3-ap-southeast-1.amazonaws.com/busresources/opentripplanner-webapp.war \
+-O /usr/share/tomcat6/webapps/opentripplanner-webapp.war
+wget http://s3-ap-southeast-1.amazonaws.com/busresources/opentripplanner-api-webapp.war \
+-O /usr/share/tomcat6/webapps/opentripplanner-api-webapp.war
+/etc/init.d/tomcat6 restart
--- /dev/null
+++ b/aws/busuiotp.testing.sh
@@ -1,1 +1,10 @@
+wget http://s3-ap-southeast-1.amazonaws.com/busresources/testing/Graph.obj \
+-O /tmp/Graph.obj
+/etc/init.d/tomcat6 stop
+rm -rfv /usr/share/tomcat6/webapps/opentripplanner*
+wget http://s3-ap-southeast-1.amazonaws.com/busresources/testing/opentripplanner-webapp.war \
+-O /usr/share/tomcat6/webapps/opentripplanner-webapp.war
+wget http://s3-ap-southeast-1.amazonaws.com/busresources/testing/opentripplanner-api-webapp.war \
+-O /usr/share/tomcat6/webapps/opentripplanner-api-webapp.war
+/etc/init.d/tomcat6 restart
--- /dev/null
+++ b/aws/busuiphp.sh
@@ -1,1 +1,16 @@
+cp /root/aws.php /tmp/
+mkdir /var/www/lib/staticmaplite/cache
+chcon -h system_u:object_r:httpd_sys_content_t /var/www
+chcon -R -h root:object_r:httpd_sys_content_t /var/www/*
+chcon -R -t httpd_sys_content_rw_t /var/www/lib/staticmaplite/cache
+chmod -R 777 /var/www/lib/staticmaplite/cache
+
+chcon -R -t httpd_sys_content_rw_t /var/www/labs/tiles
+chmod -R 777 /var/www/labs/tiles
+
+chcon -R -t httpd_sys_content_rw_t /var/www/lib/openid-php/oid_store
+chmod -R 777 /var/www/lib/openid-php/oid_store
+
+wget http://s3-ap-southeast-1.amazonaws.com/busresources/cbrfeed.zip \
+-O /var/www/cbrfeed.zip
--- /dev/null
+++ b/aws/data-sources.xml
@@ -1,1 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
+ <!-- Single graph -->
+ <import resource="classpath:org/opentripplanner/api/application-context.xml" />
+
+ <bean id="graphBundle" class="org.opentripplanner.model.GraphBundle">
+ <property name="path" value="/tmp/" />
+ </bean>
+
+</beans>
+
Binary files /dev/null and b/css/images/warning.png differ
--- a/css/jquery.mobile-1.0a4.css
+++ /dev/null
@@ -1,1661 +1,1 @@
-/*!
- * jQuery Mobile v1.0a4
- * http://jquerymobile.com/
- *
- * Copyright 2010, jQuery Project
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- */
-/*
-* jQuery Mobile Framework
-* Copyright (c) jQuery Project
-* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
-* Note: Code is in draft form and is subject to change
-*/
-
-/* A
------------------------------------------------------------------------------------------------------------*/
-
-.ui-bar-a {
- border: 1px solid #2A2A2A;
- background: #111111;
- color: #ffffff;
- font-weight: bold;
- text-shadow: 0 -1px 1px #000000;
- background-image: -moz-linear-gradient(top,
- #3c3c3c,
- #111111);
- background-image: -webkit-gradient(linear,left top,left bottom,
- color-stop(0, #3c3c3c),
- color-stop(1, #111111));
- -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#3c3c3c', EndColorStr='#111111')";
-}
-.ui-bar-a,
-.ui-bar-a input,
-.ui-bar-a select,
-.ui-bar-a textarea,
-.ui-bar-a button {
- font-family: Helvetica, Arial, sans-serif;
-}
-.ui-bar-a .ui-link-inherit {
- color: #fff;
-}
-.ui-bar-a .ui-link {
- color: #7cc4e7;
- font-weight: bold;
-}
-.ui-body-a {
- border: 1px solid #2A2A2A;
- background: #222222;
- color: #fff;
- text-shadow: 0 1px 0 #000;
- font-weight: normal;
- background-image: -moz-linear-gradient(top,
- #666666,
- #222222);
- background-image: -webkit-gradient(linear,left top,left bottom,
- color-stop(0, #666666),
- color-stop(1, #222222));
- -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#666666', EndColorStr='#222222)')";
-}
-.ui-body-a,
-.ui-body-a input,
-.ui-body-a select,
-.ui-body-a textarea,
-.ui-body-a button {
- font-family: Helvetica, Arial, sans-serif;
-}
-.ui-body-a .ui-link-inherit {
- color: #fff;
-}
-.ui-body-a .ui-link {
- color: #2489CE;
- font-weight: bold;
-}
-.ui-br {
- border-bottom: rgb(130,130,130);
- border-bottom: rgba(130,130,130,.3);
- border-bottom-width: 1px;
- border-bottom-style: solid;
-}
-.ui-btn-up-a {
- border: 1px solid #222;
- background: #333333;
- font-weight: bold;
- color: #fff;
- text-shadow: 0 -1px 1px #000;
- background-image: -moz-linear-gradient(top,
- #555555,
- #333333);
- background-image: -webkit-gradient(linear,left top,left bottom,
- color-stop(0, #555555),
- color-stop(1, #333333));
- -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#555555', EndColorStr='#333333')";
-}
-.ui-btn-up-a a.ui-link-inherit {
- color: #fff;
-}
-.ui-btn-hover-a {
- border: 1px solid #000;
- background: #444444;
- font-weight: bold;
- color: #fff;
- text-shadow: 0 -1px 1px #000;
- background-image: -moz-linear-gradient(top,
- #666666,
- #444444);
- background-image: -webkit-gradient(linear,left top,left bottom,
- color-stop(0, #666666),
- color-stop(1, #444444));
- -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#666666', EndColorStr='#444444')";
-}
-.ui-btn-hover-a a.ui-link-inherit {
- color: #fff;
-}
-.ui-btn-down-a {
- border: 1px solid #000;
- background: #3d3d3d;
- font-weight: bold;
- color: #fff;
- text-shadow: 0 -1px 1px #000;
- background-image: -moz-linear-gradient(top,
- #333333,
- #5a5a5a);
- background-image: -webkit-gradient(linear,left top,left bottom,
- color-stop(0, #333333),
- color-stop(1, #5a5a5a));
- -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#333333', EndColorStr='#5a5a5a')";
-}
-.ui-btn-down-a a.ui-link-inherit {
- color: #fff;
-}
-.ui-btn-up-a,
-.ui-btn-hover-a,
-.ui-btn-down-a {
- font-family: Helvetica, Arial, sans-serif;
- text-decoration: none;
-}
-
-
-/* B
------------------------------------------------------------------------------------------------------------*/
-
-.ui-bar-b {
- border: 1px solid #456f9a;
- background: #5e87b0;
- color: #fff;
- font-weight: bold;
- text-shadow: 0 -1px 1px #254f7a;
- background-image: -moz-linear-gradient(top,
- #81a8ce,
- #5e87b0);
- background-image: -webkit-gradient(linear,left top,left bottom,
- color-stop(0, #81a8ce),
- color-stop(1, #5e87b0));
- -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#81a8ce', EndColorStr='#5e87b0')";
-}
-.ui-bar-b,
-.ui-bar-b input,
-.ui-bar-b select,
-.ui-bar-b textarea,
-.ui-bar-b button {
- font-family: Helvetica, Arial, sans-serif;
-}
-.ui-bar-b .ui-link-inherit {
- color: #fff;
-}
-.ui-bar-b .ui-link {
- color: #7cc4e7;
- font-weight: bold;
-}
-
-.ui-body-b {
- border: 1px solid #C6C6C6;
- background: #cccccc;
- color: #333333;
- text-shadow: 0 1px 0 #fff;
- font-weight: normal;
- background-image: -moz-linear-gradient(top,
- #e6e6e6,
- #cccccc);
- background-image: -webkit-gradient(linear,left top,left bottom,
- color-stop(0, #e6e6e6),
- color-stop(1, #cccccc));
- -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#e6e6e6', EndColorStr='#cccccc')";
-}
-.ui-body-b,
-.ui-body-b input,
-.ui-body-b select,
-.ui-body-b textarea,
-.ui-body-b button {
- font-family: Helvetica, Arial, sans-serif;
-}
-.ui-body-b .ui-link-inherit {
- color: #333333;
-}
-.ui-body-b .ui-link {
- color: #2489CE;
- font-weight: bold;
-}
-.ui-btn-up-b {
- border: 1px solid #145072;
- background: #2567ab;
- font-weight: bold;
- color: #fff;
- text-shadow: 0 -1px 1px #145072;
- background-image: -moz-linear-gradient(top,
- #4e89c5,
- #2567ab);
- background-image: -webkit-gradient(linear,left top,left bottom,
- color-stop(0, #5f9cc5),
- color-stop(1, #396b9e));
- -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#4e89c5', EndColorStr='#2567ab')";
-}
-.ui-btn-up-b a.ui-link-inherit {
- color: #fff;
-}
-.ui-btn-hover-b {
- border: 1px solid #00516e;
- background: #4b88b6;
- font-weight: bold;
- color: #fff;
- text-shadow: 0 -1px 1px #014D68;
- background-image: -moz-linear-gradient(top,
- #72b0d4,
- #4b88b6);
- background-image: -webkit-gradient(linear,left top,left bottom,
- color-stop(0, #72b0d4),
- color-stop(1, #4b88b6));
- -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#72b0d4', EndColorStr='#4b88b6')";
-}
-.ui-btn-hover-b a.ui-link-inherit {
- color: #fff;
-}
-.ui-btn-down-b {
- border: 1px solid #225377;
- background: #4e89c5;
- font-weight: bold;
- color: #fff;
- text-shadow: 0 -1px 1px #225377;
- background-image: -moz-linear-gradient(top,
- #396b9e,
- #4e89c5);
- background-image: -webkit-gradient(linear,left top,left bottom,
- color-stop(0, #396b9e),
- color-stop(1, #4e89c5));
- -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#396b9e', EndColorStr='#4e89c5')";
-}
-.ui-btn-down-b a.ui-link-inherit {
- color: #fff;
-}
-.ui-btn-up-b,
-.ui-btn-hover-b,
-.ui-btn-down-b {
- font-family: Helvetica, Arial, sans-serif;
- text-decoration: none;
-}
-
-
-/* C
------------------------------------------------------------------------------------------------------------*/
-
-.ui-bar-c {
- border: 1px solid #B3B3B3;
- background: #e9eaeb;
- color: #3E3E3E;
- font-weight: bold;
- text-shadow: 0 1px 1px #fff;
- background-image: -moz-linear-gradient(top,
- #f0f0f0,
- #e9eaeb);
- background-image: -webkit-gradient(linear,left top,left bottom,
- color-stop(0, #f0f0f0),
- color-stop(1, #e9eaeb));
- -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#f0f0f0', EndColorStr='#e9eaeb')";
-}
-.ui-bar-c,
-.ui-bar-c input,
-.ui-bar-c select,
-.ui-bar-c textarea,
-.ui-bar-c button {
- font-family: Helvetica, Arial, sans-serif;
-}
-.ui-body-c {
- border: 1px solid #B3B3B3;
- color: #333333;
- text-shadow: 0 1px 0 #fff;
- background: #f0f0f0;
- background-image: -moz-linear-gradient(top,
- #eeeeee,
- #dddddd);
- background-image: -webkit-gradient(linear,left top,left bottom,
- color-stop(0, #eeeeee),
- color-stop(1, #dddddd));
- -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#eeeeee', EndColorStr='#dddddd')";
-}
-.ui-body-c,
-.ui-body-c input,
-.ui-body-c select,
-.ui-body-c textarea,
-.ui-body-c button {
- font-family: Helvetica, Arial, sans-serif;
-}
-.ui-body-c .ui-link-inherit {
- color: #333333;
-}
-.ui-body-c .ui-link {
- color: #2489CE;
- font-weight: bold;
-}
-
-.ui-btn-up-c {
- border: 1px solid #ccc;
- background: #eee;
- font-weight: bold;
- color: #444;
- text-shadow: 0 1px 1px #f6f6f6;
- background-image: -moz-linear-gradient(top,
- #fefefe,
- #eeeeee);
- background-image: -webkit-gradient(linear,left top,left bottom,
- color-stop(0, #fdfdfd),
- color-stop(1, #eeeeee));
- -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#fdfdfd', EndColorStr='#eeeeee')";
-}
-.ui-btn-up-c a.ui-link-inherit {
- color: #2F3E46;
-}
-
-.ui-btn-hover-c {
- border: 1px solid #bbb;
- background: #dadada;
- font-weight: bold;
- color: #101010;
- text-shadow: 0 1px 1px #fff;
- background-image: -moz-linear-gradient(top,
- #ededed,
- #dadada);
- background-image: -webkit-gradient(linear,left top,left bottom,
- color-stop(0, #ededed),
- color-stop(1, #dadada));
- -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#ededed', EndColorStr='#dadada')";
-}
-.ui-btn-hover-c a.ui-link-inherit {
- color: #2F3E46;
-}
-.ui-btn-down-c {
- border: 1px solid #808080;
- background: #fdfdfd;
- font-weight: bold;
- color: #111111;
- text-shadow: 0 1px 1px #ffffff;
- background-image: -moz-linear-gradient(top,
- #eeeeee,
- #fdfdfd);
- background-image: -webkit-gradient(linear,left top,left bottom,
- color-stop(0, #eeeeee),
- color-stop(1, #fdfdfd));
- -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#eeeeee', EndColorStr='#fdfdfd')";
-}
-.ui-btn-down-c a.ui-link-inherit {
- color: #2F3E46;
-}
-.ui-btn-up-c,
-.ui-btn-hover-c,
-.ui-btn-down-c {
- font-family: Helvetica, Arial, sans-serif;
- text-decoration: none;
-}
-
-
-/* D
------------------------------------------------------------------------------------------------------------*/
-
-.ui-bar-d {
- border: 1px solid #ccc;
- background: #bbb;
- color: #333;
- text-shadow: 0 1px 0 #eee;
- background-image: -moz-linear-gradient(top,
- #ddd,
- #bbb);
- background-image: -webkit-gradient(linear,left top,left bottom,
- color-stop(0, #ddd),
- color-stop(1, #bbb));
- -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#dddddd', EndColorStr='#bbbbbb')";
-}
-.ui-bar-d,
-.ui-bar-d input,
-.ui-bar-d select,
-.ui-bar-d textarea,
-.ui-bar-d button {
- font-family: Helvetica, Arial, sans-serif;
-}
-.ui-bar-d .ui-link-inherit {
- color: #333;
-}
-.ui-bar-d .ui-link {
- color: #2489CE;
- font-weight: bold;
-}
-.ui-body-d {
- border: 1px solid #ccc;
- color: #333333;
- text-shadow: 0 1px 0 #fff;
- background: #ffffff;
-}
-.ui-body-d,
-.ui-body-d input,
-.ui-body-d select,
-.ui-body-d textarea,
-.ui-body-d button {
- font-family: Helvetica, Arial, sans-serif;
-}
-.ui-body-d .ui-link-inherit {
- color: #333333;
-}
-.ui-body-d .ui-link {
- color: #2489CE;
- font-weight: bold;
-}
-.ui-btn-up-d {
- border: 1px solid #ccc;
- background: #fff;
- font-weight: bold;
- color: #444;
- text-shadow: 0 1px 1px #fff;
-}
-.ui-btn-up-d a.ui-link-inherit {
- color: #333;
-}
-.ui-btn-hover-d {
- border: 1px solid #aaa;
- background: #eeeeee;
- font-weight: bold;
- color: #222;
- cursor: pointer;
- text-shadow: 0 1px 1px #fff;
- background-image: -moz-linear-gradient(top,
- #fdfdfd,
- #eeeeee);
- background-image: -webkit-gradient(linear,left top,left bottom,
- color-stop(0, #fdfdfd),
- color-stop(1, #eeeeee));
- -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#fdfdfd', EndColorStr='#eeeeee')";
-}
-.ui-btn-hover-d a.ui-link-inherit {
- color: #222;
-}
-.ui-btn-down-d {
- border: 1px solid #aaaaaa;
- background: #ffffff;
- font-weight: bold;
- color: #111;
- text-shadow: 0 1px 1px #ffffff;
- background-image: -moz-linear-gradient(top,
- #eeeeee,
- #ffffff);
- background-image: -webkit-gradient(linear,left top,left bottom,
- color-stop(0, #eeeeee),
- color-stop(1, #ffffff));
- -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#eeeeee', EndColorStr='#ffffff')";
-}
-.ui-btn-down-d a.ui-link-inherit {
- border: 1px solid #808080;
- background: #ced0d2;
- font-weight: bold;
- color: #111;
- text-shadow: none;
- background-image: -moz-linear-gradient(top,
- #cccccc,
- #eeeeee);
- background-image: -webkit-gradient(linear,left top,left bottom,
- color-stop(0, #cccccc),
- color-stop(1, #eeeeee));
- -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#cccccc', EndColorStr='#eeeeee')";
-}
-.ui-btn-up-d,
-.ui-btn-hover-d,
-.ui-btn-down-d {
- font-family: Helvetica, Arial, sans-serif;
- text-decoration: none;
-}
-
-
-/* E
------------------------------------------------------------------------------------------------------------*/
-
-.ui-bar-e {
- border: 1px solid #F7C942;
- background: #fadb4e;
- color: #333;
- text-shadow: 0 1px 0 #fff;
- background-image: -moz-linear-gradient(top,
- #fceda7,
- #fadb4e);
- background-image: -webkit-gradient(linear,left top,left bottom,
- color-stop(0, #fceda7),
- color-stop(1, #fadb4e));
- -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#fceda7', EndColorStr='#fadb4e')";
-}
-.ui-bar-e,
-.ui-bar-e input,
-.ui-bar-e select,
-.ui-bar-e textarea,
-.ui-bar-d button {
- font-family: Helvetica, Arial, sans-serif;
-}
-.ui-bar-e .ui-link-inherit {
- color: #333;
-}
-.ui-bar-e .ui-link {
- color: #2489CE;
- font-weight: bold;
-}
-.ui-body-e {
- border: 1px solid #F7C942;
- color: #333333;
- text-shadow: 0 1px 0 #fff;
- background: #faeb9e;
- background-image: -moz-linear-gradient(top,
- #fff,
- #faeb9e);
- background-image: -webkit-gradient(linear,left top,left bottom,
- color-stop(0, #fff),
- color-stop(1, #faeb9e));
- -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#ffffff', EndColorStr='#faeb9e')";
-}
-.ui-body-e,
-.ui-body-e input,
-.ui-body-e select,
-.ui-body-e textarea,
-.ui-body-e button {
- font-family: Helvetica, Arial, sans-serif;
-}
-.ui-body-e .ui-link-inherit {
- color: #333333;
-}
-.ui-body-e .ui-link {
- color: #2489CE;
- font-weight: bold;
-}
-.ui-btn-up-e {
- border: 1px solid #F7C942;
- background: #fadb4e;
- font-weight: bold;
- color: #333;
- text-shadow: 0 1px 1px #fe3;
- text-shadow: 0 1px 0 #fff;
- background-image: -moz-linear-gradient(top,
- #fceda7,
- #fadb4e);
- background-image: -webkit-gradient(linear,left top,left bottom,
- color-stop(0, #fceda7),
- color-stop(1, #fadb4e));
- -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#fceda7', EndColorStr='#fadb4e')";
-}
-.ui-btn-up-e a.ui-link-inherit {
- color: #333;
-}
-.ui-btn-hover-e {
- border: 1px solid #e79952;
- background: #fbe26f;
- font-weight: bold;
- color: #111;
- text-shadow: 0 1px 1px #fff;
- background-image: -moz-linear-gradient(top,
- #fcf0b5,
- #fbe26f);
- background-image: -webkit-gradient(linear,left top,left bottom,
- color-stop(0, #fcf0b5),
- color-stop(1, #fbe26f));
- -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#fcf0b5', EndColorStr='#fbe26f')";
-}
-
-.ui-btn-hover-e a.ui-link-inherit {
- color: #333;
-}
-.ui-btn-down-e {
- border: 1px solid #F7C942;
- background: #fceda7;
- font-weight: bold;
- color: #111;
- text-shadow: 0 1px 1px #ffffff;
- background-image: -moz-linear-gradient(top,
- #fadb4e,
- #fceda7);
- background-image: -webkit-gradient(linear,left top,left bottom,
- color-stop(0, #fadb4e),
- color-stop(1, #fceda7));
- -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#fadb4e', EndColorStr='#fceda7')";
-}
-.ui-btn-down-e a.ui-link-inherit {
- color: #333;
-}
-.ui-btn-up-e,
-.ui-btn-hover-e,
-.ui-btn-down-e {
- font-family: Helvetica, Arial, sans-serif;
- text-decoration: none;
-}
-
-
-/* links within "buttons"
------------------------------------------------------------------------------------------------------------*/
-
-a.ui-link-inherit {
- text-decoration: none !important;
-}
-
-
-/* Active class used as the "on" state across all themes
------------------------------------------------------------------------------------------------------------*/
-
-.ui-btn-active {
- border: 1px solid #155678;
- background: #4596ce;
- font-weight: bold;
- color: #fff;
- cursor: pointer;
- text-shadow: 0 -1px 1px #145072;
- text-decoration: none;
- background-image: -moz-linear-gradient(top,
- #85bae4,
- #5393c5);
- background-image: -webkit-gradient(linear,left top,left bottom,
- color-stop(0, #85bae4),
- color-stop(1, #5393c5));
- -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#85bae4', EndColorStr='#5393c5')";
- outline: none;
-}
-.ui-btn-active a.ui-link-inherit {
- color: #fff;
-}
-
-
-/* button inner top highlight
------------------------------------------------------------------------------------------------------------*/
-
-.ui-btn-inner {
- border-top: 1px solid #fff;
- border-color: rgba(255,255,255,.3);
-}
-
-
-/* corner rounding classes
------------------------------------------------------------------------------------------------------------*/
-
-.ui-corner-tl {
- -moz-border-radius-topleft: .6em;
- -webkit-border-top-left-radius: .6em;
- border-top-left-radius: .6em;
-}
-.ui-corner-tr {
- -moz-border-radius-topright: .6em;
- -webkit-border-top-right-radius: .6em;
- border-top-right-radius: .6em;
-}
-.ui-corner-bl {
- -moz-border-radius-bottomleft: .6em;
- -webkit-border-bottom-left-radius: .6em;
- border-bottom-left-radius: .6em;
-}
-.ui-corner-br {
- -moz-border-radius-bottomright: .6em;
- -webkit-border-bottom-right-radius: .6em;
- border-bottom-right-radius: .6em;
-}
-.ui-corner-top {
- -moz-border-radius-topleft: .6em;
- -webkit-border-top-left-radius: .6em;
- border-top-left-radius: .6em;
- -moz-border-radius-topright: .6em;
- -webkit-border-top-right-radius: .6em;
- border-top-right-radius: .6em;
-}
-.ui-corner-bottom {
- -moz-border-radius-bottomleft: .6em;
- -webkit-border-bottom-left-radius: .6em;
- border-bottom-left-radius: .6em;
- -moz-border-radius-bottomright: .6em;
- -webkit-border-bottom-right-radius: .6em;
- border-bottom-right-radius: .6em;
- }
-.ui-corner-right {
- -moz-border-radius-topright: .6em;
- -webkit-border-top-right-radius: .6em;
- border-top-right-radius: .6em;
- -moz-border-radius-bottomright: .6em;
- -webkit-border-bottom-right-radius: .6em;
- border-bottom-right-radius: .6em;
-}
-.ui-corner-left {
- -moz-border-radius-topleft: .6em;
- -webkit-border-top-left-radius: .6em;
- border-top-left-radius: .6em;
- -moz-border-radius-bottomleft: .6em;
- -webkit-border-bottom-left-radius: .6em;
- border-bottom-left-radius: .6em;
-}
-.ui-corner-all {
- -moz-border-radius: .6em;
- -webkit-border-radius: .6em;
- border-radius: .6em;
-}
-
-
-
-/* Interaction cues
------------------------------------------------------------------------------------------------------------*/
-.ui-disabled {
- opacity: .3;
-}
-.ui-disabled,
-.ui-disabled a {
- cursor: default !important;
-}
-
-/* Icons
------------------------------------------------------------------------------------------------------------*/
-
-.ui-icon {
- background: #666;
- background: rgba(0,0,0,.4);
- background-image: url(images/icons-18-white.png);
- background-repeat: no-repeat;
- -moz-border-radius: 9px;
- -webkit-border-radius: 9px;
- border-radius: 9px;
-}
-
-
-/* Alt icon color
------------------------------------------------------------------------------------------------------------*/
-
-.ui-icon-alt {
- background: #fff;
- background: rgba(255,255,255,.3);
- background-image: url(images/icons-18-black.png);
- background-repeat: no-repeat;
-}
-
-/* HD/"retina" sprite
------------------------------------------------------------------------------------------------------------*/
-
-@media only screen and (-webkit-min-device-pixel-ratio: 1.5),
- only screen and (min--moz-device-pixel-ratio: 1.5),
- only screen and (min-resolution: 240dpi) {
-
- .ui-icon-plus, .ui-icon-minus, .ui-icon-delete, .ui-icon-arrow-r,
- .ui-icon-arrow-l, .ui-icon-arrow-u, .ui-icon-arrow-d, .ui-icon-check,
- .ui-icon-gear, .ui-icon-refresh, .ui-icon-forward, .ui-icon-back,
- .ui-icon-grid, .ui-icon-star, .ui-icon-alert, .ui-icon-info, .ui-icon-home, .ui-icon-search,
- .ui-icon-checkbox-off, .ui-icon-checkbox-on, .ui-icon-radio-off, .ui-icon-radio-on {
- background-image: url(images/icons-36-white.png);
- -moz-background-size: 776px 18px;
- -o-background-size: 776px 18px;
- -webkit-background-size: 776px 18px;
- background-size: 776px 18px;
- }
- .ui-icon-alt {
- background-image: url(images/icons-36-black.png);
- }
-}
-
-/* plus minus */
-.ui-icon-plus {
- background-position: -0 50%;
-}
-.ui-icon-minus {
- background-position: -36px 50%;
-}
-
-/* delete/close */
-.ui-icon-delete {
- background-position: -72px 50%;
-}
-
-/* arrows */
-.ui-icon-arrow-r {
- background-position: -108px 50%;
-}
-.ui-icon-arrow-l {
- background-position: -144px 50%;
-}
-.ui-icon-arrow-u {
- background-position: -180px 50%;
-}
-.ui-icon-arrow-d {
- background-position: -216px 50%;
-}
-
-/* misc */
-.ui-icon-check {
- background-position: -252px 50%;
-}
-.ui-icon-gear {
- background-position: -288px 50%;
-}
-.ui-icon-refresh {
- background-position: -324px 50%;
-}
-.ui-icon-forward {
- background-position: -360px 50%;
-}
-.ui-icon-back {
- background-position: -396px 50%;
-}
-.ui-icon-grid {
- background-position: -432px 50%;
-}
-.ui-icon-star {
- background-position: -468px 50%;
-}
-.ui-icon-alert {
- background-position: -504px 50%;
-}
-.ui-icon-info {
- background-position: -540px 50%;
-}
-.ui-icon-home {
- background-position: -576px 50%;
-}
-.ui-icon-search {
- background-position: -612px 50%;
-}
-.ui-icon-checkbox-off {
- background-position: -684px 50%;
-}
-.ui-icon-checkbox-on {
- background-position: -648px 50%;
-}
-.ui-icon-radio-off {
- background-position: -756px 50%;
-}
-.ui-icon-radio-on {
- background-position: -720px 50%;
-}
-
-
-/* checks,radios */
-.ui-icon-checkbox-off,
-.ui-icon-checkbox-on,
-.ui-icon-radio-off,
-.ui-icon-radio-on {
- background-color: transparent;
- -moz-border-radius: 0;
- -webkit-border-radius: 0;
- border-radius: 0;
-}
-.ui-icon-searchfield {
- background-image: url(images/icon-search-black.png);
- background-size: 16px 16px;
-}
-
-/* loading icon */
-.ui-icon-loading {
- background-image: url(images/ajax-loader.png);
- width: 40px;
- height: 40px;
- -moz-border-radius: 20px;
- -webkit-border-radius: 20px;
- border-radius: 20px;
- background-size: 35px 35px;
-}
-
-
-/* Button corner classes
------------------------------------------------------------------------------------------------------------*/
-
-.ui-btn-corner-tl {
- -moz-border-radius-topleft: 1em;
- -webkit-border-top-left-radius: 1em;
- border-top-left-radius: 1em;
-}
-.ui-btn-corner-tr {
- -moz-border-radius-topright: 1em;
- -webkit-border-top-right-radius: 1em;
- border-top-right-radius: 1em;
-}
-.ui-btn-corner-bl {
- -moz-border-radius-bottomleft: 1em;
- -webkit-border-bottom-left-radius: 1em;
- border-bottom-left-radius: 1em;
-}
-.ui-btn-corner-br {
- -moz-border-radius-bottomright: 1em;
- -webkit-border-bottom-right-radius: 1em;
- border-bottom-right-radius: 1em;
-}
-.ui-btn-corner-top {
- -moz-border-radius-topleft: 1em;
- -webkit-border-top-left-radius: 1em;
- border-top-left-radius: 1em;
- -moz-border-radius-topright: 1em;
- -webkit-border-top-right-radius: 1em;
- border-top-right-radius: 1em;
-}
-.ui-btn-corner-bottom {
- -moz-border-radius-bottomleft: 1em;
- -webkit-border-bottom-left-radius: 1em;
- border-bottom-left-radius: 1em;
- -moz-border-radius-bottomright: 1em;
- -webkit-border-bottom-right-radius: 1em;
- border-bottom-right-radius: 1em;
-}
-.ui-btn-corner-right {
- -moz-border-radius-topright: 1em;
- -webkit-border-top-right-radius: 1em;
- border-top-right-radius: 1em;
- -moz-border-radius-bottomright: 1em;
- -webkit-border-bottom-right-radius: 1em;
- border-bottom-right-radius: 1em;
-}
-.ui-btn-corner-left {
- -moz-border-radius-topleft: 1em;
- -webkit-border-top-left-radius: 1em;
- border-top-left-radius: 1em;
- -moz-border-radius-bottomleft: 1em;
- -webkit-border-bottom-left-radius: 1em;
- border-bottom-left-radius: 1em;
-}
-.ui-btn-corner-all {
- -moz-border-radius: 1em;
- -webkit-border-radius: 1em;
- border-radius: 1em;
-}
-
-/* radius clip workaround for cleaning up corner trapping */
-.ui-corner-tl,
-.ui-corner-tr,
-.ui-corner-bl,
-.ui-corner-br,
-.ui-corner-top,
-.ui-corner-bottom,
-.ui-corner-right,
-.ui-corner-left,
-.ui-corner-all,
-.ui-btn-corner-tl,
-.ui-btn-corner-tr,
-.ui-btn-corner-bl,
-.ui-btn-corner-br,
-.ui-btn-corner-top,
-.ui-btn-corner-bottom,
-.ui-btn-corner-right,
-.ui-btn-corner-left,
-.ui-btn-corner-all {
- -webkit-background-clip: padding-box;
- -moz-background-clip: padding-box;
- background-clip: padding-box;
-}
-
-/* Overlay / modal
------------------------------------------------------------------------------------------------------------*/
-
-.ui-overlay {
- background: #666;
- opacity: .5;
- filter: Alpha(Opacity=50);
- position: absolute;
- width: 100%;
- height: 100%;
-}
-.ui-overlay-shadow {
- -moz-box-shadow: 0px 0px 12px rgba(0,0,0,.6);
- -webkit-box-shadow: 0px 0px 12px rgba(0,0,0,.6);
- box-shadow: 0px 0px 12px rgba(0,0,0,.6);
-}
-.ui-shadow {
- -moz-box-shadow: 0px 1px 4px rgba(0,0,0,.3);
- -webkit-box-shadow: 0px 1px 4px rgba(0,0,0,.3);
- box-shadow: 0px 1px 4px rgba(0,0,0,.3);
-}
-.ui-bar-a .ui-shadow,
-.ui-bar-b .ui-shadow ,
-.ui-bar-c .ui-shadow {
- -moz-box-shadow: 0px 1px 0 rgba(255,255,255,.3);
- -webkit-box-shadow: 0px 1px 0 rgba(255,255,255,.3);
- box-shadow: 0px 1px 0 rgba(255,255,255,.3);
-}
-.ui-shadow-inset {
- -moz-box-shadow: inset 0px 1px 4px rgba(0,0,0,.2);
- -webkit-box-shadow: inset 0px 1px 4px rgba(0,0,0,.2);
- box-shadow: inset 0px 1px 4px rgba(0,0,0,.2);
-}
-.ui-icon-shadow {
- -moz-box-shadow: 0px 1px 0 rgba(255,255,255,.4);
- -webkit-box-shadow: 0px 1px 0 rgba(255,255,255,.4);
- box-shadow: 0px 1px 0 rgba(255,255,255,.4);
-}
-
-
-/* Focus state - set here for specificity
------------------------------------------------------------------------------------------------------------*/
-
-.ui-focus {
- -moz-box-shadow: 0px 0px 12px #387bbe;
- -webkit-box-shadow: 0px 0px 12px #387bbe;
- box-shadow: 0px 0px 12px #387bbe;
-}
-
-/* unset box shadow in browsers that don't do it right
------------------------------------------------------------------------------------------------------------*/
-
-.ui-mobile-nosupport-boxshadow * {
- -moz-box-shadow: none !important;
- -webkit-box-shadow: none !important;
- box-shadow: none !important;
-}
-
-/* ...and bring back focus */
-.ui-mobile-nosupport-boxshadow .ui-focus {
- outline-width: 2px;
-}/*
-* jQuery Mobile Framework
-* Copyright (c) jQuery Project
-* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
-* Note: Code is in draft form and is subject to change
-*/
-
-/* some unsets - more probably needed */
-.ui-mobile, .ui-mobile body { height: 100%; }
-.ui-mobile fieldset, .ui-page { padding: 0; margin: 0; }
-.ui-mobile a img, .ui-mobile fieldset { border: 0; }
-
-/* responsive page widths */
-.ui-mobile-viewport { margin: 0; overflow-x: hidden; -webkit-text-size-adjust: none; -ms-text-size-adjust:none; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); }
-
-/* "page" containers - full-screen views, one should always be in view post-pageload */
-.ui-mobile [data-role=page], .ui-mobile [data-role=dialog], .ui-page { top: 0; left: 0; width: 100%; min-height: 100%; position: absolute; display: none; border: 0; }
-.ui-mobile .ui-page-active { display: block; overflow: visible; }
-
-/*orientations from js are available */
-.portrait,
-.portrait .ui-page { min-height: 100%; }
-.landscape,
-.landscape .ui-page { min-height: 100%; }
-
-/* loading screen */
-.ui-loading .ui-mobile-viewport { overflow: hidden !important; }
-.ui-loading .ui-loader { display: block; }
-.ui-loading .ui-page { overflow: hidden; }
-.ui-loader { display: none; position: absolute; opacity: .85; z-index: 10; left: 50%; width: 200px; margin-left: -130px; margin-top: -35px; padding: 10px 30px; }
-.ui-loader h1 { font-size: 15px; text-align: center; }
-.ui-loader .ui-icon { position: static; display: block; opacity: .9; margin: 0 auto; width: 35px; height: 35px; background-color: transparent; }
-
-/*fouc*/
-.ui-mobile-rendering > * { visibility: hidden; }
-
-/*headers, content panels*/
-.ui-bar, .ui-body { position: relative; padding: .4em 15px; overflow: hidden; display: block; clear:both; }
-.ui-bar { font-size: 16px; margin: 0; }
-.ui-bar h1, .ui-bar h2, .ui-bar h3, .ui-bar h4, .ui-bar h5, .ui-bar h6 { margin: 0; padding: 0; font-size: 16px; display: inline-block; }
-
-.ui-header, .ui-footer { display: block; }
-.ui-page .ui-header, .ui-page .ui-footer { position: relative; }
-.ui-header .ui-btn-left { position: absolute; left: 10px; top: .4em; }
-.ui-header .ui-btn-right { position: absolute; right: 10px; top: .4em; }
-.ui-header .ui-title, .ui-footer .ui-title { text-align: center; font-size: 16px; display: block; margin: .6em 90px .8em; padding: 0; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; outline: 0 !important; }
-
-/*content area*/
-.ui-content { border-width: 0; overflow: visible; overflow-x: hidden; padding: 15px; }
-.ui-page-fullscreen .ui-content { padding:0; }
-
-/* icons sizing */
-.ui-icon { width: 18px; height: 18px; }
-
-/* fullscreen class on ui-content div */
-.ui-fullscreen { }
-.ui-fullscreen img { max-width: 100%; }
-
-/* non-js content hiding */
-.ui-nojs { position: absolute; left: -9999px; }
-/*
-* jQuery Mobile Framework
-* Copyright (c) jQuery Project
-* Dual licensed under the MIT (MIT-LICENSE.txt) or GPL (GPL-LICENSE.txt) licenses.
-*/
-.spin {
- -webkit-transform: rotate(360deg);
- -webkit-animation-name: spin;
- -webkit-animation-duration: 1s;
- -webkit-animation-iteration-count: infinite;
-}
-@-webkit-keyframes spin {
- from {-webkit-transform: rotate(0deg);}
- to {-webkit-transform: rotate(360deg);}
-}
-
-/* Transitions from jQtouch (with small modifications): http://www.jqtouch.com/
-Built by David Kaneda and maintained by Jonathan Stark.
-*/
-.in, .out {
- -webkit-animation-timing-function: ease-in-out;
- -webkit-animation-duration: 350ms;
-}
-
-.slide.in {
- -webkit-transform: translateX(0);
- -webkit-animation-name: slideinfromright;
-}
-
-.slide.out {
- -webkit-transform: translateX(-100%);
- -webkit-animation-name: slideouttoleft;
-}
-
-.slide.in.reverse {
- -webkit-transform: translateX(0);
- -webkit-animation-name: slideinfromleft;
-}
-
-.slide.out.reverse {
- -webkit-transform: translateX(100%);
- -webkit-animation-name: slideouttoright;
-}
-
-.slideup.in {
- -webkit-transform: translateY(0);
- -webkit-animation-name: slideinfrombottom;
- z-index: 10;
-}
-
-.slideup.out {
- -webkit-animation-name: dontmove;
- z-index: 0;
-}
-
-.slideup.out.reverse {
- -webkit-transform: translateY(100%);
- z-index: 10;
- -webkit-animation-name: slideouttobottom;
-}
-
-.slideup.in.reverse {
- z-index: 0;
- -webkit-animation-name: dontmove;
-}
-.slidedown.in {
- -webkit-transform: translateY(0);
- -webkit-animation-name: slideinfromtop;
- z-index: 10;
-}
-
-.slidedown.out {
- -webkit-animation-name: dontmove;
- z-index: 0;
-}
-
-.slidedown.out.reverse {
- -webkit-transform: translateY(-100%);
- z-index: 10;
- -webkit-animation-name: slideouttotop;
-}
-
-.slidedown.in.reverse {
- z-index: 0;
- -webkit-animation-name: dontmove;
-}
-
-@-webkit-keyframes slideinfromright {
- from { -webkit-transform: translateX(100%); }
- to { -webkit-transform: translateX(0); }
-}
-
-@-webkit-keyframes slideinfromleft {
- from { -webkit-transform: translateX(-100%); }
- to { -webkit-transform: translateX(0); }
-}
-
-@-webkit-keyframes slideouttoleft {
- from { -webkit-transform: translateX(0); }
- to { -webkit-transform: translateX(-100%); }
-}
-
-@-webkit-keyframes slideouttoright {
- from { -webkit-transform: translateX(0); }
- to { -webkit-transform: translateX(100%); }
-}
-
-
-@-webkit-keyframes slideinfromtop {
- from { -webkit-transform: translateY(-100%); }
- to { -webkit-transform: translateY(0); }
-}
-
-@-webkit-keyframes slideinfrombottom {
- from { -webkit-transform: translateY(100%); }
- to { -webkit-transform: translateY(0); }
-}
-
-@-webkit-keyframes slideouttobottom {
- from { -webkit-transform: translateY(0); }
- to { -webkit-transform: translateY(100%); }
-}
-
-@-webkit-keyframes slideouttotop {
- from { -webkit-transform: translateY(0); }
- to { -webkit-transform: translateY(-100%); }
-}
-@-webkit-keyframes fadein {
- from { opacity: 0; }
- to { opacity: 1; }
-}
-
-@-webkit-keyframes fadeout {
- from { opacity: 1; }
- to { opacity: 0; }
-}
-
-.fade.in {
- opacity: 1;
- z-index: 10;
- -webkit-animation-name: fadein;
-}
-.fade.out {
- z-index: 0;
- -webkit-animation-name: fadeout;
-}
-
-/* The properties in this body rule are only necessary for the 'flip' transition.
- * We need specify the perspective to create a projection matrix. This will add
- * some depth as the element flips. The depth number represents the distance of
- * the viewer from the z-plane. According to the CSS3 spec, 1000 is a moderate
- * value.
- */
-.ui-mobile-viewport-perspective {
- -webkit-perspective: 1000;
- position: absolute;
-}
-
-.ui-mobile-viewport-transitioning,
-.ui-mobile-viewport-transitioning .ui-page {
- width: 100%;
- height: 100%;
- overflow: hidden;
-}
-
-.flip {
- -webkit-animation-duration: .65s;
- -webkit-backface-visibility:hidden;
- -webkit-transform:translateX(0); /* Needed to work around an iOS 3.1 bug that causes listview thumbs to disappear when -webkit-visibility:hidden is used. */
-}
-
-.flip.in {
- -webkit-transform: rotateY(0) scale(1);
- -webkit-animation-name: flipinfromleft;
-}
-
-.flip.out {
- -webkit-transform: rotateY(-180deg) scale(.8);
- -webkit-animation-name: flipouttoleft;
-}
-
-/* Shake it all about */
-
-.flip.in.reverse {
- -webkit-transform: rotateY(0) scale(1);
- -webkit-animation-name: flipinfromright;
-}
-
-.flip.out.reverse {
- -webkit-transform: rotateY(180deg) scale(.8);
- -webkit-animation-name: flipouttoright;
-}
-
-@-webkit-keyframes flipinfromright {
- from { -webkit-transform: rotateY(-180deg) scale(.8); }
- to { -webkit-transform: rotateY(0) scale(1); }
-}
-
-@-webkit-keyframes flipinfromleft {
- from { -webkit-transform: rotateY(180deg) scale(.8); }
- to { -webkit-transform: rotateY(0) scale(1); }
-}
-
-@-webkit-keyframes flipouttoleft {
- from { -webkit-transform: rotateY(0) scale(1); }
- to { -webkit-transform: rotateY(-180deg) scale(.8); }
-}
-
-@-webkit-keyframes flipouttoright {
- from { -webkit-transform: rotateY(0) scale(1); }
- to { -webkit-transform: rotateY(180deg) scale(.8); }
-}
-
-
-/* Hackish, but reliable. */
-
-@-webkit-keyframes dontmove {
- from { opacity: 1; }
- to { opacity: 1; }
-}
-
-.pop {
- -webkit-transform-origin: 50% 50%;
-}
-
-.pop.in {
- -webkit-transform: scale(1);
- opacity: 1;
- -webkit-animation-name: popin;
- z-index: 10;
-}
-
-.pop.out.reverse {
- -webkit-transform: scale(.2);
- opacity: 0;
- -webkit-animation-name: popout;
- z-index: 10;
-}
-
-.pop.in.reverse {
- z-index: 0;
- -webkit-animation-name: dontmove;
-}
-
-@-webkit-keyframes popin {
- from {
- -webkit-transform: scale(.2);
- opacity: 0;
- }
- to {
- -webkit-transform: scale(1);
- opacity: 1;
- }
-}
-
-@-webkit-keyframes popout {
- from {
- -webkit-transform: scale(1);
- opacity: 1;
- }
- to {
- -webkit-transform: scale(.2);
- opacity: 0;
- }
-}/*
-* jQuery Mobile Framework
-* Copyright (c) jQuery Project
-* Dual licensed under the MIT (MIT-LICENSE.txt) or GPL (GPL-LICENSE.txt) licenses.
-*/
-
-/* content configurations. */
-.ui-grid-a, .ui-grid-b, .ui-grid-c, .ui-grid-d { overflow: hidden; }
-.ui-block-a, .ui-block-b, .ui-block-c, .ui-block-d, .ui-block-e { margin: 0; padding: 0; border: 0; float: left; min-height:1px;}
-
-/* grid solo: 100 - single item fallback */
-.ui-grid-solo .ui-block-a { width: 100%; float: none; }
-
-/* grid a: 50/50 */
-.ui-grid-a .ui-block-a, .ui-grid-a .ui-block-b { width: 50%; }
-.ui-grid-a .ui-block-a { clear: left; }
-
-/* grid b: 33/33/33 */
-.ui-grid-b .ui-block-a, .ui-grid-b .ui-block-b, .ui-grid-b .ui-block-c { width: 33.333%; }
-.ui-grid-b .ui-block-a { clear: left; }
-
-/* grid c: 25/25/25/25 */
-.ui-grid-c .ui-block-a, .ui-grid-c .ui-block-b, .ui-grid-c .ui-block-c, .ui-grid-c .ui-block-d { width: 25%; }
-.ui-grid-c .ui-block-a { clear: left; }
-
-/* grid d: 20/20/20/20/20 */
-.ui-grid-d .ui-block-a, .ui-grid-d .ui-block-b, .ui-grid-d .ui-block-c, .ui-grid-d .ui-block-d, .ui-grid-d .ui-block-e { width: 20%; }
-.ui-grid-d .ui-block-a { clear: left; }
-/*
-* jQuery Mobile Framework
-* Copyright (c) jQuery Project
-* Dual licensed under the MIT (MIT-LICENSE.txt) or GPL (GPL-LICENSE.txt) licenses.
-*/
-/* fixed page header & footer configuration */
-.ui-header, .ui-footer, .ui-page-fullscreen .ui-header, .ui-page-fullscreen .ui-footer { position: absolute; overflow: hidden; width: 100%; border-left-width: 0; border-right-width: 0; }
-.ui-header-fixed, .ui-footer-fixed {
- z-index: 1000;
- -webkit-transform: translateZ(0); /* Force header/footer rendering to go through the same rendering pipeline as native page scrolling. */
-}
-.ui-footer-duplicate, .ui-page-fullscreen .ui-fixed-inline { display: none; }
-.ui-page-fullscreen .ui-header, .ui-page-fullscreen .ui-footer { opacity: .9; }
-/*
-* jQuery Mobile Framework
-* Copyright (c) jQuery Project
-* Dual licensed under the MIT (MIT-LICENSE.txt) or GPL (GPL-LICENSE.txt) licenses.
-*/
-.ui-navbar { overflow: hidden; }
-.ui-navbar ul, .ui-navbar-expanded ul { list-style:none; padding: 0; margin: 0; position: relative; display: block; border: 0;}
-.ui-navbar-collapsed ul { float: left; width: 75%; margin-right: -2px; }
-.ui-navbar-collapsed .ui-navbar-toggle { float: left; width: 25%; }
-.ui-navbar li.ui-navbar-truncate { position: absolute; left: -9999px; top: -9999px; }
-.ui-navbar li .ui-btn, .ui-navbar .ui-navbar-toggle .ui-btn { display: block; font-size: 12px; text-align: center; margin: 0; border-right-width: 0; }
-.ui-navbar li .ui-btn { margin-right: -1px; }
-.ui-navbar li .ui-btn:last-child { margin-right: 0; }
-.ui-header .ui-navbar li .ui-btn, .ui-header .ui-navbar .ui-navbar-toggle .ui-btn,
-.ui-footer .ui-navbar li .ui-btn, .ui-footer .ui-navbar .ui-navbar-toggle .ui-btn { border-top-width: 0; border-bottom-width: 0; }
-.ui-navbar .ui-btn-inner { padding-left: 2px; padding-right: 2px; }
-.ui-navbar-noicons li .ui-btn .ui-btn-inner, .ui-navbar-noicons .ui-navbar-toggle .ui-btn-inner { padding-top: .8em; padding-bottom: .9em; }
-/*expanded page styles*/
-.ui-navbar-expanded .ui-btn { margin: 0; font-size: 14px; }
-.ui-navbar-expanded .ui-btn-inner { padding-left: 5px; padding-right: 5px; }
-.ui-navbar-expanded .ui-btn-icon-top .ui-btn-inner { padding: 45px 5px 15px; text-align: center; }
-.ui-navbar-expanded .ui-btn-icon-top .ui-icon { top: 15px; }
-.ui-navbar-expanded .ui-btn-icon-bottom .ui-btn-inner { padding: 15px 5px 45px; text-align: center; }
-.ui-navbar-expanded .ui-btn-icon-bottom .ui-icon { bottom: 15px; }
-.ui-navbar-expanded li .ui-btn .ui-btn-inner { min-height: 2.5em; }
-.ui-navbar-expanded .ui-navbar-noicons .ui-btn .ui-btn-inner { padding-top: 1.8em; padding-bottom: 1.9em; }
-/*
-* jQuery Mobile Framework
-* Copyright (c) jQuery Project
-* Dual licensed under the MIT (MIT-LICENSE.txt) or GPL (GPL-LICENSE.txt) licenses.
-*/
-.ui-btn { display: block; text-align: center; cursor:pointer; position: relative; margin: .5em 5px; padding: 0; }
-.ui-btn:focus, .ui-btn:active { outline: none; }
-.ui-header .ui-btn, .ui-footer .ui-btn, .ui-bar .ui-btn { display: inline-block; font-size: 13px; margin: 0; }
-.ui-btn-inline { display: inline-block; }
-.ui-btn-inner { padding: .6em 25px; display: block; height: 100%; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; position: relative; }
-.ui-header .ui-btn-inner, .ui-footer .ui-btn-inner, .ui-bar .ui-btn-inner { padding: .4em 8px .5em; }
-.ui-btn-icon-notext { display: inline-block; width: 20px; height: 20px; padding: 2px 1px 2px 3px; text-indent: -9999px; }
-.ui-btn-icon-notext .ui-btn-inner { padding: 0; }
-.ui-btn-icon-notext .ui-btn-text { position: absolute; left: -999px; }
-.ui-btn-icon-left .ui-btn-inner { padding-left: 33px; }
-.ui-header .ui-btn-icon-left .ui-btn-inner,
-.ui-footer .ui-btn-icon-left .ui-btn-inner,
-.ui-bar .ui-btn-icon-left .ui-btn-inner { padding-left: 27px; }
-.ui-btn-icon-right .ui-btn-inner { padding-right: 33px; }
-.ui-header .ui-btn-icon-right .ui-btn-inner,
-.ui-footer .ui-btn-icon-right .ui-btn-inner,
-.ui-bar .ui-btn-icon-right .ui-btn-inner { padding-right: 27px; }
-.ui-btn-icon-top .ui-btn-inner { padding-top: 33px; }
-.ui-header .ui-btn-icon-top .ui-btn-inner,
-.ui-footer .ui-btn-icon-top .ui-btn-inner,
-.ui-bar .ui-btn-icon-top .ui-btn-inner { padding-top: 27px; }
-.ui-btn-icon-bottom .ui-btn-inner { padding-bottom: 33px; }
-.ui-header .ui-btn-icon-bottom .ui-btn-inner,
-.ui-footer .ui-btn-icon-bottom .ui-btn-inner,
-.ui-bar .ui-btn-icon-bottom .ui-btn-inner { padding-bottom: 27px; }
-
-/*btn icon positioning*/
-.ui-btn-icon-notext .ui-icon { display: block; }
-.ui-btn-icon-left .ui-icon, .ui-btn-icon-right .ui-icon { position: absolute; top: 50%; margin-top: -9px; }
-.ui-btn-icon-top .ui-icon, .ui-btn-icon-bottom .ui-icon { position: absolute; left: 50%; margin-left: -9px; }
-.ui-btn-icon-left .ui-icon { left: 10px; }
-.ui-btn-icon-right .ui-icon {right: 10px; }
-.ui-header .ui-btn-icon-left .ui-icon,
-.ui-footer .ui-btn-icon-left .ui-icon,
-.ui-bar .ui-btn-icon-left .ui-icon { left: 4px; }
-.ui-header .ui-btn-icon-right .ui-icon,
-.ui-footer .ui-btn-icon-right .ui-icon,
-.ui-bar .ui-btn-icon-right .ui-icon { right: 4px; }
-.ui-header .ui-btn-icon-top .ui-icon,
-.ui-footer .ui-btn-icon-top .ui-icon,
-.ui-bar .ui-btn-icon-top .ui-icon { top: 4px; }
-.ui-header .ui-btn-icon-bottom .ui-icon,
-.ui-footer .ui-btn-icon-bottom .ui-icon,
-.ui-bar .ui-btn-icon-bottom .ui-icon { bottom: 4px; }
-.ui-btn-icon-top .ui-icon { top: 5px; }
-.ui-btn-icon-bottom .ui-icon { bottom: 5px; }
-/*hiding native button,inputs */
-.ui-btn-hidden { position: absolute; top: 0; left: 0; width: 100%; height: 100%; -webkit-appearance: button; opacity: 0; cursor: pointer; -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; filter: alpha(opacity=0); }
-/*
-* jQuery Mobile Framework
-* Copyright (c) jQuery Project
-* Dual licensed under the MIT (MIT-LICENSE.txt) or GPL (GPL-LICENSE.txt) licenses.
-*/
-.ui-collapsible-contain { margin: .5em 0; }
-.ui-collapsible-heading { font-size: 16px; display: block; margin: 0 -8px; padding: 0; border-width: 0 0 1px 0; position: relative; }
-.ui-collapsible-heading a { text-align: left; margin: 0; }
-.ui-collapsible-heading a .ui-btn-inner { padding-left: 40px; }
-.ui-collapsible-heading a span.ui-btn { position: absolute; left: 6px; top: 50%; margin: -12px 0 0 0; width: 20px; height: 20px; padding: 1px 0px 1px 2px; text-indent: -9999px; }
-.ui-collapsible-heading a span.ui-btn .ui-btn-inner { padding: 0; }
-.ui-collapsible-heading a span.ui-btn .ui-icon { left: 0; margin-top: -10px; }
-.ui-collapsible-heading-status { position:absolute; left:-9999px; }
-.ui-collapsible-content { display: block; padding: 10px 0 10px 8px; }
-.ui-collapsible-content-collapsed { display: none; }
-
-.ui-collapsible-set { margin: .5em 0; }
-.ui-collapsible-set .ui-collapsible-contain { margin: -1px 0 0; }
-/*
-* jQuery Mobile Framework
-* Copyright (c) jQuery Project
-* Dual licensed under the MIT (MIT-LICENSE.txt) or GPL (GPL-LICENSE.txt) licenses.
-*/
-.ui-controlgroup, fieldset.ui-controlgroup { padding: 0; margin: .5em 0 1em; }
-.ui-bar .ui-controlgroup { margin: 0 .3em; }
-.ui-controlgroup-label { font-size: 16px; line-height: 1.4; font-weight: normal; margin: 0 0 .3em; }
-.ui-controlgroup-controls { display: block; width: 95%;}
-.ui-controlgroup li { list-style: none; }
-.ui-controlgroup-vertical .ui-btn,
-.ui-controlgroup-vertical .ui-checkbox, .ui-controlgroup-vertical .ui-radio { margin: 0; border-bottom-width: 0; }
-.ui-controlgroup-vertical .ui-controlgroup-last { border-bottom-width: 1px; }
-.ui-controlgroup-horizontal { padding: 0; }
-.ui-controlgroup-horizontal .ui-btn,
-.ui-controlgroup-horizontal .ui-checkbox, .ui-controlgroup-horizontal .ui-radio { display: inline-block; margin: 0 -5px 0 0; }
-.ui-controlgroup-horizontal .ui-checkbox, .ui-controlgroup-horizontal .ui-radio { display: inline; }
-.ui-controlgroup-horizontal .ui-checkbox .ui-btn, .ui-controlgroup-horizontal .ui-radio .ui-btn,
-.ui-controlgroup-horizontal .ui-checkbox:last-child, .ui-controlgroup-horizontal .ui-radio:last-child { margin-right: 0; }
-.ui-controlgroup-horizontal .ui-controlgroup-last { margin-right: 0; }
-.ui-controlgroup .ui-checkbox label, .ui-controlgroup .ui-radio label { font-size: 16px; }
-/* conflicts with listview..
-.ui-controlgroup .ui-btn-icon-notext { width: 30px; height: 30px; text-indent: -9999px; }
-.ui-controlgroup .ui-btn-icon-notext .ui-btn-inner { padding: 5px 6px 5px 5px; }
-*/
-
-.min-width-480px .ui-controlgroup-label { vertical-align: top; display: inline-block; width: 20%; margin: 0 2% 0 0; }
-.min-width-480px .ui-controlgroup-controls { width: 60%; display: inline-block; } /*
-* jQuery Mobile Framework
-* Copyright (c) jQuery Project
-* Dual licensed under the MIT (MIT-LICENSE.txt) or GPL (GPL-LICENSE.txt) licenses.
-*/
-.ui-dialog { min-height: 480px; }
-.ui-dialog .ui-header, .ui-dialog .ui-content, .ui-dialog .ui-footer { margin: 15px; position: relative; }
-.ui-dialog .ui-header, .ui-dialog .ui-footer { z-index: 10; width: auto; }
-.ui-dialog .ui-content, .ui-dialog .ui-footer { margin-top: -15px; }/*
-* jQuery Mobile Framework
-* Copyright (c) jQuery Project
-* Dual licensed under the MIT (MIT-LICENSE.txt) or GPL (GPL-LICENSE.txt) licenses.
-*/
-.ui-checkbox, .ui-radio { position:relative; margin: .2em 0 .5em; z-index: 1; }
-.ui-checkbox .ui-btn, .ui-radio .ui-btn { margin: 0; text-align: left; z-index: 2; }
-.ui-checkbox .ui-btn-icon-left .ui-btn-inner,.ui-radio .ui-btn-icon-left .ui-btn-inner { padding-left: 45px; }
-.ui-checkbox .ui-btn-icon-right .ui-btn-inner, .ui-radio .ui-btn-icon-right .ui-btn-inner { padding-right: 45px; }
-.ui-checkbox .ui-btn-icon-left .ui-icon, .ui-radio .ui-btn-icon-left .ui-icon {left: 15px; }
-.ui-checkbox .ui-btn-icon-right .ui-icon, .ui-radio .ui-btn-icon-right .ui-icon {right: 15px; }
-/* input, label positioning */
-.ui-checkbox input,.ui-radio input { position:absolute; left:20px; top:50%; width: 10px; height: 10px; margin:-5px 0 0 0; outline: 0 !important; z-index: 1; }/*
-* jQuery Mobile Framework
-* Copyright (c) jQuery Project
-* Dual licensed under the MIT (MIT-LICENSE.txt) or GPL (GPL-LICENSE.txt) licenses.
-*/
-.ui-field-contain { background: none; padding: 1.5em 0; margin: 0; border-bottom-width: 1px; overflow: visible; }
-.ui-field-contain:first-child { border-top-width: 0; }
-.min-width-480px .ui-field-contain { border-width: 0; padding: 0; margin: 1em 0; }/*
-* jQuery Mobile Framework
-* Copyright (c) jQuery Project
-* Dual licensed under the MIT (MIT-LICENSE.txt) or GPL (GPL-LICENSE.txt) licenses.
-*/
-.ui-select { display: block; position: relative; }
-.ui-select select { position: absolute; left: -9999px; top: -9999px; }
-.ui-select .ui-btn { overflow: hidden; }
-.ui-select .ui-btn select { cursor: pointer; -webkit-appearance: button; left: 0; top:0; width: 100%; height: 100%; opacity: 0; -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; filter: alpha(opacity=0); }
-.ui-select .ui-btn select.ui-select-nativeonly { opacity: 1; }
-
-.ui-select .ui-btn-icon-right .ui-btn-inner { padding-right: 45px; }
-.ui-select .ui-btn-icon-right .ui-icon { right: 15px; }
-
-/* labels */
-label.ui-select { font-size: 16px; line-height: 1.4; font-weight: normal; margin: 0 0 .3em; display: block; }
-
-/*listbox*/
-.ui-select .ui-btn-text, .ui-selectmenu .ui-btn-text { display: inline-block; min-height: 1em; }
-.ui-select .ui-btn-text { text-overflow: ellipsis; overflow: hidden; display: block;}
-
-.ui-selectmenu { position: absolute; padding: 0; z-index: 100 !important; width: 80%; max-width: 350px; padding: 6px; }
-.ui-selectmenu .ui-listview { margin: 0; }
-.ui-selectmenu .ui-btn.ui-li-divider { cursor: default; }
-.ui-selectmenu-hidden { top: -9999px; left: -9999px; }
-.ui-selectmenu-screen { position: absolute; top: 0; left: 0; width: 100%; height: 100%; z-index: 99; }
-.ui-screen-hidden, .ui-selectmenu-list .ui-li .ui-icon { display: none; }
-.ui-selectmenu-list .ui-li .ui-icon { display: block; }
-.ui-li.ui-selectmenu-placeholder { display: none; }
-.ui-selectmenu .ui-header .ui-title { margin: 0.6em 46px 0.8em; }
-
-.min-width-480px label.ui-select { display: inline-block; width: 20%; margin: 0 2% 0 0; }
-.min-width-480px .ui-select { width: 60%; display: inline-block; }
-
-/* when no placeholder is defined in a multiple select, the header height doesn't even extend past the close button. this shim's content in there */
-.ui-selectmenu .ui-header h1:after { content: '.'; visibility: hidden; }/*
-* jQuery Mobile Framework
-* Copyright (c) jQuery Project
-* Dual licensed under the MIT (MIT-LICENSE.txt) or GPL (GPL-LICENSE.txt) licenses.
-*/
-label.ui-input-text { font-size: 16px; line-height: 1.4; display: block; font-weight: normal; margin: 0 0 .3em; }
-input.ui-input-text, textarea.ui-input-text { background-image: none; padding: .4em; line-height: 1.4; font-size: 16px; display: block; width: 95%; }
-input.ui-input-text { -webkit-appearance: none; }
-textarea.ui-input-text { height: 50px; -webkit-transition: height 200ms linear; -moz-transition: height 200ms linear; -o-transition: height 200ms linear; transition: height 200ms linear; }
-.ui-input-search { padding: 0 30px; width: 77%; background-position: 8px 50%; background-repeat: no-repeat; position: relative; }
-.ui-input-search input.ui-input-text { border: none; width: 98%; padding: .4em 0; margin: 0; display: block; background: transparent none; outline: 0 !important; }
-.ui-input-search .ui-input-clear { position: absolute; right: 0; top: 50%; margin-top: -14px; }
-.ui-input-search .ui-input-clear-hidden { display: none; }
-
-/* orientation adjustments - incomplete!*/
-.min-width-480px label.ui-input-text { vertical-align: top; }
-.min-width-480px label.ui-input-text { display: inline-block; width: 20%; margin: 0 2% 0 0; }
-.min-width-480px input.ui-input-text,
-.min-width-480px textarea.ui-input-text,
-.min-width-480px .ui-input-search { width: 60%; display: inline-block; }
-.min-width-480px .ui-input-search { width: 50%; }
-.min-width-480px .ui-input-search input.ui-input-text { width: 98%; /*echos rule from above*/ }
-/*
-* jQuery Mobile Framework
-* Copyright (c) jQuery Project
-* Dual licensed under the MIT (MIT-LICENSE.txt) or GPL (GPL-LICENSE.txt) licenses.
-*/
-.ui-listview { margin: 0; counter-reset: listnumbering; }
-.ui-content .ui-listview { margin: -15px; }
-.ui-content .ui-listview-inset { margin: 1em 0; }
-.ui-listview, .ui-li { list-style:none; padding:0; }
-.ui-li, .ui-li.ui-field-contain { display: block; margin:0; position: relative; overflow: visible; text-align: left; border-width: 0; border-top-width: 1px; }
-.ui-li .ui-btn-text a.ui-link-inherit { text-overflow: ellipsis; overflow: hidden; white-space: nowrap; }
-.ui-li-divider, .ui-li-static { padding: .5em 15px; font-size: 14px; font-weight: bold; }
-.ui-li-divider { counter-reset: listnumbering; }
-ol.ui-listview .ui-link-inherit:before, ol.ui-listview .ui-li-static:before, .ui-li-dec { font-size: .8em; display: inline-block; padding-right: .3em; font-weight: normal;counter-increment: listnumbering; content: counter(listnumbering) ". "; }
-ol.ui-listview .ui-li-jsnumbering:before { content: "" !important; } /* to avoid chance of duplication */
-.ui-listview-inset .ui-li { border-right-width: 1px; border-left-width: 1px; }
-.ui-li:last-child, .ui-li.ui-field-contain:last-child { border-bottom-width: 1px; }
-.ui-li>.ui-btn-inner { display: block; position: relative; padding: 0; }
-.ui-li .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li { padding: .7em 75px .7em 15px; display: block; }
-.ui-li-has-thumb .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-thumb { min-height: 60px; padding-left: 100px; }
-.ui-li-has-icon .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-icon { min-height: 20px; padding-left: 40px; }
-.ui-li-heading { font-size: 16px; font-weight: bold; display: block; margin: .6em 0; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; }
-.ui-li-desc { font-size: 12px; font-weight: normal; display: block; margin: -.5em 0 .6em; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; }
-.ui-li-thumb, .ui-li-icon { position: absolute; left: 1px; top: 0; max-height: 80px; max-width: 80px; }
-.ui-li-icon { max-height: 40px; max-width: 40px; left: 10px; top: .9em; }
-.ui-li-thumb, .ui-li-icon, .ui-li-content { float: left; margin-right: 10px; }
-
-.ui-li-aside { float: right; width: 50%; text-align: right; margin: .3em 0; }
-.min-width-480px .ui-li-aside { width: 45%; }
-.ui-li-divider { cursor: default; }
-.ui-li-has-alt .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-alt { padding-right: 95px; }
-.ui-li-count { position: absolute; font-size: 11px; font-weight: bold; padding: .2em .5em; top: 50%; margin-top: -.9em; right: 38px; }
-.ui-li-divider .ui-li-count, .ui-li-static .ui-li-count { right: 10px; }
-.ui-li-has-alt .ui-li-count { right: 55px; }
-.ui-li-link-alt { position: absolute; width: 40px; height: 100%; border-width: 0; border-left-width: 1px; top: 0; right: 0; margin: 0; padding: 0; }
-.ui-li-link-alt .ui-btn { overflow: hidden; position: absolute; right: 8px; top: 50%; margin: -11px 0 0 0; border-bottom-width: 1px; }
-.ui-li-link-alt .ui-btn-inner { padding: 0; position: static; }
-.ui-li-link-alt .ui-btn .ui-icon { right: 50%; margin-right: -9px; }
-
-.ui-listview-filter { border-width: 0; overflow: hidden; margin: -15px -15px 15px -15px }
-.ui-listview-filter .ui-input-search { margin: 5px; width: auto; display: block; }
-
-.ui-listview-filter-inset { margin: -15px -5px -15px -5px; background: transparent; }
-
-/* Odd iPad positioning issue. */
-@media only screen and (min-device-width: 768px) and (max-device-width: 1024px) {
- .ui-li .ui-btn-text { overflow: visible; }
-}/*
-* jQuery Mobile Framework
-* Copyright (c) jQuery Project
-* Dual licensed under the MIT (MIT-LICENSE.txt) or GPL (GPL-LICENSE.txt) licenses.
-*/
-label.ui-slider { display: block; }
-input.ui-slider-input, .min-width-480px input.ui-slider-input { display: inline-block; width: 50px; }
-select.ui-slider-switch { display: none; }
-div.ui-slider { position: relative; display: inline-block; overflow: visible; height: 15px; padding: 0; margin: 0 2% 0 20px; top: 4px; width: 66%; }
-a.ui-slider-handle { position: absolute; z-index: 10; top: 50%; width: 28px; height: 28px; margin-top: -15px; margin-left: -15px; }
-a.ui-slider-handle .ui-btn-inner { padding-left: 0; padding-right: 0; }
-.min-width-480px label.ui-slider { display: inline-block; width: 20%; margin: 0 2% 0 0; }
-.min-width-480px div.ui-slider { width: 45%; }
-
-div.ui-slider-switch { height: 32px; overflow: hidden; margin-left: 0; }
-div.ui-slider-inneroffset { margin-left: 50%; position: absolute; top: 1px; height: 100%; width: 50%; }
-div.ui-slider-handle-snapping { -webkit-transition: left 100ms linear; }
-div.ui-slider-labelbg { position: absolute; top:0; margin: 0; border-width: 0; }
-div.ui-slider-switch div.ui-slider-labelbg-a { width: 60%; height: 100%; left: 0; }
-div.ui-slider-switch div.ui-slider-labelbg-b { width: 60%; height: 100%; right: 0; }
-.ui-slider-switch-a div.ui-slider-labelbg-a, .ui-slider-switch-b div.ui-slider-labelbg-b { z-index: -1; }
-.ui-slider-switch-a div.ui-slider-labelbg-b, .ui-slider-switch-b div.ui-slider-labelbg-a { z-index: 0; }
-
-div.ui-slider-switch a.ui-slider-handle { z-index: 20; width: 101%; height: 32px; margin-top: -18px; margin-left: -101%; }
-span.ui-slider-label { width: 100%; position: absolute;height: 32px; font-size: 16px; text-align: center; line-height: 2; background: none; border-color: transparent; }
-span.ui-slider-label-a { left: -100%; margin-right: -1px }
-span.ui-slider-label-b { right: -100%; margin-left: -1px }
-
--- /dev/null
+++ b/css/jquery.mobile-1.0b2.css
@@ -1,1 +1,1641 @@
-
+/*!
+ * jQuery Mobile v1.0b2
+ * http://jquerymobile.com/
+ *
+ * Copyright 2010, jQuery Project
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ */
+/*
+* jQuery Mobile Framework
+* Copyright (c) jQuery Project
+* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
+*/
+
+
+/* A
+-----------------------------------------------------------------------------------------------------------*/
+
+.ui-bar-a {
+ border: 1px solid #2A2A2A;
+ background: #111111;
+ color: #ffffff;
+ font-weight: bold;
+ text-shadow: 0 -1px 1px #000000;
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#111)); /* Saf4+, Chrome */
+ background-image: -webkit-linear-gradient(top, #3c3c3c, #111); /* Chrome 10+, Saf5.1+ */
+ background-image: -moz-linear-gradient(top, #3c3c3c, #111); /* FF3.6 */
+ background-image: -ms-linear-gradient(top, #3c3c3c, #111); /* IE10 */
+ background-image: -o-linear-gradient(top, #3c3c3c, #111); /* Opera 11.10+ */
+ background-image: linear-gradient(top, #3c3c3c, #111);
+}
+.ui-bar-a,
+.ui-bar-a input,
+.ui-bar-a select,
+.ui-bar-a textarea,
+.ui-bar-a button {
+ font-family: Helvetica, Arial, sans-serif;
+}
+.ui-bar-a .ui-link-inherit {
+ color: #fff;
+}
+.ui-bar-a .ui-link {
+ color: #7cc4e7;
+ font-weight: bold;
+}
+.ui-body-a {
+ border: 1px solid #2A2A2A;
+ background: #222222;
+ color: #fff;
+ text-shadow: 0 1px 0 #000;
+ font-weight: normal;
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#666), to(#222)); /* Saf4+, Chrome */
+ background-image: -webkit-linear-gradient(top, #666, #222); /* Chrome 10+, Saf5.1+ */
+ background-image: -moz-linear-gradient(top, #666, #222); /* FF3.6 */
+ background-image: -ms-linear-gradient(top, #666, #222); /* IE10 */
+ background-image: -o-linear-gradient(top, #666, #222); /* Opera 11.10+ */
+ background-image: linear-gradient(top, #666, #222);
+}
+.ui-body-a,
+.ui-body-a input,
+.ui-body-a select,
+.ui-body-a textarea,
+.ui-body-a button {
+ font-family: Helvetica, Arial, sans-serif;
+}
+.ui-body-a .ui-link-inherit {
+ color: #fff;
+}
+.ui-body-a .ui-link {
+ color: #2489CE;
+ font-weight: bold;
+}
+.ui-br {
+ border-bottom: rgb(130,130,130);
+ border-bottom: rgba(130,130,130,.3);
+ border-bottom-width: 1px;
+ border-bottom-style: solid;
+}
+.ui-btn-up-a {
+ border: 1px solid #222;
+ background: #333333;
+ font-weight: bold;
+ color: #fff;
+ text-shadow: 0 -1px 1px #000;
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#555), to(#333)); /* Saf4+, Chrome */
+ background-image: -webkit-linear-gradient(top, #555, #333); /* Chrome 10+, Saf5.1+ */
+ background-image: -moz-linear-gradient(top, #555, #333); /* FF3.6 */
+ background-image: -ms-linear-gradient(top, #555, #333); /* IE10 */
+ background-image: -o-linear-gradient(top, #555, #333); /* Opera 11.10+ */
+ background-image: linear-gradient(top, #555, #333);
+}
+.ui-btn-up-a a.ui-link-inherit {
+ color: #fff;
+}
+.ui-btn-hover-a {
+ border: 1px solid #000;
+ background: #444444;
+ font-weight: bold;
+ color: #fff;
+ text-shadow: 0 -1px 1px #000;
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#666), to(#444)); /* Saf4+, Chrome */
+ background-image: -webkit-linear-gradient(top, #666, #444); /* Chrome 10+, Saf5.1+ */
+ background-image: -moz-linear-gradient(top, #666, #444); /* FF3.6 */
+ background-image: -ms-linear-gradient(top, #666, #444); /* IE10 */
+ background-image: -o-linear-gradient(top, #666, #444); /* Opera 11.10+ */
+ background-image: linear-gradient(top, #666, #444);
+}
+.ui-btn-hover-a a.ui-link-inherit {
+ color: #fff;
+}
+.ui-btn-down-a {
+ border: 1px solid #000;
+ background: #3d3d3d;
+ font-weight: bold;
+ color: #fff;
+ text-shadow: 0 -1px 1px #000;
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#333), to(#5a5a5a)); /* Saf4+, Chrome */
+ background-image: -webkit-linear-gradient(top, #333, #5a5a5a); /* Chrome 10+, Saf5.1+ */
+ background-image: -moz-linear-gradient(top, #333, #5a5a5a); /* FF3.6 */
+ background-image: -ms-linear-gradient(top, #333, #5a5a5a); /* IE10 */
+ background-image: -o-linear-gradient(top, #333, #5a5a5a); /* Opera 11.10+ */
+ background-image: linear-gradient(top, #333, #5a5a5a);
+}
+.ui-btn-down-a a.ui-link-inherit {
+ color: #fff;
+}
+.ui-btn-up-a,
+.ui-btn-hover-a,
+.ui-btn-down-a {
+ font-family: Helvetica, Arial, sans-serif;
+ text-decoration: none;
+}
+
+
+/* B
+-----------------------------------------------------------------------------------------------------------*/
+
+.ui-bar-b {
+ border: 1px solid #456f9a;
+ background: #5e87b0;
+ color: #fff;
+ font-weight: bold;
+ text-shadow: 0 -1px 1px #254f7a;
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#81a8ce), to(#5e87b0)); /* Saf4+, Chrome */
+ background-image: -webkit-linear-gradient(top, #81a8ce, #5e87b0); /* Chrome 10+, Saf5.1+ */
+ background-image: -moz-linear-gradient(top, #81a8ce, #5e87b0); /* FF3.6 */
+ background-image: -ms-linear-gradient(top, #81a8ce, #5e87b0); /* IE10 */
+ background-image: -o-linear-gradient(top, #81a8ce, #5e87b0); /* Opera 11.10+ */
+ background-image: linear-gradient(top, #81a8ce, #5e87b0);
+}
+.ui-bar-b,
+.ui-bar-b input,
+.ui-bar-b select,
+.ui-bar-b textarea,
+.ui-bar-b button {
+ font-family: Helvetica, Arial, sans-serif;
+}
+.ui-bar-b .ui-link-inherit {
+ color: #fff;
+}
+.ui-bar-b .ui-link {
+ color: #7cc4e7;
+ font-weight: bold;
+}
+
+.ui-body-b {
+ border: 1px solid #C6C6C6;
+ background: #cccccc;
+ color: #333333;
+ text-shadow: 0 1px 0 #fff;
+ font-weight: normal;
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#e6e6e6), to(#ccc)); /* Saf4+, Chrome */
+ background-image: -webkit-linear-gradient(top, #e6e6e6, #ccc); /* Chrome 10+, Saf5.1+ */
+ background-image: -moz-linear-gradient(top, #e6e6e6, #ccc); /* FF3.6 */
+ background-image: -ms-linear-gradient(top, #e6e6e6, #ccc); /* IE10 */
+ background-image: -o-linear-gradient(top, #e6e6e6, #ccc); /* Opera 11.10+ */
+ background-image: linear-gradient(top, #e6e6e6, #ccc);
+}
+.ui-body-b,
+.ui-body-b input,
+.ui-body-b select,
+.ui-body-b textarea,
+.ui-body-b button {
+ font-family: Helvetica, Arial, sans-serif;
+}
+.ui-body-b .ui-link-inherit {
+ color: #333333;
+}
+.ui-body-b .ui-link {
+ color: #2489CE;
+ font-weight: bold;
+}
+.ui-btn-up-b {
+ border: 1px solid #145072;
+ background: #2567ab;
+ font-weight: bold;
+ color: #fff;
+ text-shadow: 0 -1px 1px #145072;
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#5f9cc5), to(#396b9e)); /* Saf4+, Chrome */
+ background-image: -webkit-linear-gradient(top, #5f9cc5, #396b9e); /* Chrome 10+, Saf5.1+ */
+ background-image: -moz-linear-gradient(top, #5f9cc5, #396b9e); /* FF3.6 */
+ background-image: -ms-linear-gradient(top, #5f9cc5, #396b9e); /* IE10 */
+ background-image: -o-linear-gradient(top, #5f9cc5, #396b9e); /* Opera 11.10+ */
+ background-image: linear-gradient(top, #5f9cc5, #396b9e);
+}
+.ui-btn-up-b a.ui-link-inherit {
+ color: #fff;
+}
+.ui-btn-hover-b {
+ border: 1px solid #00516e;
+ background: #4b88b6;
+ font-weight: bold;
+ color: #fff;
+ text-shadow: 0 -1px 1px #014D68;
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#72b0d4), to(#4b88b6)); /* Saf4+, Chrome */
+ background-image: -webkit-linear-gradient(top, #72b0d4, #4b88b6); /* Chrome 10+, Saf5.1+ */
+ background-image: -moz-linear-gradient(top, #72b0d4, #4b88b6); /* FF3.6 */
+ background-image: -ms-linear-gradient(top, #72b0d4, #4b88b6); /* IE10 */
+ background-image: -o-linear-gradient(top, #72b0d4, #4b88b6); /* Opera 11.10+ */
+ background-image: linear-gradient(top, #72b0d4, #4b88b6);
+}
+.ui-btn-hover-b a.ui-link-inherit {
+ color: #fff;
+}
+.ui-btn-down-b {
+ border: 1px solid #225377;
+ background: #4e89c5;
+ font-weight: bold;
+ color: #fff;
+ text-shadow: 0 -1px 1px #225377;
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#396b9e), to(#4e89c5)); /* Saf4+, Chrome */
+ background-image: -webkit-linear-gradient(top, #396b9e, #4e89c5); /* Chrome 10+, Saf5.1+ */
+ background-image: -moz-linear-gradient(top, #396b9e, #4e89c5); /* FF3.6 */
+ background-image: -ms-linear-gradient(top, #396b9e, #4e89c5); /* IE10 */
+ background-image: -o-linear-gradient(top, #396b9e, #4e89c5); /* Opera 11.10+ */
+ background-image: linear-gradient(top, #396b9e, #4e89c5);
+}
+.ui-btn-down-b a.ui-link-inherit {
+ color: #fff;
+}
+.ui-btn-up-b,
+.ui-btn-hover-b,
+.ui-btn-down-b {
+ font-family: Helvetica, Arial, sans-serif;
+ text-decoration: none;
+}
+
+
+/* C
+-----------------------------------------------------------------------------------------------------------*/
+
+.ui-bar-c {
+ border: 1px solid #B3B3B3;
+ background: #e9eaeb;
+ color: #3E3E3E;
+ font-weight: bold;
+ text-shadow: 0 1px 1px #fff;
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#f0f0f0), to(#e9eaeb)); /* Saf4+, Chrome */
+ background-image: -webkit-linear-gradient(top, #f0f0f0, #e9eaeb); /* Chrome 10+, Saf5.1+ */
+ background-image: -moz-linear-gradient(top, #f0f0f0, #e9eaeb); /* FF3.6 */
+ background-image: -ms-linear-gradient(top, #f0f0f0, #e9eaeb); /* IE10 */
+ background-image: -o-linear-gradient(top, #f0f0f0, #e9eaeb); /* Opera 11.10+ */
+ background-image: linear-gradient(top, #f0f0f0, #e9eaeb);
+}
+.ui-bar-c,
+.ui-bar-c input,
+.ui-bar-c select,
+.ui-bar-c textarea,
+.ui-bar-c button {
+ font-family: Helvetica, Arial, sans-serif;
+}
+.ui-body-c {
+ border: 1px solid #B3B3B3;
+ color: #333333;
+ text-shadow: 0 1px 0 #fff;
+ background: #f0f0f0;
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#ddd)); /* Saf4+, Chrome */
+ background-image: -webkit-linear-gradient(top, #eee, #ddd); /* Chrome 10+, Saf5.1+ */
+ background-image: -moz-linear-gradient(top, #eee, #ddd); /* FF3.6 */
+ background-image: -ms-linear-gradient(top, #eee, #ddd); /* IE10 */
+ background-image: -o-linear-gradient(top, #eee, #ddd); /* Opera 11.10+ */
+ background-image: linear-gradient(top, #eee, #ddd);
+}
+.ui-body-c,
+.ui-body-c input,
+.ui-body-c select,
+.ui-body-c textarea,
+.ui-body-c button {
+ font-family: Helvetica, Arial, sans-serif;
+}
+.ui-body-c .ui-link-inherit {
+ color: #333333;
+}
+.ui-body-c .ui-link {
+ color: #2489CE;
+ font-weight: bold;
+}
+
+.ui-btn-up-c {
+ border: 1px solid #ccc;
+ background: #eee;
+ font-weight: bold;
+ color: #444;
+ text-shadow: 0 1px 1px #f6f6f6;
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#fdfdfd), to(#eee)); /* Saf4+, Chrome */
+ background-image: -webkit-linear-gradient(top, #fdfdfd, #eee); /* Chrome 10+, Saf5.1+ */
+ background-image: -moz-linear-gradient(top, #fdfdfd, #eee); /* FF3.6 */
+ background-image: -ms-linear-gradient(top, #fdfdfd, #eee); /* IE10 */
+ background-image: -o-linear-gradient(top, #fdfdfd, #eee); /* Opera 11.10+ */
+ background-image: linear-gradient(top, #fdfdfd, #eee);
+}
+.ui-btn-up-c a.ui-link-inherit {
+ color: #2F3E46;
+}
+
+.ui-btn-hover-c {
+ border: 1px solid #bbb;
+ background: #dadada;
+ font-weight: bold;
+ color: #101010;
+ text-shadow: 0 1px 1px #fff;
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#ededed), to(#dadada)); /* Saf4+, Chrome */
+ background-image: -webkit-linear-gradient(top, #ededed, #dadada); /* Chrome 10+, Saf5.1+ */
+ background-image: -moz-linear-gradient(top, #ededed, #dadada); /* FF3.6 */
+ background-image: -ms-linear-gradient(top, #ededed, #dadada); /* IE10 */
+ background-image: -o-linear-gradient(top, #ededed, #dadada); /* Opera 11.10+ */
+ background-image: linear-gradient(top, #ededed, #dadada);
+}
+.ui-btn-hover-c a.ui-link-inherit {
+ color: #2F3E46;
+}
+.ui-btn-down-c {
+ border: 1px solid #808080;
+ background: #fdfdfd;
+ font-weight: bold;
+ color: #111111;
+ text-shadow: 0 1px 1px #ffffff;
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#fdfdfd)); /* Saf4+, Chrome */
+ background-image: -webkit-linear-gradient(top, #eee, #fdfdfd); /* Chrome 10+, Saf5.1+ */
+ background-image: -moz-linear-gradient(top, #eee, #fdfdfd); /* FF3.6 */
+ background-image: -ms-linear-gradient(top, #eee, #fdfdfd); /* IE10 */
+ background-image: -o-linear-gradient(top, #eee, #fdfdfd); /* Opera 11.10+ */
+ background-image: linear-gradient(top, #eee, #fdfdfd);
+}
+.ui-btn-down-c a.ui-link-inherit {
+ color: #2F3E46;
+}
+.ui-btn-up-c,
+.ui-btn-hover-c,
+.ui-btn-down-c {
+ font-family: Helvetica, Arial, sans-serif;
+ text-decoration: none;
+}
+
+
+/* D
+-----------------------------------------------------------------------------------------------------------*/
+
+.ui-bar-d {
+ border: 1px solid #ccc;
+ background: #bbb;
+ color: #333;
+ text-shadow: 0 1px 0 #eee;
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#ddd), to(#bbb)); /* Saf4+, Chrome */
+ background-image: -webkit-linear-gradient(top, #ddd, #bbb); /* Chrome 10+, Saf5.1+ */
+ background-image: -moz-linear-gradient(top, #ddd, #bbb); /* FF3.6 */
+ background-image: -ms-linear-gradient(top, #ddd, #bbb); /* IE10 */
+ background-image: -o-linear-gradient(top, #ddd, #bbb); /* Opera 11.10+ */
+ background-image: linear-gradient(top, #ddd, #bbb);
+}
+.ui-bar-d,
+.ui-bar-d input,
+.ui-bar-d select,
+.ui-bar-d textarea,
+.ui-bar-d button {
+ font-family: Helvetica, Arial, sans-serif;
+}
+.ui-bar-d .ui-link-inherit {
+ color: #333;
+}
+.ui-bar-d .ui-link {
+ color: #2489CE;
+ font-weight: bold;
+}
+.ui-body-d {
+ border: 1px solid #ccc;
+ color: #333333;
+ text-shadow: 0 1px 0 #fff;
+ background: #ffffff;
+}
+.ui-body-d,
+.ui-body-d input,
+.ui-body-d select,
+.ui-body-d textarea,
+.ui-body-d button {
+ font-family: Helvetica, Arial, sans-serif;
+}
+.ui-body-d .ui-link-inherit {
+ color: #333333;
+}
+.ui-body-d .ui-link {
+ color: #2489CE;
+ font-weight: bold;
+}
+.ui-btn-up-d {
+ border: 1px solid #ccc;
+ background: #fff;
+ font-weight: bold;
+ color: #444;
+ text-shadow: 0 1px 1px #fff;
+}
+.ui-btn-up-d a.ui-link-inherit {
+ color: #333;
+}
+.ui-btn-hover-d {
+ border: 1px solid #aaa;
+ background: #eeeeee;
+ font-weight: bold;
+ color: #222;
+ cursor: pointer;
+ text-shadow: 0 1px 1px #fff;
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#fdfdfd), to(#eee)); /* Saf4+, Chrome */
+ background-image: -webkit-linear-gradient(top, #fdfdfd, #eee); /* Chrome 10+, Saf5.1+ */
+ background-image: -moz-linear-gradient(top, #fdfdfd, #eee); /* FF3.6 */
+ background-image: -ms-linear-gradient(top, #fdfdfd, #eee); /* IE10 */
+ background-image: -o-linear-gradient(top, #fdfdfd, #eee); /* Opera 11.10+ */
+ background-image: linear-gradient(top, #fdfdfd, #eee);
+}
+.ui-btn-hover-d a.ui-link-inherit {
+ color: #222;
+}
+.ui-btn-down-d {
+ border: 1px solid #aaaaaa;
+ background: #ffffff;
+ font-weight: bold;
+ color: #111;
+ text-shadow: 0 1px 1px #ffffff;
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#fff)); /* Saf4+, Chrome */
+ background-image: -webkit-linear-gradient(top, #eee, #fff); /* Chrome 10+, Saf5.1+ */
+ background-image: -moz-linear-gradient(top, #eee, #fff); /* FF3.6 */
+ background-image: -ms-linear-gradient(top, #eee, #fff); /* IE10 */
+ background-image: -o-linear-gradient(top, #eee, #fff); /* Opera 11.10+ */
+ background-image: linear-gradient(top, #eee, #fff);
+}
+.ui-btn-down-d a.ui-link-inherit {
+ color: #111;
+}
+.ui-btn-up-d,
+.ui-btn-hover-d,
+.ui-btn-down-d {
+ font-family: Helvetica, Arial, sans-serif;
+ text-decoration: none;
+}
+
+
+/* E
+-----------------------------------------------------------------------------------------------------------*/
+
+.ui-bar-e {
+ border: 1px solid #F7C942;
+ background: #fadb4e;
+ color: #333;
+ text-shadow: 0 1px 0 #fff;
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#fceda7), to(#fadb4e)); /* Saf4+, Chrome */
+ background-image: -webkit-linear-gradient(top, #fceda7, #fadb4e); /* Chrome 10+, Saf5.1+ */
+ background-image: -moz-linear-gradient(top, #fceda7, #fadb4e); /* FF3.6 */
+ background-image: -ms-linear-gradient(top, #fceda7, #fadb4e); /* IE10 */
+ background-image: -o-linear-gradient(top, #fceda7, #fadb4e); /* Opera 11.10+ */
+ background-image: linear-gradient(top, #fceda7, #fadb4e);
+}
+.ui-bar-e,
+.ui-bar-e input,
+.ui-bar-e select,
+.ui-bar-e textarea,
+.ui-bar-e button {
+ font-family: Helvetica, Arial, sans-serif;
+}
+.ui-bar-e .ui-link-inherit {
+ color: #333;
+}
+.ui-bar-e .ui-link {
+ color: #2489CE;
+ font-weight: bold;
+}
+.ui-body-e {
+ border: 1px solid #F7C942;
+ color: #333333;
+ text-shadow: 0 1px 0 #fff;
+ background: #faeb9e;
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#faeb9e)); /* Saf4+, Chrome */
+ background-image: -webkit-linear-gradient(top, #fff, #faeb9e); /* Chrome 10+, Saf5.1+ */
+ background-image: -moz-linear-gradient(top, #fff, #faeb9e); /* FF3.6 */
+ background-image: -ms-linear-gradient(top, #fff, #faeb9e); /* IE10 */
+ background-image: -o-linear-gradient(top, #fff, #faeb9e); /* Opera 11.10+ */
+ background-image: linear-gradient(top, #fff, #faeb9e);
+}
+.ui-body-e,
+.ui-body-e input,
+.ui-body-e select,
+.ui-body-e textarea,
+.ui-body-e button {
+ font-family: Helvetica, Arial, sans-serif;
+}
+.ui-body-e .ui-link-inherit {
+ color: #333333;
+}
+.ui-body-e .ui-link {
+ color: #2489CE;
+ font-weight: bold;
+}
+.ui-btn-up-e {
+ border: 1px solid #F7C942;
+ background: #fadb4e;
+ font-weight: bold;
+ color: #333;
+ text-shadow: 0 1px 0 #fff;
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#fceda7), to(#fadb4e)); /* Saf4+, Chrome */
+ background-image: -webkit-linear-gradient(top, #fceda7, #fadb4e); /* Chrome 10+, Saf5.1+ */
+ background-image: -moz-linear-gradient(top, #fceda7, #fadb4e); /* FF3.6 */
+ background-image: -ms-linear-gradient(top, #fceda7, #fadb4e); /* IE10 */
+ background-image: -o-linear-gradient(top, #fceda7, #fadb4e); /* Opera 11.10+ */
+ background-image: linear-gradient(top, #fceda7, #fadb4e);
+}
+.ui-btn-up-e a.ui-link-inherit {
+ color: #333;
+}
+.ui-btn-hover-e {
+ border: 1px solid #e79952;
+ background: #fbe26f;
+ font-weight: bold;
+ color: #111;
+ text-shadow: 0 1px 1px #fff;
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf0b5), to(#fbe26f)); /* Saf4+, Chrome */
+ background-image: -webkit-linear-gradient(top, #fcf0b5, #fbe26f); /* Chrome 10+, Saf5.1+ */
+ background-image: -moz-linear-gradient(top, #fcf0b5, #fbe26f); /* FF3.6 */
+ background-image: -ms-linear-gradient(top, #fcf0b5, #fbe26f); /* IE10 */
+ background-image: -o-linear-gradient(top, #fcf0b5, #fbe26f); /* Opera 11.10+ */
+ background-image: linear-gradient(top, #fcf0b5, #fbe26f);
+}
+
+.ui-btn-hover-e a.ui-link-inherit {
+ color: #333;
+}
+.ui-btn-down-e {
+ border: 1px solid #F7C942;
+ background: #fceda7;
+ font-weight: bold;
+ color: #111;
+ text-shadow: 0 1px 1px #ffffff;
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#fadb4e), to(#fceda7)); /* Saf4+, Chrome */
+ background-image: -webkit-linear-gradient(top, #fadb4e, #fceda7); /* Chrome 10+, Saf5.1+ */
+ background-image: -moz-linear-gradient(top, #fadb4e, #fceda7); /* FF3.6 */
+ background-image: -ms-linear-gradient(top, #fadb4e, #fceda7); /* IE10 */
+ background-image: -o-linear-gradient(top, #fadb4e, #fceda7); /* Opera 11.10+ */
+ background-image: linear-gradient(top, #fadb4e, #fceda7);
+}
+.ui-btn-down-e a.ui-link-inherit {
+ color: #333;
+}
+.ui-btn-up-e,
+.ui-btn-hover-e,
+.ui-btn-down-e {
+ font-family: Helvetica, Arial, sans-serif;
+ text-decoration: none;
+}
+
+
+/* links within "buttons"
+-----------------------------------------------------------------------------------------------------------*/
+
+a.ui-link-inherit {
+ text-decoration: none !important;
+}
+
+
+/* Active class used as the "on" state across all themes
+-----------------------------------------------------------------------------------------------------------*/
+
+.ui-btn-active {
+ border: 1px solid #155678;
+ background: #4596ce;
+ font-weight: bold;
+ color: #fff;
+ cursor: pointer;
+ text-shadow: 0 -1px 1px #145072;
+ text-decoration: none;
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#85bae4), to(#5393c5)); /* Saf4+, Chrome */
+ background-image: -webkit-linear-gradient(top, #85bae4, #5393c5); /* Chrome 10+, Saf5.1+ */
+ background-image: -moz-linear-gradient(top, #85bae4, #5393c5); /* FF3.6 */
+ background-image: -ms-linear-gradient(top, #85bae4, #5393c5); /* IE10 */
+ background-image: -o-linear-gradient(top, #85bae4, #5393c5); /* Opera 11.10+ */
+ background-image: linear-gradient(top, #85bae4, #5393c5);
+ outline: none;
+}
+.ui-btn-active a.ui-link-inherit {
+ color: #fff;
+}
+
+
+/* button inner top highlight
+-----------------------------------------------------------------------------------------------------------*/
+
+.ui-btn-inner {
+ border-top: 1px solid #fff;
+ border-color: rgba(255,255,255,.3);
+}
+
+
+/* corner rounding classes
+-----------------------------------------------------------------------------------------------------------*/
+
+.ui-corner-tl {
+ -moz-border-radius-topleft: .6em;
+ -webkit-border-top-left-radius: .6em;
+ border-top-left-radius: .6em;
+}
+.ui-corner-tr {
+ -moz-border-radius-topright: .6em;
+ -webkit-border-top-right-radius: .6em;
+ border-top-right-radius: .6em;
+}
+.ui-corner-bl {
+ -moz-border-radius-bottomleft: .6em;
+ -webkit-border-bottom-left-radius: .6em;
+ border-bottom-left-radius: .6em;
+}
+.ui-corner-br {
+ -moz-border-radius-bottomright: .6em;
+ -webkit-border-bottom-right-radius: .6em;
+ border-bottom-right-radius: .6em;
+}
+.ui-corner-top {
+ -moz-border-radius-topleft: .6em;
+ -webkit-border-top-left-radius: .6em;
+ border-top-left-radius: .6em;
+ -moz-border-radius-topright: .6em;
+ -webkit-border-top-right-radius: .6em;
+ border-top-right-radius: .6em;
+}
+.ui-corner-bottom {
+ -moz-border-radius-bottomleft: .6em;
+ -webkit-border-bottom-left-radius: .6em;
+ border-bottom-left-radius: .6em;
+ -moz-border-radius-bottomright: .6em;
+ -webkit-border-bottom-right-radius: .6em;
+ border-bottom-right-radius: .6em;
+ }
+.ui-corner-right {
+ -moz-border-radius-topright: .6em;
+ -webkit-border-top-right-radius: .6em;
+ border-top-right-radius: .6em;
+ -moz-border-radius-bottomright: .6em;
+ -webkit-border-bottom-right-radius: .6em;
+ border-bottom-right-radius: .6em;
+}
+.ui-corner-left {
+ -moz-border-radius-topleft: .6em;
+ -webkit-border-top-left-radius: .6em;
+ border-top-left-radius: .6em;
+ -moz-border-radius-bottomleft: .6em;
+ -webkit-border-bottom-left-radius: .6em;
+ border-bottom-left-radius: .6em;
+}
+.ui-corner-all {
+ -moz-border-radius: .6em;
+ -webkit-border-radius: .6em;
+ border-radius: .6em;
+}
+
+
+
+/* Interaction cues
+-----------------------------------------------------------------------------------------------------------*/
+.ui-disabled {
+ opacity: .3;
+}
+.ui-disabled,
+.ui-disabled a {
+ cursor: default;
+}
+
+/* Icons
+-----------------------------------------------------------------------------------------------------------*/
+
+.ui-icon {
+ background: #666;
+ background: rgba(0,0,0,.4);
+ background-image: url(images/icons-18-white.png);
+ background-repeat: no-repeat;
+ -moz-border-radius: 9px;
+ -webkit-border-radius: 9px;
+ border-radius: 9px;
+}
+
+
+/* Alt icon color
+-----------------------------------------------------------------------------------------------------------*/
+
+.ui-icon-alt {
+ background: #fff;
+ background: rgba(255,255,255,.3);
+ background-image: url(images/icons-18-black.png);
+ background-repeat: no-repeat;
+}
+
+/* HD/"retina" sprite
+-----------------------------------------------------------------------------------------------------------*/
+
+@media only screen and (-webkit-min-device-pixel-ratio: 1.5),
+ only screen and (min--moz-device-pixel-ratio: 1.5),
+ only screen and (min-resolution: 240dpi) {
+
+ .ui-icon-plus, .ui-icon-minus, .ui-icon-delete, .ui-icon-arrow-r,
+ .ui-icon-arrow-l, .ui-icon-arrow-u, .ui-icon-arrow-d, .ui-icon-check,
+ .ui-icon-gear, .ui-icon-refresh, .ui-icon-forward, .ui-icon-back,
+ .ui-icon-grid, .ui-icon-star, .ui-icon-alert, .ui-icon-info, .ui-icon-home, .ui-icon-search,
+ .ui-icon-checkbox-off, .ui-icon-checkbox-on, .ui-icon-radio-off, .ui-icon-radio-on {
+ background-image: url(images/icons-36-white.png);
+ -moz-background-size: 776px 18px;
+ -o-background-size: 776px 18px;
+ -webkit-background-size: 776px 18px;
+ background-size: 776px 18px;
+ }
+ .ui-icon-alt {
+ background-image: url(images/icons-36-black.png);
+ }
+}
+
+/* plus minus */
+.ui-icon-plus {
+ background-position: -0 50%;
+}
+.ui-icon-minus {
+ background-position: -36px 50%;
+}
+
+/* delete/close */
+.ui-icon-delete {
+ background-position: -72px 50%;
+}
+
+/* arrows */
+.ui-icon-arrow-r {
+ background-position: -108px 50%;
+}
+.ui-icon-arrow-l {
+ background-position: -144px 50%;
+}
+.ui-icon-arrow-u {
+ background-position: -180px 50%;
+}
+.ui-icon-arrow-d {
+ background-position: -216px 50%;
+}
+
+/* misc */
+.ui-icon-check {
+ background-position: -252px 50%;
+}
+.ui-icon-gear {
+ background-position: -288px 50%;
+}
+.ui-icon-refresh {
+ background-position: -324px 50%;
+}
+.ui-icon-forward {
+ background-position: -360px 50%;
+}
+.ui-icon-back {
+ background-position: -396px 50%;
+}
+.ui-icon-grid {
+ background-position: -432px 50%;
+}
+.ui-icon-star {
+ background-position: -468px 50%;
+}
+.ui-icon-alert {
+ background-position: -504px 50%;
+}
+.ui-icon-info {
+ background-position: -540px 50%;
+}
+.ui-icon-home {
+ background-position: -576px 50%;
+}
+.ui-icon-search {
+ background-position: -612px 50%;
+}
+.ui-icon-checkbox-off {
+ background-position: -684px 50%;
+}
+.ui-icon-checkbox-on {
+ background-position: -648px 50%;
+}
+.ui-icon-radio-off {
+ background-position: -756px 50%;
+}
+.ui-icon-radio-on {
+ background-position: -720px 50%;
+}
+
+
+/* checks,radios */
+.ui-checkbox .ui-icon {
+ -moz-border-radius: 3px;
+ -webkit-border-radius: 3px;
+ border-radius: 3px;
+}
+.ui-icon-checkbox-off,
+.ui-icon-radio-off {
+ background-color: transparent;
+}
+.ui-checkbox-on .ui-icon,
+.ui-radio-on .ui-icon {
+ background-color: #4596ce; /* NOTE: this hex should match the active state color. It's repeated here for cascade */
+}
+.ui-icon-searchfield {
+ background-image: url(images/icon-search-black.png);
+ background-size: 16px 16px;
+}
+
+/* loading icon */
+.ui-icon-loading {
+ background-image: url(images/ajax-loader.png);
+ width: 40px;
+ height: 40px;
+ -moz-border-radius: 20px;
+ -webkit-border-radius: 20px;
+ border-radius: 20px;
+ background-size: 35px 35px;
+}
+
+
+/* Button corner classes
+-----------------------------------------------------------------------------------------------------------*/
+
+.ui-btn-corner-tl {
+ -moz-border-radius-topleft: 1em;
+ -webkit-border-top-left-radius: 1em;
+ border-top-left-radius: 1em;
+}
+.ui-btn-corner-tr {
+ -moz-border-radius-topright: 1em;
+ -webkit-border-top-right-radius: 1em;
+ border-top-right-radius: 1em;
+}
+.ui-btn-corner-bl {
+ -moz-border-radius-bottomleft: 1em;
+ -webkit-border-bottom-left-radius: 1em;
+ border-bottom-left-radius: 1em;
+}
+.ui-btn-corner-br {
+ -moz-border-radius-bottomright: 1em;
+ -webkit-border-bottom-right-radius: 1em;
+ border-bottom-right-radius: 1em;
+}
+.ui-btn-corner-top {
+ -moz-border-radius-topleft: 1em;
+ -webkit-border-top-left-radius: 1em;
+ border-top-left-radius: 1em;
+ -moz-border-radius-topright: 1em;
+ -webkit-border-top-right-radius: 1em;
+ border-top-right-radius: 1em;
+}
+.ui-btn-corner-bottom {
+ -moz-border-radius-bottomleft: 1em;
+ -webkit-border-bottom-left-radius: 1em;
+ border-bottom-left-radius: 1em;
+ -moz-border-radius-bottomright: 1em;
+ -webkit-border-bottom-right-radius: 1em;
+ border-bottom-right-radius: 1em;
+}
+.ui-btn-corner-right {
+ -moz-border-radius-topright: 1em;
+ -webkit-border-top-right-radius: 1em;
+ border-top-right-radius: 1em;
+ -moz-border-radius-bottomright: 1em;
+ -webkit-border-bottom-right-radius: 1em;
+ border-bottom-right-radius: 1em;
+}
+.ui-btn-corner-left {
+ -moz-border-radius-topleft: 1em;
+ -webkit-border-top-left-radius: 1em;
+ border-top-left-radius: 1em;
+ -moz-border-radius-bottomleft: 1em;
+ -webkit-border-bottom-left-radius: 1em;
+ border-bottom-left-radius: 1em;
+}
+.ui-btn-corner-all {
+ -moz-border-radius: 1em;
+ -webkit-border-radius: 1em;
+ border-radius: 1em;
+}
+
+/* radius clip workaround for cleaning up corner trapping */
+.ui-corner-tl,
+.ui-corner-tr,
+.ui-corner-bl,
+.ui-corner-br,
+.ui-corner-top,
+.ui-corner-bottom,
+.ui-corner-right,
+.ui-corner-left,
+.ui-corner-all,
+.ui-btn-corner-tl,
+.ui-btn-corner-tr,
+.ui-btn-corner-bl,
+.ui-btn-corner-br,
+.ui-btn-corner-top,
+.ui-btn-corner-bottom,
+.ui-btn-corner-right,
+.ui-btn-corner-left,
+.ui-btn-corner-all {
+ -webkit-background-clip: padding-box;
+ -moz-background-clip: padding;
+ background-clip: padding-box;
+}
+
+/* Overlay / modal
+-----------------------------------------------------------------------------------------------------------*/
+
+.ui-overlay {
+ background: #666;
+ opacity: .5;
+ filter: Alpha(Opacity=50);
+ position: absolute;
+ width: 100%;
+ height: 100%;
+}
+.ui-overlay-shadow {
+ -moz-box-shadow: 0px 0px 12px rgba(0,0,0,.6);
+ -webkit-box-shadow: 0px 0px 12px rgba(0,0,0,.6);
+ box-shadow: 0px 0px 12px rgba(0,0,0,.6);
+}
+.ui-shadow {
+ -moz-box-shadow: 0px 1px 4px rgba(0,0,0,.3);
+ -webkit-box-shadow: 0px 1px 4px rgba(0,0,0,.3);
+ box-shadow: 0px 1px 4px rgba(0,0,0,.3);
+}
+.ui-bar-a .ui-shadow,
+.ui-bar-b .ui-shadow ,
+.ui-bar-c .ui-shadow {
+ -moz-box-shadow: 0px 1px 0 rgba(255,255,255,.3);
+ -webkit-box-shadow: 0px 1px 0 rgba(255,255,255,.3);
+ box-shadow: 0px 1px 0 rgba(255,255,255,.3);
+}
+.ui-shadow-inset {
+ -moz-box-shadow: inset 0px 1px 4px rgba(0,0,0,.2);
+ -webkit-box-shadow: inset 0px 1px 4px rgba(0,0,0,.2);
+ box-shadow: inset 0px 1px 4px rgba(0,0,0,.2);
+}
+.ui-icon-shadow {
+ -moz-box-shadow: 0px 1px 0 rgba(255,255,255,.4);
+ -webkit-box-shadow: 0px 1px 0 rgba(255,255,255,.4);
+ box-shadow: 0px 1px 0 rgba(255,255,255,.4);
+}
+
+
+/* Focus state - set here for specificity
+-----------------------------------------------------------------------------------------------------------*/
+
+.ui-focus {
+ -moz-box-shadow: 0px 0px 12px #387bbe;
+ -webkit-box-shadow: 0px 0px 12px #387bbe;
+ box-shadow: 0px 0px 12px #387bbe;
+}
+
+/* unset box shadow in browsers that don't do it right
+-----------------------------------------------------------------------------------------------------------*/
+
+.ui-mobile-nosupport-boxshadow * {
+ -moz-box-shadow: none !important;
+ -webkit-box-shadow: none !important;
+ box-shadow: none !important;
+}
+
+/* ...and bring back focus */
+.ui-mobile-nosupport-boxshadow .ui-focus {
+ outline-width: 2px;
+}/*
+* jQuery Mobile Framework
+* Copyright (c) jQuery Project
+* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
+*/
+
+/* some unsets - more probably needed */
+.ui-mobile, .ui-mobile body { height: 100%; }
+.ui-mobile fieldset, .ui-page { padding: 0; margin: 0; }
+.ui-mobile a img, .ui-mobile fieldset { border: 0; }
+
+/* responsive page widths */
+.ui-mobile-viewport { margin: 0; overflow-x: hidden; -webkit-text-size-adjust: none; -ms-text-size-adjust:none; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); }
+
+/* "page" containers - full-screen views, one should always be in view post-pageload */
+.ui-mobile [data-role=page], .ui-mobile [data-role=dialog], .ui-page { top: 0; left: 0; width: 100%; min-height: 100%; position: absolute; display: none; border: 0; }
+.ui-mobile .ui-page-active { display: block; overflow: visible; }
+
+/*orientations from js are available */
+.portrait,
+.portrait .ui-page { min-height: 420px; }
+.landscape,
+.landscape .ui-page { min-height: 300px; }
+
+/* loading screen */
+.ui-loading .ui-mobile-viewport { overflow: hidden !important; }
+.ui-loading .ui-loader { display: block; }
+.ui-loading .ui-page { overflow: hidden; }
+.ui-loader { display: none; position: absolute; opacity: .85; z-index: 100; left: 50%; width: 200px; margin-left: -130px; margin-top: -35px; padding: 10px 30px; }
+.ui-loader h1 { font-size: 15px; text-align: center; }
+.ui-loader .ui-icon { position: static; display: block; opacity: .9; margin: 0 auto; width: 35px; height: 35px; background-color: transparent; }
+
+/*fouc*/
+.ui-mobile-rendering > * { visibility: hidden; }
+
+/*headers, content panels*/
+.ui-bar, .ui-body { position: relative; padding: .4em 15px; overflow: hidden; display: block; clear:both; }
+.ui-bar { font-size: 16px; margin: 0; }
+.ui-bar h1, .ui-bar h2, .ui-bar h3, .ui-bar h4, .ui-bar h5, .ui-bar h6 { margin: 0; padding: 0; font-size: 16px; display: inline-block; }
+
+.ui-header, .ui-footer { display: block; }
+.ui-page .ui-header, .ui-page .ui-footer { position: relative; }
+.ui-header .ui-btn-left { position: absolute; left: 10px; top: .4em; }
+.ui-header .ui-btn-right { position: absolute; right: 10px; top: .4em; }
+.ui-header .ui-title, .ui-footer .ui-title { min-height: 1.1em; text-align: center; font-size: 16px; display: block; margin: .6em 90px .8em; padding: 0; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; outline: 0 !important; }
+
+/*content area*/
+.ui-content { border-width: 0; overflow: visible; overflow-x: hidden; padding: 15px; }
+.ui-page-fullscreen .ui-content { padding:0; }
+
+/* icons sizing */
+.ui-icon { width: 18px; height: 18px; }
+
+/* fullscreen class on ui-content div */
+.ui-fullscreen { }
+.ui-fullscreen img { max-width: 100%; }
+
+/* non-js content hiding */
+.ui-nojs { position: absolute; left: -9999px; }
+/*
+* jQuery Mobile Framework
+* Copyright (c) jQuery Project
+* Dual licensed under the MIT (MIT-LICENSE.txt) or GPL (GPL-LICENSE.txt) licenses.
+*/
+.spin {
+ -webkit-transform: rotate(360deg);
+ -webkit-animation-name: spin;
+ -webkit-animation-duration: 1s;
+ -webkit-animation-iteration-count: infinite;
+ -webkit-animation-timing-function: linear;
+}
+@-webkit-keyframes spin {
+ from {-webkit-transform: rotate(0deg);}
+ to {-webkit-transform: rotate(360deg);}
+}
+
+/* Transitions from jQtouch (with small modifications): http://www.jqtouch.com/
+Built by David Kaneda and maintained by Jonathan Stark.
+*/
+.in, .out {
+ -webkit-animation-timing-function: ease-in-out;
+ -webkit-animation-duration: 350ms;
+}
+
+.slide.in {
+ -webkit-transform: translateX(0);
+ -webkit-animation-name: slideinfromright;
+}
+
+.slide.out {
+ -webkit-transform: translateX(-100%);
+ -webkit-animation-name: slideouttoleft;
+}
+
+.slide.in.reverse {
+ -webkit-transform: translateX(0);
+ -webkit-animation-name: slideinfromleft;
+}
+
+.slide.out.reverse {
+ -webkit-transform: translateX(100%);
+ -webkit-animation-name: slideouttoright;
+}
+
+.slideup.in {
+ -webkit-transform: translateY(0);
+ -webkit-animation-name: slideinfrombottom;
+ z-index: 10;
+}
+
+.slideup.out {
+ -webkit-animation-name: dontmove;
+ z-index: 0;
+}
+
+.slideup.out.reverse {
+ -webkit-transform: translateY(100%);
+ z-index: 10;
+ -webkit-animation-name: slideouttobottom;
+}
+
+.slideup.in.reverse {
+ z-index: 0;
+ -webkit-animation-name: dontmove;
+}
+.slidedown.in {
+ -webkit-transform: translateY(0);
+ -webkit-animation-name: slideinfromtop;
+ z-index: 10;
+}
+
+.slidedown.out {
+ -webkit-animation-name: dontmove;
+ z-index: 0;
+}
+
+.slidedown.out.reverse {
+ -webkit-transform: translateY(-100%);
+ z-index: 10;
+ -webkit-animation-name: slideouttotop;
+}
+
+.slidedown.in.reverse {
+ z-index: 0;
+ -webkit-animation-name: dontmove;
+}
+
+@-webkit-keyframes slideinfromright {
+ from { -webkit-transform: translateX(100%); }
+ to { -webkit-transform: translateX(0); }
+}
+
+@-webkit-keyframes slideinfromleft {
+ from { -webkit-transform: translateX(-100%); }
+ to { -webkit-transform: translateX(0); }
+}
+
+@-webkit-keyframes slideouttoleft {
+ from { -webkit-transform: translateX(0); }
+ to { -webkit-transform: translateX(-100%); }
+}
+
+@-webkit-keyframes slideouttoright {
+ from { -webkit-transform: translateX(0); }
+ to { -webkit-transform: translateX(100%); }
+}
+
+
+@-webkit-keyframes slideinfromtop {
+ from { -webkit-transform: translateY(-100%); }
+ to { -webkit-transform: translateY(0); }
+}
+
+@-webkit-keyframes slideinfrombottom {
+ from { -webkit-transform: translateY(100%); }
+ to { -webkit-transform: translateY(0); }
+}
+
+@-webkit-keyframes slideouttobottom {
+ from { -webkit-transform: translateY(0); }
+ to { -webkit-transform: translateY(100%); }
+}
+
+@-webkit-keyframes slideouttotop {
+ from { -webkit-transform: translateY(0); }
+ to { -webkit-transform: translateY(-100%); }
+}
+@-webkit-keyframes fadein {
+ from { opacity: 0; }
+ to { opacity: 1; }
+}
+
+@-webkit-keyframes fadeout {
+ from { opacity: 1; }
+ to { opacity: 0; }
+}
+
+.fade.in {
+ opacity: 1;
+ z-index: 10;
+ -webkit-animation-name: fadein;
+}
+.fade.out {
+ z-index: 0;
+ -webkit-animation-name: fadeout;
+}
+
+/* The properties in this rule are only necessary for the 'flip' transition.
+ * We need specify the perspective to create a projection matrix. This will add
+ * some depth as the element flips. The depth number represents the distance of
+ * the viewer from the z-plane. According to the CSS3 spec, 1000 is a moderate
+ * value.
+ */
+.viewport-flip {
+ -webkit-perspective: 1000;
+ position: absolute;
+}
+
+.ui-mobile-viewport-transitioning,
+.ui-mobile-viewport-transitioning .ui-page {
+ width: 100%;
+ height: 100%;
+ overflow: hidden;
+}
+
+.flip {
+ -webkit-animation-duration: .65s;
+ -webkit-backface-visibility:hidden;
+ -webkit-transform:translateX(0); /* Needed to work around an iOS 3.1 bug that causes listview thumbs to disappear when -webkit-visibility:hidden is used. */
+}
+
+.flip.in {
+ -webkit-transform: rotateY(0) scale(1);
+ -webkit-animation-name: flipinfromleft;
+}
+
+.flip.out {
+ -webkit-transform: rotateY(-180deg) scale(.8);
+ -webkit-animation-name: flipouttoleft;
+}
+
+/* Shake it all about */
+
+.flip.in.reverse {
+ -webkit-transform: rotateY(0) scale(1);
+ -webkit-animation-name: flipinfromright;
+}
+
+.flip.out.reverse {
+ -webkit-transform: rotateY(180deg) scale(.8);
+ -webkit-animation-name: flipouttoright;
+}
+
+@-webkit-keyframes flipinfromright {
+ from { -webkit-transform: rotateY(-180deg) scale(.8); }
+ to { -webkit-transform: rotateY(0) scale(1); }
+}
+
+@-webkit-keyframes flipinfromleft {
+ from { -webkit-transform: rotateY(180deg) scale(.8); }
+ to { -webkit-transform: rotateY(0) scale(1); }
+}
+
+@-webkit-keyframes flipouttoleft {
+ from { -webkit-transform: rotateY(0) scale(1); }
+ to { -webkit-transform: rotateY(-180deg) scale(.8); }
+}
+
+@-webkit-keyframes flipouttoright {
+ from { -webkit-transform: rotateY(0) scale(1); }
+ to { -webkit-transform: rotateY(180deg) scale(.8); }
+}
+
+
+/* Hackish, but reliable. */
+
+@-webkit-keyframes dontmove {
+ from { opacity: 1; }
+ to { opacity: 1; }
+}
+
+.pop {
+ -webkit-transform-origin: 50% 50%;
+}
+
+.pop.in {
+ -webkit-transform: scale(1);
+ opacity: 1;
+ -webkit-animation-name: popin;
+ z-index: 10;
+}
+
+.pop.out.reverse {
+ -webkit-transform: scale(.2);
+ opacity: 0;
+ -webkit-animation-name: popout;
+ z-index: 10;
+}
+
+.pop.in.reverse {
+ z-index: 0;
+ -webkit-animation-name: dontmove;
+}
+
+@-webkit-keyframes popin {
+ from {
+ -webkit-transform: scale(.2);
+ opacity: 0;
+ }
+ to {
+ -webkit-transform: scale(1);
+ opacity: 1;
+ }
+}
+
+@-webkit-keyframes popout {
+ from {
+ -webkit-transform: scale(1);
+ opacity: 1;
+ }
+ to {
+ -webkit-transform: scale(.2);
+ opacity: 0;
+ }
+}/*
+* jQuery Mobile Framework
+* Copyright (c) jQuery Project
+* Dual licensed under the MIT (MIT-LICENSE.txt) or GPL (GPL-LICENSE.txt) licenses.
+*/
+
+/* content configurations. */
+.ui-grid-a, .ui-grid-b, .ui-grid-c, .ui-grid-d { overflow: hidden; }
+.ui-block-a, .ui-block-b, .ui-block-c, .ui-block-d, .ui-block-e { margin: 0; padding: 0; border: 0; float: left; min-height:1px;}
+
+/* grid solo: 100 - single item fallback */
+.ui-grid-solo .ui-block-a { width: 100%; float: none; }
+
+/* grid a: 50/50 */
+.ui-grid-a .ui-block-a, .ui-grid-a .ui-block-b { width: 50%; }
+.ui-grid-a .ui-block-a { clear: left; }
+
+/* grid b: 33/33/33 */
+.ui-grid-b .ui-block-a, .ui-grid-b .ui-block-b, .ui-grid-b .ui-block-c { width: 33.333%; }
+.ui-grid-b .ui-block-a { clear: left; }
+
+/* grid c: 25/25/25/25 */
+.ui-grid-c .ui-block-a, .ui-grid-c .ui-block-b, .ui-grid-c .ui-block-c, .ui-grid-c .ui-block-d { width: 25%; }
+.ui-grid-c .ui-block-a { clear: left; }
+
+/* grid d: 20/20/20/20/20 */
+.ui-grid-d .ui-block-a, .ui-grid-d .ui-block-b, .ui-grid-d .ui-block-c, .ui-grid-d .ui-block-d, .ui-grid-d .ui-block-e { width: 20%; }
+.ui-grid-d .ui-block-a { clear: left; }
+/*
+* jQuery Mobile Framework
+* Copyright (c) jQuery Project
+* Dual licensed under the MIT (MIT-LICENSE.txt) or GPL (GPL-LICENSE.txt) licenses.
+*/
+/* fixed page header & footer configuration */
+.ui-header, .ui-footer, .ui-page-fullscreen .ui-header, .ui-page-fullscreen .ui-footer { position: absolute; overflow: hidden; width: 100%; border-left-width: 0; border-right-width: 0; }
+.ui-header-fixed, .ui-footer-fixed {
+ z-index: 1000;
+ -webkit-transform: translateZ(0); /* Force header/footer rendering to go through the same rendering pipeline as native page scrolling. */
+}
+.ui-footer-duplicate, .ui-page-fullscreen .ui-fixed-inline { display: none; }
+.ui-page-fullscreen .ui-header, .ui-page-fullscreen .ui-footer { opacity: .9; }
+/*
+* jQuery Mobile Framework
+* Copyright (c) jQuery Project
+* Dual licensed under the MIT (MIT-LICENSE.txt) or GPL (GPL-LICENSE.txt) licenses.
+*/
+.ui-navbar { overflow: hidden; }
+.ui-navbar ul, .ui-navbar-expanded ul { list-style:none; padding: 0; margin: 0; position: relative; display: block; border: 0;}
+.ui-navbar-collapsed ul { float: left; width: 75%; margin-right: -2px; }
+.ui-navbar-collapsed .ui-navbar-toggle { float: left; width: 25%; }
+.ui-navbar li.ui-navbar-truncate { position: absolute; left: -9999px; top: -9999px; }
+.ui-navbar li .ui-btn, .ui-navbar .ui-navbar-toggle .ui-btn { display: block; font-size: 12px; text-align: center; margin: 0; border-right-width: 0; }
+.ui-navbar li .ui-btn { margin-right: -1px; }
+.ui-navbar li .ui-btn:last-child { margin-right: 0; }
+.ui-header .ui-navbar li .ui-btn, .ui-header .ui-navbar .ui-navbar-toggle .ui-btn,
+.ui-footer .ui-navbar li .ui-btn, .ui-footer .ui-navbar .ui-navbar-toggle .ui-btn { border-top-width: 0; border-bottom-width: 0; }
+.ui-navbar .ui-btn-inner { padding-left: 2px; padding-right: 2px; }
+.ui-navbar-noicons li .ui-btn .ui-btn-inner, .ui-navbar-noicons .ui-navbar-toggle .ui-btn-inner { padding-top: .8em; padding-bottom: .9em; }
+/*expanded page styles*/
+.ui-navbar-expanded .ui-btn { margin: 0; font-size: 14px; }
+.ui-navbar-expanded .ui-btn-inner { padding-left: 5px; padding-right: 5px; }
+.ui-navbar-expanded .ui-btn-icon-top .ui-btn-inner { padding: 45px 5px 15px; text-align: center; }
+.ui-navbar-expanded .ui-btn-icon-top .ui-icon { top: 15px; }
+.ui-navbar-expanded .ui-btn-icon-bottom .ui-btn-inner { padding: 15px 5px 45px; text-align: center; }
+.ui-navbar-expanded .ui-btn-icon-bottom .ui-icon { bottom: 15px; }
+.ui-navbar-expanded li .ui-btn .ui-btn-inner { min-height: 2.5em; }
+.ui-navbar-expanded .ui-navbar-noicons .ui-btn .ui-btn-inner { padding-top: 1.8em; padding-bottom: 1.9em; }
+/*
+* jQuery Mobile Framework
+* Copyright (c) jQuery Project
+* Dual licensed under the MIT (MIT-LICENSE.txt) or GPL (GPL-LICENSE.txt) licenses.
+*/
+.ui-btn { display: block; text-align: center; cursor:pointer; position: relative; margin: .5em 5px; padding: 0; }
+.ui-btn:focus, .ui-btn:active { outline: none; }
+.ui-header .ui-btn, .ui-footer .ui-btn, .ui-bar .ui-btn { display: inline-block; font-size: 13px; margin: 0; }
+.ui-btn-inline { display: inline-block; }
+.ui-btn-inner { padding: .6em 25px; display: block; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; position: relative; zoom: 1; }
+.ui-header .ui-btn-inner, .ui-footer .ui-btn-inner, .ui-bar .ui-btn-inner { padding: .4em 8px .5em; }
+.ui-btn-icon-notext { display: inline-block; width: 20px; height: 20px; padding: 2px 1px 2px 3px; text-indent: -9999px; }
+.ui-btn-icon-notext .ui-btn-inner { padding: 0; }
+.ui-btn-icon-notext .ui-btn-text { position: absolute; left: -999px; }
+.ui-btn-icon-left .ui-btn-inner { padding-left: 33px; }
+.ui-header .ui-btn-icon-left .ui-btn-inner,
+.ui-footer .ui-btn-icon-left .ui-btn-inner,
+.ui-bar .ui-btn-icon-left .ui-btn-inner { padding-left: 27px; }
+.ui-btn-icon-right .ui-btn-inner { padding-right: 33px; }
+.ui-header .ui-btn-icon-right .ui-btn-inner,
+.ui-footer .ui-btn-icon-right .ui-btn-inner,
+.ui-bar .ui-btn-icon-right .ui-btn-inner { padding-right: 27px; }
+.ui-btn-icon-top .ui-btn-inner { padding-top: 33px; }
+.ui-header .ui-btn-icon-top .ui-btn-inner,
+.ui-footer .ui-btn-icon-top .ui-btn-inner,
+.ui-bar .ui-btn-icon-top .ui-btn-inner { padding-top: 27px; }
+.ui-btn-icon-bottom .ui-btn-inner { padding-bottom: 33px; }
+.ui-header .ui-btn-icon-bottom .ui-btn-inner,
+.ui-footer .ui-btn-icon-bottom .ui-btn-inner,
+.ui-bar .ui-btn-icon-bottom .ui-btn-inner { padding-bottom: 27px; }
+
+/*btn icon positioning*/
+.ui-btn-icon-notext .ui-icon { display: block; }
+.ui-btn-icon-left .ui-icon, .ui-btn-icon-right .ui-icon { position: absolute; top: 50%; margin-top: -9px; }
+.ui-btn-icon-top .ui-icon, .ui-btn-icon-bottom .ui-icon { position: absolute; left: 50%; margin-left: -9px; }
+.ui-btn-icon-left .ui-icon { left: 10px; }
+.ui-btn-icon-right .ui-icon {right: 10px; }
+.ui-header .ui-btn-icon-left .ui-icon,
+.ui-footer .ui-btn-icon-left .ui-icon,
+.ui-bar .ui-btn-icon-left .ui-icon { left: 4px; }
+.ui-header .ui-btn-icon-right .ui-icon,
+.ui-footer .ui-btn-icon-right .ui-icon,
+.ui-bar .ui-btn-icon-right .ui-icon { right: 4px; }
+.ui-header .ui-btn-icon-top .ui-icon,
+.ui-footer .ui-btn-icon-top .ui-icon,
+.ui-bar .ui-btn-icon-top .ui-icon { top: 4px; }
+.ui-header .ui-btn-icon-bottom .ui-icon,
+.ui-footer .ui-btn-icon-bottom .ui-icon,
+.ui-bar .ui-btn-icon-bottom .ui-icon { bottom: 4px; }
+.ui-btn-icon-top .ui-icon { top: 5px; }
+.ui-btn-icon-bottom .ui-icon { bottom: 5px; }
+/*hiding native button,inputs */
+.ui-btn-hidden { position: absolute; top: 0; left: 0; width: 100%; height: 100%; -webkit-appearance: button; opacity: 0; cursor: pointer; -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; filter: alpha(opacity=0); background: transparent; }
+/*
+* jQuery Mobile Framework
+* Copyright (c) jQuery Project
+* Dual licensed under the MIT (MIT-LICENSE.txt) or GPL (GPL-LICENSE.txt) licenses.
+*/
+.ui-collapsible-contain { margin: .5em 0; }
+.ui-collapsible-heading { font-size: 16px; display: block; margin: 0 -8px; padding: 0; border-width: 0 0 1px 0; position: relative; }
+.ui-collapsible-heading a { text-align: left; margin: 0; }
+.ui-collapsible-heading a .ui-btn-inner { padding-left: 40px; }
+.ui-collapsible-heading a span.ui-btn { position: absolute; left: 6px; top: 50%; margin: -12px 0 0 0; width: 20px; height: 20px; padding: 1px 0px 1px 2px; text-indent: -9999px; }
+.ui-collapsible-heading a span.ui-btn .ui-btn-inner { padding: 10px 0; }
+.ui-collapsible-heading a span.ui-btn .ui-icon { left: 0; margin-top: -10px; }
+.ui-collapsible-heading-status { position:absolute; left:-9999px; }
+.ui-collapsible-content { display: block; padding: 10px 0 10px 8px; }
+.ui-collapsible-content-collapsed { display: none; }
+
+.ui-collapsible-set { margin: .5em 0; }
+.ui-collapsible-set .ui-collapsible-contain { margin: -1px 0 0; }
+/*
+* jQuery Mobile Framework
+* Copyright (c) jQuery Project
+* Dual licensed under the MIT (MIT-LICENSE.txt) or GPL (GPL-LICENSE.txt) licenses.
+*/
+.ui-controlgroup, fieldset.ui-controlgroup { padding: 0; margin: .5em 0 1em; }
+.ui-bar .ui-controlgroup { margin: 0 .3em; }
+.ui-controlgroup-label { font-size: 16px; line-height: 1.4; font-weight: normal; margin: 0 0 .3em; }
+.ui-controlgroup-controls { display: block; width: 95%;}
+.ui-controlgroup li { list-style: none; }
+.ui-controlgroup-vertical .ui-btn,
+.ui-controlgroup-vertical .ui-checkbox, .ui-controlgroup-vertical .ui-radio { margin: 0; border-bottom-width: 0; }
+.ui-controlgroup-vertical .ui-controlgroup-last { border-bottom-width: 1px; }
+.ui-controlgroup-horizontal { padding: 0; }
+.ui-controlgroup-horizontal .ui-btn,
+.ui-controlgroup-horizontal .ui-checkbox, .ui-controlgroup-horizontal .ui-radio { display: inline-block; margin: 0 -5px 0 0; }
+.ui-controlgroup-horizontal .ui-checkbox, .ui-controlgroup-horizontal .ui-radio { display: inline; }
+.ui-controlgroup-horizontal .ui-checkbox .ui-btn, .ui-controlgroup-horizontal .ui-radio .ui-btn,
+.ui-controlgroup-horizontal .ui-checkbox:last-child, .ui-controlgroup-horizontal .ui-radio:last-child { margin-right: 0; }
+.ui-controlgroup-horizontal .ui-controlgroup-last { margin-right: 0; }
+.ui-controlgroup .ui-checkbox label, .ui-controlgroup .ui-radio label { font-size: 16px; }
+/* conflicts with listview..
+.ui-controlgroup .ui-btn-icon-notext { width: 30px; height: 30px; text-indent: -9999px; }
+.ui-controlgroup .ui-btn-icon-notext .ui-btn-inner { padding: 5px 6px 5px 5px; }
+*/
+
+@media all and (min-width: 450px){
+ .ui-controlgroup-label { vertical-align: top; display: inline-block; width: 20%; margin: 0 2% 0 0; }
+ .ui-controlgroup-controls { width: 60%; display: inline-block; }
+} /*
+* jQuery Mobile Framework
+* Copyright (c) jQuery Project
+* Dual licensed under the MIT (MIT-LICENSE.txt) or GPL (GPL-LICENSE.txt) licenses.
+*/
+.ui-dialog { min-height: 480px; }
+.ui-dialog .ui-header, .ui-dialog .ui-content, .ui-dialog .ui-footer { margin: 15px; position: relative; }
+.ui-dialog .ui-header, .ui-dialog .ui-footer { z-index: 10; width: auto; }
+.ui-dialog .ui-content, .ui-dialog .ui-footer { margin-top: -15px; }/*
+* jQuery Mobile Framework
+* Copyright (c) jQuery Project
+* Dual licensed under the MIT (MIT-LICENSE.txt) or GPL (GPL-LICENSE.txt) licenses.
+*/
+.ui-checkbox, .ui-radio { position:relative; margin: .2em 0 .5em; z-index: 1; }
+.ui-checkbox .ui-btn, .ui-radio .ui-btn { margin: 0; text-align: left; z-index: 2; }
+.ui-checkbox .ui-btn-inner, .ui-radio .ui-btn-inner { white-space: normal; }
+.ui-checkbox .ui-btn-icon-left .ui-btn-inner,.ui-radio .ui-btn-icon-left .ui-btn-inner { padding-left: 45px; }
+.ui-checkbox .ui-btn-icon-right .ui-btn-inner, .ui-radio .ui-btn-icon-right .ui-btn-inner { padding-right: 45px; }
+.ui-checkbox .ui-icon, .ui-radio .ui-icon { top: 1.1em; }
+.ui-checkbox .ui-btn-icon-left .ui-icon, .ui-radio .ui-btn-icon-left .ui-icon {left: 15px; }
+.ui-checkbox .ui-btn-icon-right .ui-icon, .ui-radio .ui-btn-icon-right .ui-icon {right: 15px; }
+/* input, label positioning */
+.ui-checkbox input,.ui-radio input { position:absolute; left:20px; top:50%; width: 10px; height: 10px; margin:-5px 0 0 0; outline: 0 !important; z-index: 1; }/*
+* jQuery Mobile Framework
+* Copyright (c) jQuery Project
+* Dual licensed under the MIT (MIT-LICENSE.txt) or GPL (GPL-LICENSE.txt) licenses.
+*/
+.ui-field-contain { padding: 1.5em 0; margin: 0; border-bottom-width: 1px; overflow: visible; }
+.ui-field-contain:first-child { border-top-width: 0; }
+@media all and (min-width: 450px){
+ .ui-field-contain { border-width: 0; padding: 0; margin: 1em 0; }
+} /*
+* jQuery Mobile Framework
+* Copyright (c) jQuery Project
+* Dual licensed under the MIT (MIT-LICENSE.txt) or GPL (GPL-LICENSE.txt) licenses.
+*/
+.ui-select { display: block; position: relative; }
+.ui-select select { position: absolute; left: -9999px; top: -9999px; }
+.ui-select .ui-btn { overflow: hidden; }
+.ui-select .ui-btn select { cursor: pointer; -webkit-appearance: button; left: 0; top:0; width: 100%; height: 100%; opacity: 0; -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; filter: alpha(opacity=0); }
+@-moz-document url-prefix() {.ui-select .ui-btn select { opacity: 0.0001; }}
+.ui-select .ui-btn select.ui-select-nativeonly { opacity: 1; text-indent: 0; }
+
+.ui-select .ui-btn-icon-right .ui-btn-inner { padding-right: 45px; }
+.ui-select .ui-btn-icon-right .ui-icon { right: 15px; }
+
+/* labels */
+label.ui-select { font-size: 16px; line-height: 1.4; font-weight: normal; margin: 0 0 .3em; display: block; }
+
+/*listbox*/
+.ui-select .ui-btn-text, .ui-selectmenu .ui-btn-text { display: block; min-height: 1em; }
+.ui-select .ui-btn-text { text-overflow: ellipsis; overflow: hidden;}
+
+.ui-selectmenu { position: absolute; padding: 0; z-index: 100 !important; width: 80%; max-width: 350px; padding: 6px; }
+.ui-selectmenu .ui-listview { margin: 0; }
+.ui-selectmenu .ui-btn.ui-li-divider { cursor: default; }
+.ui-selectmenu-hidden { top: -9999px; left: -9999px; }
+.ui-selectmenu-screen { position: absolute; top: 0; left: 0; width: 100%; height: 100%; z-index: 99; }
+.ui-screen-hidden, .ui-selectmenu-list .ui-li .ui-icon { display: none; }
+.ui-selectmenu-list .ui-li .ui-icon { display: block; }
+.ui-li.ui-selectmenu-placeholder { display: none; }
+.ui-selectmenu .ui-header .ui-title { margin: 0.6em 46px 0.8em; }
+
+@media all and (min-width: 450px){
+ label.ui-select { display: inline-block; width: 20%; margin: 0 2% 0 0; }
+ .ui-select { width: 60%; display: inline-block; }
+}
+
+/* when no placeholder is defined in a multiple select, the header height doesn't even extend past the close button. this shim's content in there */
+.ui-selectmenu .ui-header h1:after { content: '.'; visibility: hidden; }/*
+* jQuery Mobile Framework
+* Copyright (c) jQuery Project
+* Dual licensed under the MIT (MIT-LICENSE.txt) or GPL (GPL-LICENSE.txt) licenses.
+*/
+label.ui-input-text { font-size: 16px; line-height: 1.4; display: block; font-weight: normal; margin: 0 0 .3em; }
+input.ui-input-text, textarea.ui-input-text { background-image: none; padding: .4em; line-height: 1.4; font-size: 16px; display: block; width: 95%; }
+input.ui-input-text { -webkit-appearance: none; }
+textarea.ui-input-text { height: 50px; -webkit-transition: height 200ms linear; -moz-transition: height 200ms linear; -o-transition: height 200ms linear; transition: height 200ms linear; }
+.ui-input-search { padding: 0 30px; width: 77%; background-position: 8px 50%; background-repeat: no-repeat; position: relative; }
+.ui-input-search input.ui-input-text { border: none; width: 98%; padding: .4em 0; margin: 0; display: block; background: transparent none; outline: 0 !important; }
+.ui-input-search .ui-input-clear { position: absolute; right: 0; top: 50%; margin-top: -14px; }
+.ui-input-search .ui-input-clear-hidden { display: none; }
+
+/* orientation adjustments - incomplete!*/
+@media all and (min-width: 450px){
+ label.ui-input-text { vertical-align: top; display: inline-block; width: 20%; margin: 0 2% 0 0 }
+ input.ui-input-text,
+ textarea.ui-input-text,
+ .ui-input-search { width: 60%; display: inline-block; }
+ .ui-input-search { width: 50%; }
+ .ui-input-search input.ui-input-text { width: 98%; /*echos rule from above*/ }
+}/*
+* jQuery Mobile Framework
+* Copyright (c) jQuery Project
+* Dual licensed under the MIT (MIT-LICENSE.txt) or GPL (GPL-LICENSE.txt) licenses.
+*/
+.ui-listview { margin: 0; counter-reset: listnumbering; }
+.ui-content .ui-listview { margin: -15px; }
+.ui-content .ui-listview-inset { margin: 1em 0; }
+.ui-listview, .ui-li { list-style:none; padding:0; }
+.ui-li, .ui-li.ui-field-contain { display: block; margin:0; position: relative; overflow: visible; text-align: left; border-width: 0; border-top-width: 1px; }
+.ui-li .ui-btn-text a.ui-link-inherit { text-overflow: ellipsis; overflow: hidden; white-space: nowrap; }
+.ui-li-divider, .ui-li-static { padding: .5em 15px; font-size: 14px; font-weight: bold; }
+.ui-li-divider { counter-reset: listnumbering; }
+ol.ui-listview .ui-link-inherit:before, ol.ui-listview .ui-li-static:before, .ui-li-dec { font-size: .8em; display: inline-block; padding-right: .3em; font-weight: normal;counter-increment: listnumbering; content: counter(listnumbering) ". "; }
+ol.ui-listview .ui-li-jsnumbering:before { content: "" !important; } /* to avoid chance of duplication */
+.ui-listview-inset .ui-li { border-right-width: 1px; border-left-width: 1px; }
+.ui-li:last-child, .ui-li.ui-field-contain:last-child { border-bottom-width: 1px; }
+.ui-li>.ui-btn-inner { display: block; position: relative; padding: 0; }
+.ui-li .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li { padding: .7em 75px .7em 15px; display: block; }
+.ui-li-has-thumb .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-thumb { min-height: 60px; padding-left: 100px; }
+.ui-li-has-icon .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-icon { min-height: 20px; padding-left: 40px; }
+.ui-li-heading { font-size: 16px; font-weight: bold; display: block; margin: .6em 0; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; }
+.ui-li-desc { font-size: 12px; font-weight: normal; display: block; margin: -.5em 0 .6em; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; }
+.ui-li-thumb, .ui-li-icon { position: absolute; left: 1px; top: 0; max-height: 80px; max-width: 80px; }
+.ui-li-icon { max-height: 40px; max-width: 40px; left: 10px; top: .9em; }
+.ui-li-thumb, .ui-li-icon, .ui-li-content { float: left; margin-right: 10px; }
+
+.ui-li-aside { float: right; width: 50%; text-align: right; margin: .3em 0; }
+@media all and (min-width: 480px){
+ .ui-li-aside { width: 45%; }
+}
+.ui-li-divider { cursor: default; }
+.ui-li-has-alt .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-alt { padding-right: 95px; }
+.ui-li-count { position: absolute; font-size: 11px; font-weight: bold; padding: .2em .5em; top: 50%; margin-top: -.9em; right: 38px; }
+.ui-li-divider .ui-li-count, .ui-li-static .ui-li-count { right: 10px; }
+.ui-li-has-alt .ui-li-count { right: 55px; }
+.ui-li-link-alt { position: absolute; width: 40px; height: 100%; border-width: 0; border-left-width: 1px; top: 0; right: 0; margin: 0; padding: 0; }
+.ui-li-link-alt .ui-btn { overflow: hidden; position: absolute; right: 8px; top: 50%; margin: -11px 0 0 0; border-bottom-width: 1px; }
+.ui-li-link-alt .ui-btn-inner { padding: 0; position: static; }
+.ui-li-link-alt .ui-btn .ui-icon { right: 50%; margin-right: -9px; }
+
+.ui-listview-filter { border-width: 0; overflow: hidden; margin: -15px -15px 15px -15px }
+.ui-listview-filter .ui-input-search { margin: 5px; width: auto; display: block; }
+
+.ui-listview-filter-inset { margin: -15px -5px -15px -5px; background: transparent; }
+.ui-li.ui-screen-hidden{display:none;}
+/* Odd iPad positioning issue. */
+@media only screen and (min-device-width: 768px) and (max-device-width: 1024px) {
+ .ui-li .ui-btn-text { overflow: visible; }
+}/*
+* jQuery Mobile Framework
+* Copyright (c) jQuery Project
+* Dual licensed under the MIT (MIT-LICENSE.txt) or GPL (GPL-LICENSE.txt) licenses.
+*/
+label.ui-slider { display: block; }
+input.ui-slider-input { display: inline-block; width: 50px; }
+select.ui-slider-switch { display: none; }
+div.ui-slider { position: relative; display: inline-block; overflow: visible; height: 15px; padding: 0; margin: 0 2% 0 20px; top: 4px; width: 66%; }
+a.ui-slider-handle { position: absolute; z-index: 10; top: 50%; width: 28px; height: 28px; margin-top: -15px; margin-left: -15px; }
+a.ui-slider-handle .ui-btn-inner { padding-left: 0; padding-right: 0; }
+@media all and (min-width: 480px){
+ label.ui-slider { display: inline-block; width: 20%; margin: 0 2% 0 0; }
+ div.ui-slider { width: 45%; }
+}
+
+div.ui-slider-switch { height: 32px; overflow: hidden; margin-left: 0; }
+div.ui-slider-inneroffset { margin-left: 50%; position: absolute; top: 1px; height: 100%; width: 50%; }
+div.ui-slider-handle-snapping { -webkit-transition: left 100ms linear; }
+div.ui-slider-labelbg { position: absolute; top:0; margin: 0; border-width: 0; }
+div.ui-slider-switch div.ui-slider-labelbg-a { width: 60%; height: 100%; left: 0; }
+div.ui-slider-switch div.ui-slider-labelbg-b { width: 60%; height: 100%; right: 0; }
+.ui-slider-switch-a div.ui-slider-labelbg-a, .ui-slider-switch-b div.ui-slider-labelbg-b { z-index: -1; }
+.ui-slider-switch-a div.ui-slider-labelbg-b, .ui-slider-switch-b div.ui-slider-labelbg-a { z-index: 0; }
+
+div.ui-slider-switch a.ui-slider-handle { z-index: 20; width: 101%; height: 32px; margin-top: -18px; margin-left: -101%; }
+span.ui-slider-label { width: 100%; position: absolute;height: 32px; font-size: 16px; text-align: center; line-height: 2; background: none; border-color: transparent; }
+span.ui-slider-label-a { left: -100%; margin-right: -1px }
+span.ui-slider-label-b { right: -100%; margin-left: -1px }
+
--- /dev/null
+++ b/css/local.css.php
@@ -1,1 +1,216 @@
-
+<?php
+ header('Content-type: text/css');
+ ob_start("compress");
+ function compress($buffer) {
+ /* remove comments */
+ $buffer = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $buffer);
+ /* remove tabs, spaces, newlines, etc. */
+ $buffer = str_replace(array("\r\n", "\r", "\n", "\t", ' ', ' ', ' '), '', $buffer);
+ return $buffer;
+ }
+
+echo '
+.ui-li-thumb, .ui-li-icon { position: relative; }
+
+ .ui-navbar {
+ width: 100%;
+ }
+ .ui-btn-inner {
+ white-space: normal !important;
+ }
+ .ui-li-heading {
+ white-space: normal !important;
+ }
+ .ui-listview-filter {
+ margin: 0 !important;
+ }
+ .ui-icon-navigation {
+ background-image: url(images/113-navigation.png);
+ background-position: 1px 0;
+ }
+ .ui-icon-beaker {
+ background-image: url(images/91-beaker-2.png);
+ background-position: 1px 0;
+ }
+ #footer {
+ text-size: 0.75em;
+ text-align: center;
+ }
+ body {
+ background-color: #F0F0F0;
+ }
+ #jqm-homeheader {
+ text-align: center;
+ }
+ .viaPoints {
+ display: none;
+ text-size: 0.2em;
+ }
+ .min-width-480px .viaPoints {
+ display: inline;
+ }
+ #extrainfo {
+ visibility: hidden;
+ display: none;
+ }
+ #servicewarning {
+ padding: 1em;
+ margin-bottom: 0.5em;
+ text-size: 0.2em;
+ background-color: #FF9;
+ -moz-border-radius: 15px;
+border-radius: 15px;
+ }
+
+
+#footer {
+clear:both;
+text-align:center;
+}
+ // source http://webaim.org/techniques/skipnav/
+ #skip a, #skip a:hover, #skip a:visited
+{
+position:absolute;
+left:0px;
+top:-500px;
+width:1px;
+height:1px;
+overflow:hidden;
+}
+
+#skip a:active, #skip a:focus
+{
+position:static;
+width:auto;
+height:auto;
+}';
+
+//if (false)
+ echo '
+// adaptive layout from jQuery Mobile docs site
+.type-interior .content-secondary {
+ border-right: 0;
+ border-left: 0;
+ margin: 10px -15px 0;
+ background: #fff;
+ border-top: 1px solid #ccc;
+}
+.type-home .ui-content {
+ margin-top: 5px;
+}
+.type-interior .ui-content {
+ padding-bottom: 0;
+}
+.content-secondary .ui-collapsible-contain {
+ padding: 10px 15px;
+
+}
+.content-secondary .ui-collapsible-heading {
+ margin: 0 0 30px;
+}
+.content-secondary .ui-collapsible-heading-collapsed,
+.content-secondary .ui-collapsible-content {
+ padding:0;
+ margin: 0;
+}
+@media all and (min-width: 650px){
+.content-secondary {
+ text-align: left;
+ float: left;
+ width: 45%;
+ background: none;
+ border-top: 0;
+ }
+ .content-secondary,
+ .type-interior .content-secondary {
+ margin: 30px 0 20px 2%;
+ padding: 20px 4% 0 0;
+ background: none;
+ }
+ .type-index .content-secondary {
+ padding: 0;
+ }
+ .type-index .content-secondary .ui-listview {
+ margin: 0;
+ }
+ .content-primary {
+ width: 45%;
+ float: right;
+ margin-top: 30px;
+ margin-right: 1%;
+ padding-right: 1%;
+ }
+ .content-primary ul:first-child {
+ margin-top: 0;
+ }
+
+ .type-interior .content-primary {
+ padding: 1.5em 6% 3em 0;
+ margin: 0;
+ }
+ /* fix up the collapsibles - expanded on desktop */
+ .content-secondary .ui-collapsible-heading {
+ display: none;
+ }
+ .content-secondary .ui-collapsible-contain {
+ margin:0;
+ }
+ .content-secondary .ui-collapsible-content {
+ display: block;
+ margin: 0;
+ padding: 0;
+ }
+ .type-interior .content-secondary .ui-li-divider {
+ padding-top: 1em;
+ padding-bottom: 1em;
+ }
+ .type-interior .content-secondary {
+ margin: 0;
+ padding: 0;
+ }
+}
+@media all and (min-width: 750px){
+ .type-home .ui-content,
+ .type-interior .ui-content {
+ background-position: 39%;
+ }
+ .content-secondary {
+ width: 34%;
+ }
+ .content-primary {
+ width: 56%;
+ padding-right: 1%;
+ }
+ .type-interior .ui-content {
+ background-position: 34%;
+ }
+}
+
+@media all and (min-width: 1200px){
+ .type-home .ui-content{
+ background-position: 38.5%;
+ }
+ .type-interior .ui-content {
+ background-position: 30%;
+ }
+ .content-secondary {
+ width: 30%;
+ padding-right:6%;
+ margin: 30px 0 20px 5%;
+ }
+ .type-interior .content-secondary {
+ margin: 0;
+ padding: 0;
+ }
+ .content-primary {
+ width: 50%;
+ margin-right: 5%;
+ padding-right: 3%;
+ }
+ .type-interior .content-primary {
+ width: 60%;
+ }
+}';
+ ob_end_flush();
+?>
+
--- a/dotcloud/postinstall
+++ b/dotcloud/postinstall
@@ -3,8 +3,8 @@
curl http://s3-ap-southeast-1.amazonaws.com/busresources/cbrfeed.zip \
-o /home/dotcloud/current/cbrfeed.zip
-wget http://s3-ap-southeast-1.amazonaws.com/busresources/Graph.obj \
--O /tmp/Graph.obj
+curl http://s3-ap-southeast-1.amazonaws.com/busresources/Graph.obj \
+-o /tmp/Graph.obj
#db setup
#curl https://github.com/maxious/ACTBus-ui/raw/master/transitdata.cbrfeed.sql.gz -o transitdata.cbrfeed.sql.gz
--- /dev/null
+++ b/geo/stops.kml.php
@@ -1,1 +1,36 @@
-
+<?php
+header('Content-type: application/vnd.google-earth.kml+xml');
+//http://wiki.openstreetmap.org/wiki/OpenLayers_Dynamic_KML
+// Creates the KML/XML Document.
+$dom = new DOMDocument('1.0', 'UTF-8');
+// Creates the root KML element and appends it to the root document.
+$node = $dom->createElementNS('http://earth.google.com/kml/2.1', 'kml');
+$parNode = $dom->appendChild($node);
+// Creates a KML Document element and append it to the KML element.
+$dnode = $dom->createElement('Document');
+$docNode = $parNode->appendChild($dnode);
+if ($suburb != "") $result_stops = getStopsBySuburb($suburb);
+else $result_stops = getStops();
+foreach ($result_stops as $stop) {
+ $description = 'http://bus.lambdacomplex.org/' . 'stop.php?stopid=' . $stop['stop_id'] . " <br>";
+ // Creates a Placemark and append it to the Document.
+ $node = $dom->createElement('Placemark');
+ $placeNode = $docNode->appendChild($node);
+ // Creates an id attribute and assign it the value of id column.
+ $placeNode->setAttribute('id', 'placemark' . $stop['stop_id']);
+ // Create name, and description elements and assigns them the values of the name and address columns from the results.
+ $nameNode = $dom->createElement('name', htmlentities($stop['stop_name']));
+ $descriptionNode = $dom->createElement('description', $description);
+ $placeNode->appendChild($nameNode);
+ $placeNode->appendChild($descriptionNode);
+ // Creates a Point element.
+ $pointNode = $dom->createElement('Point');
+ $placeNode->appendChild($pointNode);
+ // Creates a coordinates element and gives it the value of the lng and lat columns from the results.
+ $coorStr = $stop['stop_lon'] . ',' . $stop['stop_lat'];
+ $coorNode = $dom->createElement('coordinates', $coorStr);
+ $pointNode->appendChild($coorNode);
+}
+$kmlOutput = $dom->saveXML();
+echo $kmlOutput;
+?>
--- /dev/null
+++ b/include/common-auth.inc.php
@@ -1,1 +1,91 @@
+<?php
+function getScheme()
+{
+ $scheme = 'http';
+ if (isset($_SERVER['HTTPS']) and $_SERVER['HTTPS'] == 'on') {
+ $scheme .= 's';
+ }
+ return $scheme;
+ }
+function getTrustRoot()
+{
+ return sprintf("%s://%s:%s%s/",
+ getScheme(), $_SERVER['SERVER_NAME'],
+ $_SERVER['SERVER_PORT'],
+ dirname($_SERVER['PHP_SELF']));
+ }
+
+
+// Includes required files
+set_include_path(get_include_path() . PATH_SEPARATOR . $labsPath."lib/openid-php/");
+require_once "Auth/OpenID/Consumer.php";
+require_once "Auth/OpenID/FileStore.php";
+require_once "Auth/OpenID/AX.php";
+
+
+
+function login()
+{
+ // Just tested this with/for Google, needs trying with others ...
+$oid_identifier = 'https://www.google.com/accounts/o8/id';
+ // Create file storage area for OpenID data
+ $store = new Auth_OpenID_FileStore('lib/openid-php/oid_store');
+ // Create OpenID consumer
+ $consumer = new Auth_OpenID_Consumer($store);
+ // Create an authentication request to the OpenID provider
+ $auth = $consumer -> begin($oid_identifier);
+
+ // Create attribute request object
+ // See http://code.google.com/apis/accounts/docs/OpenID.html#Parameters for parameters
+ // Usage: make($type_uri, $count=1, $required=false, $alias=null)
+ $attribute[] = Auth_OpenID_AX_AttrInfo :: make('http://axschema.org/contact/email', 2, 1, 'email');
+ $attribute[] = Auth_OpenID_AX_AttrInfo :: make('http://axschema.org/namePerson/first', 1, 1, 'firstname');
+ $attribute[] = Auth_OpenID_AX_AttrInfo :: make('http://axschema.org/namePerson/last', 1, 1, 'lastname');
+
+ // Create AX fetch request
+ $ax = new Auth_OpenID_AX_FetchRequest;
+
+ // Add attributes to AX fetch request
+ foreach($attribute as $attr) {
+ $ax -> add($attr);
+ }
+
+ // Add AX fetch request to authentication request
+ $auth -> addExtension($ax);
+ $_SESSION['returnURL'] = curPageURL();
+ // Redirect to OpenID provider for authentication
+ $url = $auth -> redirectURL(getTrustRoot(), $_SESSION['returnURL']);
+ header('Location: ' . $url);
+ }
+
+
+function auth()
+
+{
+ if ($_SESSION['authed'] == true) return true;
+
+ // Create file storage area for OpenID data
+ $store = new Auth_OpenID_FileStore('lib/openid-php/oid_store');
+ // Create OpenID consumer
+ $consumer = new Auth_OpenID_Consumer($store);
+ // Create an authentication request to the OpenID provider
+ $response = $consumer -> complete($_SESSION['returnURL']);
+
+ if ($response -> status == Auth_OpenID_SUCCESS) {
+ // Get registration informations
+ $ax = new Auth_OpenID_AX_FetchResponse();
+ $obj = $ax -> fromSuccessResponse($response);
+ $email = $obj -> data['http://axschema.org/contact/email'][0];
+ var_dump($email);
+ if ($email != "maxious@gmail.com") {
+ die("Access Denied");
+ } else {
+ $_SESSION['authed'] = true;
+ }
+ } else {
+ login();
+ }
+ }
+ if ($_REQUEST['janrain_nonce']) auth();
+?>
--- a/include/common-geo.inc.php
+++ b/include/common-geo.inc.php
@@ -1,8 +1,9 @@
<?php
// 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");
-function staticmap($mapPoints, $zoom = 0, $markerImage = "iconb", $collapsible = true)
+function staticmap($mapPoints, $zoom = 0, $markerImage = "iconb", $collapsible = true, $twotone = false)
{
+ global $labsPath;
$width = 300;
$height = 300;
$metersperpixel[9] = 305.492 * $width;
@@ -12,14 +13,11 @@
$metersperpixel[13] = 19.093 * $width;
$metersperpixel[14] = 9.547 * $width;
$metersperpixel[15] = 4.773 * $width;
- $metersperpixel[16] = 2.387 * $width;
+ //$metersperpixel[16] = 2.387 * $width;
// $metersperpixel[17]=1.193*$width;
$center = "";
$markers = "";
- $minlat = 999;
- $minlon = 999;
- $maxlat = 0;
- $maxlon = 0;
+ $mapwidthinmeters = 50;
if (sizeof($mapPoints) < 1) return "map error";
if (sizeof($mapPoints) === 1) {
if ($zoom == 0) $zoom = 14;
@@ -28,27 +26,30 @@
}
else {
foreach ($mapPoints as $index => $mapPoint) {
- $markers.= $mapPoint[0] . "," . $mapPoint[1] . "," . $markerImage . ($index + 1);
+ if ($twotone && $index == 0) {
+ $markers.= $mapPoint[0] . "," . $mapPoint[1] . "," . "iconr" . ($index + 1);
+ $center = "{$mapPoints[0][0]},{$mapPoints[0][1]}";
+ }
+ else {
+ $markers.= $mapPoint[0] . "," . $mapPoint[1] . "," . $markerImage . ($index + 1);
+ }
if ($index + 1 != sizeof($mapPoints)) $markers.= "|";
- if ($mapPoint[0] < $minlat) $minlat = $mapPoint[0];
- if ($mapPoint[0] > $maxlat) $maxlat = $mapPoint[0];
- if ($mapPoint[1] < $minlon) $minlon = $mapPoint[1];
- if ($mapPoint[1] > $maxlon) $maxlon = $mapPoint[1];
+ $dist = distance($mapPoints[0][0], $mapPoint[0][1], $mapPoint[0], $mapPoint[1]);
+ $mapwidthinmeters = ($dist > $mapwidthinmeters ? $dist : $mapwidthinmeters);
$totalLat+= $mapPoint[0];
$totalLon+= $mapPoint[1];
}
if ($zoom == 0) {
$mapwidthinmeters = distance($minlat, $minlon, $minlat, $maxlon);
foreach (array_reverse($metersperpixel, true) as $zoomLevel => $maxdistance) {
- if ($zoom == 0 && $mapwidthinmeters < ($maxdistance + 50)) $zoom = $zoomLevel;
+ if ($zoom == 0 && $mapwidthinmeters * 1.5 < ($maxdistance)) $zoom = $zoomLevel;
}
}
$center = $totalLat / sizeof($mapPoints) . "," . $totalLon / sizeof($mapPoints);
}
$output = "";
if ($collapsible) $output.= '<div class="map" data-role="collapsible" data-collapsed="true"><h3>Open Map...</h3>';
- $output.= '<img class="map" src="' . curPageURL() . '/lib/staticmaplite/staticmap.php?center=' . $center . '&zoom=' . $zoom . '&size=' . $width . 'x' . $height . '&markers=' .
-$markers . '" width=' . $width . ' height=' . $height . '>';
+ $output.= '<img class="map" src="' . curPageURL() . '/' . $labsPath . '/lib/staticmaplite/staticmap.php?center=' . $center . '&zoom=' . $zoom . '&size=' . $width . 'x' . $height . '&markers=' . $markers . '" width=' . $width . ' height=' . $height . '>';
if ($collapsible) $output.= '</div>';
return $output;
}
@@ -66,11 +67,11 @@
$c = 2 * atan2(sqrt($a) , sqrt(1 - $a));
$km = $r * $c;
if ($roundLargeValues) {
- if ($km < 1) return floor($km * 1000);
- else return round($km,2)."k";
- } else return floor($km * 1000);
+ if ($km < 1) return floor($km * 1000);
+ else return round($km, 2) . "k";
+ }
+ else return floor($km * 1000);
}
-
function decodePolylineToArray($encoded)
{
// source: http://latlongeeks.com/forum/viewtopic.php?f=4&t=5
--- a/include/common-request.inc.php
+++ b/include/common-request.inc.php
@@ -15,7 +15,7 @@
$nearby = true;
}
if (isset($_REQUEST['suburb'])) {
- $suburb = filter_var($_REQUEST['suburb'], FILTER_SANITIZE_STRING);
+ $suburb = $_REQUEST['suburb'];
}
$pageKey = filter_var($_REQUEST['pageKey'], FILTER_SANITIZE_NUMBER_INT);
$lat = filter_var($_REQUEST['lat'], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION);
--- a/include/common-session.inc.php
+++ b/include/common-session.inc.php
@@ -41,9 +41,6 @@
}
}
}
- if ($_SESSION['lat'] != "" && isAnalyticsOn()) {
- trackEvent("Geolocation", "Updated Location", "Geocoded - " . ($geocoded ? "Yes" : "No"));
- }
sessionUpdated();
}
function sessionUpdated()
@@ -63,3 +60,4 @@
return ($_SESSION['time'] ? $_SESSION['time'] : date("H:i:s"));
}
?>
+
--- a/include/common-template.inc.php
+++ b/include/common-template.inc.php
@@ -25,39 +25,40 @@
}
function include_header($pageTitle, $pageType, $opendiv = true, $geolocate = false, $datepicker = false)
{
+ global $labsPath,$serviceAlertsEnabled;
echo '
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
- <title>' . $pageTitle . '</title>
- <meta name="google-site-verification"
-content="-53T5Qn4TB_de1NyfR_ZZkEVdUNcNFSaYKSFkWKx-sY" />
- <link rel="stylesheet" href="css/jquery-ui-1.8.12.custom.css" />';
+<meta name="viewport" content="width=device-width, initial-scale=1">
+<title>' . $pageTitle . ' - Canberra Bus Timetable</title>
+ <meta name="google-site-verification" content="-53T5Qn4TB_de1NyfR_ZZkEVdUNcNFSaYKSFkWKx-sY" />
+<link rel="dns-prefetch" href="//code.jquery.com">
+<link rel="dns-prefetch" href="//ajax.googleapis.com">
+ <link rel="stylesheet" href="' . $labsPath . 'css/jquery-ui-1.8.12.custom.css" />';
if (isDebugServer()) {
- echo '<link rel="stylesheet" href="css/jquery.mobile-1.0a4.css" />
-
- <script type="text/javascript" src="js/jquery-1.5.js"></script>
- <script>$(document).bind("mobileinit", function(){
+ $jqmcss = $labsPath . 'css/jquery.mobile-1.0b2.css';
+ $jqjs = $labsPath . 'js/jquery-1.6.2.min.js';
+ $jqmjs = $labsPath . 'js/jquery.mobile-1.0b2.js';
+ }
+ else {
+ $jqmcss = "//code.jquery.com/mobile/1.0b2/jquery.mobile-1.0b2.min.css";
+ $jqjs = "//ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js";
+ $jqmjs = "//code.jquery.com/mobile/1.0b2/jquery.mobile-1.0b2.min.js";
+ }
+ echo '<link rel="stylesheet" href="' . $jqmcss . '" />
+ <script src="'.$jqjs.'"></script>
+ <script>$(document).bind("mobileinit", function(){
$.mobile.ajaxEnabled = false;
});
-</script>
- <script type="text/javascript" src="js/jquery.mobile-1.0a4.js"></script>';
- }
- else {
- echo '<link rel="stylesheet" href="http://code.jquery.com/mobile/1.0a4.1/jquery.mobile-1.0a4.1.min.css" />
- <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js"></script>
- <script>$(document).bind("mobileinit", function(){
- $.mobile.ajaxEnabled = false;
-});
-</script>
- <script type="text/javascript" src="http://code.jquery.com/mobile/1.0a4.1/jquery.mobile-1.0a4.1.min.js"></script>';
- }
- echo '
- <script src="js/jquery.ui.autocomplete.min.js"></script>
-<script src="js/jquery.ui.core.min.js"></script>
-<script src="js/jquery.ui.position.min.js"></script>
-<script src="js/jquery.ui.widget.min.js"></script>
+</script>
+ <script src="'.$jqmjs.'"></script>
+
+<script src="' . $labsPath . 'js/jquery.ui.core.min.js"></script>
+<script src="' . $labsPath . 'js/jquery.ui.position.min.js"></script>
+<script src="' . $labsPath . 'js/jquery.ui.widget.min.js"></script>
+ <script src="' . $labsPath . 'js/jquery.ui.autocomplete.min.js"></script>
<script>
$(function() {
$( "#geolocate" ).autocomplete({
@@ -73,96 +74,18 @@
minLength: 2
});
});
- </script>
- ';
- echo '<style type="text/css">
- .ui-navbar {
- width: 100%;
- }
- .ui-btn-inner {
- white-space: normal !important;
- }
- .ui-li-heading {
- white-space: normal !important;
- }
- .ui-listview-filter {
- margin: 0 !important;
- }
- .ui-icon-navigation {
- background-image: url(css/images/113-navigation.png);
- background-position: 1px 0;
- }
- .ui-icon-beaker {
- background-image: url(css/images/91-beaker-2.png);
- background-position: 1px 0;
- }
- #footer {
- text-size: 0.75em;
- text-align: center;
- }
- body {
- background-color: #F0F0F0;
- }
- #jqm-homeheader {
- text-align: center;
- }
- .viaPoints {
- display: none;
- text-size: 0.2em;
- }
- .min-width-480px .viaPoints {
- display: inline;
- }
- #extrainfo {
- visibility: hidden;
- display: none;
- }
- #servicewarning {
- padding: 1em;
- margin-bottom: 0.5em;
- text-size: 0.2em;
- background-color: #FF9;
- -moz-border-radius: 15px;
-border-radius: 15px;
- }
-
-/*#leftcolumn {
- float: none;
-}
-.min-width-768px #leftcolumn {
- float: left;
- width: 30%;
-}
-#rightcolumn {
- float: none;
-}
-.min-width-768px #rightcolumn {
- float: right;
- width: 68%;
-}*/
-
-#footer {
-clear:both;
-text-align:center;
-}
- // source http://webaim.org/techniques/skipnav/
- #skip a, #skip a:hover, #skip a:visited
-{
-position:absolute;
-left:0px;
-top:-500px;
-width:1px;
-height:1px;
-overflow:hidden;
-}
-
-#skip a:active, #skip a:focus
-{
-position:static;
-width:auto;
-height:auto;
-}
-</style>';
+ </script>';
+ echo '<style type="text/css">';
+ if (strstr($_SERVER['HTTP_USER_AGENT'], 'Android')) echo '.ui-shadow,.ui-btn-up-a,.ui-btn-hover-a,.ui-btn-down-a,.ui-body-b,.ui-btn-up-b,.ui-btn-hover-b,
+.ui-btn-down-b,.ui-bar-c,.ui-body-c,.ui-btn-up-c,.ui-btn-hover-c,.ui-btn-down-c,.ui-bar-c,.ui-body-d,
+.ui-btn-up-d,.ui-btn-hover-d,.ui-btn-down-d,.ui-bar-d,.ui-body-e,.ui-btn-up-e,.ui-btn-hover-e,
+.ui-btn-down-e,.ui-bar-e,.ui-overlay-shadow,.ui-shadow,.ui-btn-active,.ui-body-a,.ui-bar-a {
+ text-shadow: none;
+ box-shadow: none;
+ -webkit-box-shadow: none;
+}';
+ echo '</style>';
+ echo '<link rel="stylesheet" href="' . $labsPath . 'css/local.css.php" />';
if (strstr($_SERVER['HTTP_USER_AGENT'], 'iPhone') || strstr($_SERVER['HTTP_USER_AGENT'], 'iPod') || strstr($_SERVER['HTTP_USER_AGENT'], 'iPad')) {
echo '<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="black" />
@@ -195,10 +118,6 @@
$(document).ready(function() {
$('#here').click(function(event) { $('#geolocate').val(geolocate()); return false;});
$('#here').show();
- /*if ($.mobile.media('screen and (min-width: 768px)')) {
- $('map a:first').click();
- $('#settings a:first').click();
- }*/
});
";
if (!isset($_SESSION['lat']) || $_SESSION['lat'] == "") echo "geolocate();";
@@ -223,26 +142,33 @@
<div data-role="header" data-position="inline">
<a href="' . (isset($_SERVER["HTTP_REFERER"]) ? $_SERVER["HTTP_REFERER"] : "javascript:history.go(-1)") . '" data-icon="arrow-l" data-rel="back" class="ui-btn-left">Back</a>
<h1>' . $pageTitle . '</h1>
- <a href="/index.php" data-icon="home" class="ui-btn-right">Home</a>
+ <a href="' . $labsPath . '/index.php" data-icon="home" class="ui-btn-right">Home</a>
</div><!-- /header -->
<a name="maincontent" id="maincontent"></a>
<div data-role="content"> ';
$overrides = getServiceOverride();
if ($overrides['service_id']) {
- if ($overrides['service_id'] == "noservice") {
- echo '<div id="servicewarning">Buses are <strong>not running today</strong> due to industrial action/public holiday. See <a
+ if ($overrides['service_id'] == "noservice") {
+ echo '<div id="servicewarning">Buses are <strong>not running today</strong> due to industrial action/public holiday. See <a
href="http://www.action.act.gov.au">http://www.action.act.gov.au</a> for details.</div>';
- }
- else {
- echo '<div id="servicewarning">Buses are running on an altered timetable today due to industrial action/public holiday. See <a href="http://www.action.act.gov.au">http://www.action.act.gov.au</a> for details.</div>';
- }
+ }
+ else {
+ echo '<div id="servicewarning">Buses are running on an altered timetable today due to industrial action/public holiday. See <a href="http://www.action.act.gov.au">http://www.action.act.gov.au</a> for details.</div>';
}
}
-
+ if ($GTFSREnabled) {
+ $serviceAlerts = getServiceAlertsAsArray("agency","0");
+ foreach ($serviceAlerts['entity'] as $entity) {
+ echo "<div id='servicewarning'>".date("F j, g:i a",strtotime($entity['alert']['active_period'][0]['start']))." to ". date("F j, g:i a", strtotime($entity['alert']['active_period'][0]['end']))."{$entity['alert']['header_text']['translation'][0]['text']}<br>Warning: {$entity['alert']['description_text']['translation'][0]['text']}
+ <br><a href='{$entity['alert']['url']['translation'][0]['text']}'>Source</a> </div>";
+ }
+ }
+ }
}
function include_footer()
{
- echo '<div id="footer"><a href="about.php">About/Contact Us</a> <a href="feedback.php">Feedback/Bug Report</a>';
+ global $labsPath;
+ echo '<div id="footer"><a href="' . $labsPath . 'about.php">About/Contact Us</a> <a href="' . $labsPath . 'feedback.php">Feedback/Bug Report</a> <a href="' . $labsPath . 'privacy.php">Privacy Policy</a>';
echo '</div>';
if (isAnalyticsOn()) {
echo "<script> (function() {
@@ -255,17 +181,15 @@
})();</script>";
$googleAnalyticsImageUrl = googleAnalyticsGetImageUrl();
echo '<noscript><img src="' . $googleAnalyticsImageUrl . '" /></noscript>';
-
- }
- echo "\n</div></div></body></html>";
-}
-function timePlaceSettings($geolocate = false)
+ }
+ echo "\n</div></div></body></html>";
+}
+function placeSettings()
{
global $service_periods;
$geoerror = false;
- if ($geolocate == true) {
$geoerror = !isset($_SESSION['lat']) || !isset($_SESSION['lat']) || $_SESSION['lat'] == "" || $_SESSION['lon'] == "";
- }
+
echo '<div id="error">';
if ($geoerror) {
echo 'Sorry, but your location could not currently be detected.
@@ -274,27 +198,13 @@
}
echo '</div>';
echo '<div id="settings" data-role="collapsible" data-collapsed="' . !$geoerror . '">
- <h3>Change Time/Place (' . (isset($_SESSION['time']) ? $_SESSION['time'] : "Current Time,") . ' ' . ucwords(service_period()) . ')...</h3>
+ <h3>Change Location...</h3>
<form action="' . basename($_SERVER['PHP_SELF']) . "?" . $_SERVER['QUERY_STRING'] . '" method="post">
<div class="ui-body">
<div data-role="fieldcontain">
<label for="geolocate"> Current Location: </label>
<input type="text" id="geolocate" name="geolocate" value="' . (isset($_SESSION['lat']) && isset($_SESSION['lon']) ? $_SESSION['lat'] . "," . $_SESSION['lon'] : "Enter co-ordinates or address here") . '"/> <a href="#" style="display:none" name="here" id="here">Here?</a>
</div>
- <div data-role="fieldcontain">
- <label for="time"> Time: </label>
- <input type="time" name="time" id="time" value="' . (isset($_SESSION['time']) ? $_SESSION['time'] : date("H:i")) . '"/>
- <a href="#" name="currentTime" id="currentTime" onClick="var d = new Date();' . "$('#time').val(d.getHours() +':'+ (d.getMinutes().toString().length == 1 ? '0'+ d.getMinutes(): d.getMinutes()));" . '">Current Time?</a>
- </div>
- <div data-role="fieldcontain">
- <label for="service_period"> Service Period: </label>
- <select name="service_period" id="service_period">';
- foreach ($service_periods as $service_period) {
- echo "<option value=\"$service_period\"" . (service_period() === $service_period ? " SELECTED" : "") . '>' . ucwords($service_period) . '</option>';
- }
- echo '</select>
- <a href="#" style="display:none" name="currentPeriod" id="currentPeriod">Current Period?</a>
- </div>
<input type="submit" value="Update"/>
</div></form>
--- a/include/common-transit.inc.php
+++ b/include/common-transit.inc.php
@@ -5,16 +5,16 @@
'weekday'
);
-function service_period()
+function service_period($date = "")
{
if (isset($_SESSION['service_period'])) return $_SESSION['service_period'];
- $override = getServiceOverride();
+ $override = getServiceOverride($date);
if ($override['service_id']){
return $override['service_id'];
}
- switch (date('w')) {
+ switch (date('w',($date != "" ? $date : time()))) {
case 0:
return 'sunday';
case 6:
@@ -23,9 +23,12 @@
return 'weekday';
}
}
-function midnight_seconds()
+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 (isset($_SESSION['time'])) {
$time = strtotime($_SESSION['time']);
return (date("G", $time) * 3600) + (date("i", $time) * 60) + date("s", $time);
@@ -42,5 +45,216 @@
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"
+);
+$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 . $labsPath."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($labsPath."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
+
+ - add,remove,patch,inform (null)
+ - stop
+ - trip
+ - network
+ - classes (WHERE=)
+ - route (short_name or route_id)
+ - street
+ - stop
+ - trip
+ Currently support:
+ network inform
+ trip patch: stop remove
+ street inform: route inform, trip inform, stop inform
+ route patch: trip remove
+ */
+ $fm = new transit_realtime\FeedMessage();
+$fh = new transit_realtime\FeedHeader();
+$fh->setGtfsRealtimeVersion(1);
+$fh->setTimestamp(time());
+$fm->setHeader($fh);
+foreach(getCurrentAlerts() as $alert) {
+$fe = new transit_realtime\FeedEntity();
+ $fe->setId($alert['id']);
+ $fe->setIsDeleted(false);
+ $alert = new transit_realtime\Alert();
+ $tr = new transit_realtime\TimeRange();
+ $tr->setStart($alert['start']);
+ $tr->setEnd($alert['end']);
+ $alert-> addActivePeriod($tr);
+ $informedEntities = getInformedAlerts($alert['id'],$_REQUEST['filter_class'],$_REQUEST['filter_id']);
+ if (sizeof($informedEntities) >0) {
+ $informed = Array();
+ $es = new transit_realtime\EntitySelector();
+ if ($informedEntity['informed_class'] == "agency") {
+ $es->setAgencyId($informedEntity['informed_id']);
+ }
+ if ($informedEntity['informed_class'] == "stop") {
+ $es->setStopId($informedEntity['informed_id']);
+ }
+ if ($informedEntity['informed_class'] == "route") {
+ $es->setRouteId($informedEntity['informed_id']);
+ }
+ if ($informedEntity['informed_class'] == "trip") {
+ $td = new transit_realtime\TripDescriptor();
+ $td->setTripId($informedEntity['informed_id']);
+ $es->setTrip($td);
+ }
+ $alert-> addInformedEntity($es);
+ }
+ $alert->setCause(constant("transit_realtime\Alert\Cause::".$alert['cause']));
+ $alert->setEffect(constant("transit_realtime\Alert\Effect::".$alert['effect']));
+ $tsUrl = new transit_realtime\TranslatedString();
+ $tUrl = new transit_realtime\TranslatedString\Translation();
+ $tUrl->setText($alert['url']);
+ $tUrl->setLanguage("en");
+ $tsUrl->addTranslation($tUrl);
+ $alert->setUrl($tsUrl);
+ $tsHeaderText= new transit_realtime\TranslatedString();
+ $tHeaderText = new transit_realtime\TranslatedString\Translation();
+ $tHeaderText->setText($alert['header']);
+ $tHeaderText->setLanguage("en");
+ $tsHeaderText->addTranslation($tHeaderText);
+ $alert->setHeaderText($tsHeaderText);
+ $tsDescriptionText= new transit_realtime\TranslatedString();
+ $tDescriptionText = new transit_realtime\TranslatedString\Translation();
+ $tDescriptionText->setText($alert['description']);
+ $tDescriptionText->setLanguage("en");
+ $tsDescriptionText->addTranslation($tDescriptionText);
+ $alert->setDescriptionText($tsDescriptionText);
+ $fe->setAlert($alert);
+$fm->addEntity($fe);
+}
+return $fm;
+}
+function getServiceAlertsAsArray($filter_class = "", $filter_id = "") {
+ $codec = new DrSlump\Protobuf\Codec\PhpArray();
+ return $codec->encode(getServiceAlerts($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 = "") {
+ $codec = new DrSlump\Protobuf\Codec\Json();
+ return $codec->encode(getServiceAlerts($filter_class, $filter_id));
+}
+function getServiceAlertsByClass() {
+ $return = Array();
+ $alerts = getServiceAlertsAsArray("","");
+ foreach ($alerts['entities'] as $entity) {
+ foreach ($entity['informed'] as $informed) {
+ foreach($informed as $key => $value){
+ if (strpos("_id",$key) > 0) {
+ $parts = explode($key);
+ $class = $parts[0];
+ $id = $value;
+ }
+ }
+ $return[$class][$id][] = $entity;
+ }
+ }
+}
+
+function getTripUpdates($filter_class = "", $filter_id = "") {
+ $fm = new transit_realtime\FeedMessage();
+$fh = new transit_realtime\FeedHeader();
+$fh->setGtfsRealtimeVersion(1);
+$fh->setTimestamp(time());
+$fm->setHeader($fh);
+foreach(getCurrentAlerts() as $alert) {
+ $informedEntities = getInformedAlerts($alert['id'],$_REQUEST['filter_class'],$_REQUEST['filter_id']);
+ $stops = Array();
+ $routestrips = Array();
+ if (sizeof($informedEntities) >0) {
+ 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']);
+ }
+ }
+foreach ($routestrips as $routetrip) {
+$fe = new transit_realtime\FeedEntity();
+ $fe->setId($alert['id'].$routetrip['id']);
+ $fe->setIsDeleted(false);
+ $tu = new transit_realtime\TripUpdate();
+ $td = new transit_realtime\TripDescriptor();
+ if ($routetrip['type'] == "route") {
+ $td->setRouteId($routetrip['id']);
+ } else if ($routetrip['type'] == "trip") {
+ $td->setTripId($routetrip['id']);
+ }
+ $tu->setTrip($td);
+ foreach ($stops as $stop) {
+ $stu = new transit_realtime\TripUpdate\StopTimeUpdate();
+ $stu->setStopId($stop);
+ $stu->setScheduleRelationship(transit_realtime\TripUpdate\StopTimeUpdate\ScheduleRelationship::SKIPPED);
+ $tu->addStopTimeUpdate($stu);
+ }
+ $fe->setTripUpdate($tu);
+$fm->addEntity($fe);
+}
+
+}
+return $fm;
+
+}
+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 = "") {
+ $codec = new DrSlump\Protobuf\Codec\Binary();
+ return $codec->encode(getTripUpdates($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
@@ -6,10 +6,11 @@
"phperror",
"awsotp",
//"squallotp",
- "vanilleotp",
+ //"vanilleotp",
"database",
"other"
);
+$GTFSREnabled = true;
$cloudmadeAPIkey = "daa03470bb8740298d4b10e3f03d63e6";
$googleMapsAPIkey = "ABQIAAAA95XYXN0cki3Yj_Sb71CFvBTPaLd08ONybQDjcH_VdYtHHLgZvRTw2INzI_m17_IoOUqH3RNNmlTk1Q";
$otpAPIurl = 'http://localhost:8080/opentripplanner-api-webapp/';
@@ -26,6 +27,14 @@
$otpAPIurl = 'http://10.0.1.135:8080/opentripplanner-api-webapp/';
}
if (isDebug("phperror")) error_reporting(E_ALL ^ E_NOTICE);
+$labsPath = "";
+if (strstr($_SERVER['PHP_SELF'],"labs")) $labsPath = "../";
+
+function isDebugServer()
+{
+ return php_sapi_name() == "cli" || isset($_SERVER['SERVER_NAME']) && ( $_SERVER['SERVER_NAME'] == "azusa" || $_SERVER['SERVER_NAME'] == "vanille" || $_SERVER['SERVER_NAME'] ==
+"localhost" || $_SERVER['SERVER_NAME'] == "127.0.0.1") ;
+}
include_once ("common-geo.inc.php");
include_once ("common-net.inc.php");
@@ -34,21 +43,22 @@
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 isDebugServer()
-{
- return $_SERVER['SERVER_NAME'] == "10.0.1.154" || $_SERVER['SERVER_NAME'] == "localhost" || $_SERVER['SERVER_NAME'] == "127.0.0.1" || !$_SERVER['SERVER_NAME'];
-}
+
function isAnalyticsOn()
{
- return !isDebugServer();
+ $user_agent = $_SERVER['HTTP_USER_AGENT'];
+ return !isDebugServer() && !preg_match('/cloudkick/i', $user_agent) && !preg_match('/googlebot/i', $user_agent) &&
+!preg_match('/baidu/i', $user_agent);
}
function isDebug($debugReason = "other")
{
global $debugOkay;
return in_array($debugReason, $debugOkay, false) && isDebugServer();
}
+
function debug($msg, $debugReason = "other")
{
if (isDebug($debugReason)) echo "\n<!-- " . date(DATE_RFC822) . "\n $msg -->\n";
@@ -181,5 +191,6 @@
}
return implode( $glue, $retVal );
}
+
?>
--- a/include/db/route-dao.inc.php
+++ b/include/db/route-dao.inc.php
@@ -1,193 +1,222 @@
<?php
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->execute();
- if (!$query) {
- databaseError($conn->errorInfo());
- return Array();
- }
- return $query->fetch(PDO::FETCH_ASSOC);
-}
+
+{
+ global $conn;
+ $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());
+ return Array();
+ }
+ return $query -> fetch(PDO :: FETCH_ASSOC);
+ }
+
+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 -> execute();
+ if (!$query) {
+ databaseError($conn -> errorInfo());
+ return Array();
+ }
+ return $query -> fetch(PDO :: FETCH_ASSOC);
+ }
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();
-}
+
+{
+ 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 getRoutesByNumber($routeNumber = "")
-{
- global $conn;
- if ($routeNumber != "") {
- $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 route_short_name = :routeNumber order by route_short_name;";
- }
- else {
- $query = "SELECT DISTINCT route_short_name from routes order by route_short_name";
- }
- debug($query, "database");
- $query = $conn->prepare($query);
- if ($routeNumber != "") {
- $query->bindParam(":routeNumber", $routeNumber);
- }
- $query->execute();
- if (!$query) {
- databaseError($conn->errorInfo());
- return Array();
- }
- return $query->fetchAll();
-}
+
+{
+ global $conn;
+ if ($routeNumber != "") {
+ $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 route_short_name = :routeNumber OR route_short_name LIKE :routeNumber2 order by route_short_name;";
+ }
+ else {
+ $query = "SELECT DISTINCT route_short_name from routes order by route_short_name";
+ }
+ debug($query, "database");
+ $query = $conn -> prepare($query);
+ if ($routeNumber != "") {
+ $query -> bindParam(":routeNumber", $routeNumber);
+ $routeNumber2 = "% " . $routeNumber;
+ $query -> bindParam(":routeNumber2", $routeNumber2);
+ }
+ $query -> execute();
+ if (!$query) {
+ databaseError($conn -> errorInfo());
+ return Array();
+ }
+ return $query -> fetchAll();
+ }
function getRoutesByNumberSeries($routeNumberSeries = "")
-{
- global $conn;
- if (strlen($routeNumberSeries) == 1) {
- return getRoutesByNumber($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 =
+
+{
+ global $conn;
+ if (strlen($routeNumberSeries) == 1) {
+ return getRoutesByNumber($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());
- return Array();
- }
- return $query->fetchAll();
-}
+ 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());
+ return Array();
+ }
+ return $query -> fetchAll();
+ }
function getRouteNextTrip($routeID)
-{
- global $conn;
- $query = "select * from routes join trips on trips.route_id = routes.route_id
+
+{
+ 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
arrival_time > :currentTime and routes.route_id = :routeID order by
arrival_time limit 1";
- debug($query, "database");
- $query = $conn->prepare($query);
- $query->bindParam(":currentTime", current_time());
- $query->bindParam(":routeID", $routeID);
- $query->execute();
- if (!$query) {
- databaseError($conn->errorInfo());
- return Array();
- }
- $r = $query->fetch(PDO::FETCH_ASSOC);
-
- // past last trip of the day special case
- if (sizeof($r) < 16) {
- $query = "select * from routes join trips on trips.route_id = routes.route_id
+ debug($query, "database");
+ $query = $conn -> prepare($query);
+ $query -> bindParam(":currentTime", current_time());
+ $query -> bindParam(":routeID", $routeID);
+ $query -> execute();
+ if (!$query) {
+ databaseError($conn -> errorInfo());
+ return Array();
+ }
+ $r = $query -> fetch(PDO :: FETCH_ASSOC);
+
+ // past last trip of the day special case
+ if (sizeof($r) < 16) {
+ $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 order by
arrival_time DESC limit 1";
- debug($query, "database");
- $query = $conn->prepare($query);
- $query->bindParam(":routeID", $routeID);
- $query->execute();
- if (!$query) {
- databaseError($conn->errorInfo());
- return Array();
- }
-
- $r = $query->fetch(PDO::FETCH_ASSOC);
- }
- return $r;
-}
+ debug($query, "database");
+ $query = $conn -> prepare($query);
+ $query -> bindParam(":routeID", $routeID);
+ $query -> execute();
+ if (!$query) {
+ databaseError($conn -> errorInfo());
+ return Array();
+ }
+
+ $r = $query -> fetch(PDO :: FETCH_ASSOC);
+ }
+ return $r;
+ }
function getTimeInterpolatedRouteAtStop($routeID, $stop_id)
-{
- $nextTrip = getRouteNextTrip($routeID);
- if ($nextTrip['trip_id']) {
- foreach (getTimeInterpolatedTrip($nextTrip['trip_id']) as $tripStop) {
- if ($tripStop['stop_id'] == $stop_id) return $tripStop;
- }
- }
- return Array();
-}
+
+{
+ $nextTrip = getRouteNextTrip($routeID);
+ if ($nextTrip['trip_id']) {
+ foreach (getTimeInterpolatedTrip($nextTrip['trip_id']) as $tripStop) {
+ if ($tripStop['stop_id'] == $stop_id) return $tripStop;
+ }
+ }
+ return Array();
+ }
function getRouteTrips($routeID)
-{
- global $conn;
- $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
+
+{
+ global $conn;
+ $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 routes.route_id = :routeID and stop_sequence = '1' order by
arrival_time ";
- debug($query, "database");
- $query = $conn->prepare($query);
- $query->bindParam(":routeID", $routeID);
- $query->execute();
- if (!$query) {
- databaseError($conn->errorInfo());
- return Array();
- }
- return $query->fetchAll();
-}
+ debug($query, "database");
+ $query = $conn -> prepare($query);
+ $query -> bindParam(":routeID", $routeID);
+ $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();
- if ($destination != "") {
- $query = "SELECT DISTINCT trips.route_id,route_short_name,route_long_name, service_id
+
+{
+ global $conn;
+ if ($service_period == "") $service_period = service_period();
+ 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_period order by route_short_name";
- }
- else {
- $query = "SELECT DISTINCT route_long_name
+ }
+ else {
+ $query = "SELECT DISTINCT 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 service_id= :service_period order by route_long_name";
- }
- debug($query, "database");
- $query = $conn->prepare($query);
- $query->bindParam(":service_period", $service_period);
- if ($destination != "") $query->bindParam(":destination", $destination);
- $query->execute();
- if (!$query) {
- databaseError($conn->errorInfo());
- return Array();
- }
- return $query->fetchAll();
-}
+ }
+ debug($query, "database");
+ $query = $conn -> prepare($query);
+ $query -> bindParam(":service_period", $service_period);
+ 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();
- global $conn;
- $query = "SELECT DISTINCT service_id,trips.route_id,route_short_name,route_long_name
+
+{
+ if ($service_period == "") $service_period = service_period();
+ 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 zone_id LIKE ':suburb AND service_id=:service_period ORDER BY route_short_name";
- debug($query, "database");
- $query = $conn->prepare($query);
- $query->bindParam(":service_period", $service_period);
- $suburb = "%" . $suburb . ";%";
- $query->bindParam(":suburb", $suburb);
- $query->execute();
- if (!$query) {
- databaseError($conn->errorInfo());
- return Array();
- }
- return $query->fetchAll();
-}
+ debug($query, "database");
+ $query = $conn -> prepare($query);
+ $query -> bindParam(":service_period", $service_period);
+ $suburb = "%" . $suburb . ";%";
+ $query -> bindParam(":suburb", $suburb);
+ $query -> execute();
+ if (!$query) {
+ databaseError($conn -> errorInfo());
+ return Array();
+ }
+ return $query -> fetchAll();
+ }
function getRoutesNearby($lat, $lng, $limit = "", $distance = 500)
-{
- if ($service_period == "") $service_period = service_period();
- if ($limit != "") $limitSQL = " LIMIT :limit ";
- global $conn;
- $query = "SELECT service_id,trips.route_id,route_short_name,route_long_name,min(stops.stop_id) as stop_id,
+
+{
+ if ($service_period == "") $service_period = service_period();
+ if ($limit != "") $limitSQL = " LIMIT :limit ";
+ global $conn;
+ $query = "SELECT service_id,trips.route_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
@@ -197,16 +226,16 @@
AND ST_DWithin(position, ST_GeographyFromText('SRID=4326;POINT($lng $lat)'), :distance, FALSE)
group by service_id,trips.route_id,route_short_name,route_long_name
order by distance $limitSQL";
- debug($query, "database");
- $query = $conn->prepare($query);
- $query->bindParam(":service_period", $service_period);
- $query->bindParam(":distance", $distance);
- if ($limit != "") $query->bindParam(":limit", $limit);
- $query->execute();
- if (!$query) {
- databaseError($conn->errorInfo());
- return Array();
- }
- return $query->fetchAll();
-}
+ debug($query, "database");
+ $query = $conn -> prepare($query);
+ $query -> bindParam(":service_period", $service_period);
+ $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
@@ -1,15 +1,169 @@
<?php
-function getServiceOverride() {
- global $conn;
- $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
- $query->bindParam(":date", date("Ymd"));
- $query->execute();
- if (!$query) {
- databaseError($conn->errorInfo());
- return Array();
- }
- return $query->fetch(PDO::FETCH_ASSOC);
-}
+function getServiceOverride($date = "")
+{
+ global $conn;
+ $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
+ $query -> bindParam(":date", date("Ymd", ($date != "" ? $date : time())));
+ $query -> execute();
+ if (!$query) {
+ databaseError($conn -> errorInfo());
+ return Array();
+ }
+ return $query -> fetch(PDO :: FETCH_ASSOC);
+ }
+
+function getServiceAlert($alertID)
+{
+ global $conn;
+ $query = "SELECT id,extract('epoch', start) as start, extract('epoch', 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 -> execute();
+ if (!$query) {
+ databaseError($conn -> errorInfo());
+ return Array();
+ }
+ return $query -> fetch(PDO :: FETCH_ASSOC);
+ }
+
+
+function updateServiceAlert($alertID, $start, $end, $header, $description, $url)
+{
+ global $conn;
+ $query = 'update servicealerts_alerts set start=:start, "end"=:end, header=:header, description=:description, url=:url where id = :servicealert_id';
+ debug($query, "database");
+ $query = $conn -> prepare($query);
+ $query -> bindParam(":servicealert_id", $alertID);
+ $query -> bindParam(":start", $start);
+ $query -> bindParam(":end", $end);
+ $query -> bindParam(":header", $header);
+ $query -> bindParam(":description", $description);
+ $query -> bindParam(":url", $url);
+ $query -> execute();
+
+ print_r($conn -> errorInfo());
+ if (!$query) {
+ databaseError($conn -> errorInfo());
+ return Array();
+ }
+ return $query -> fetch(PDO :: FETCH_ASSOC);
+ }
+
+ function addServiceAlert($start, $end, $header, $description, $url)
+{
+ global $conn;
+ $query = 'INSERT INTO servicealerts_alerts (start, "end", header, description, url) VALUES (:start, :end, :header, :description, :url) ';
+ debug($query, "database");
+ $query = $conn -> prepare($query);
+ $query -> bindParam(":start", $start);
+ $query -> bindParam(":end", $end);
+ $query -> bindParam(":header", $header);
+ $query -> bindParam(":description", $description);
+ $query -> bindParam(":url", $url);
+ $query -> execute();
+
+ print_r($conn -> errorInfo());
+ if (!$query) {
+ databaseError($conn -> errorInfo());
+ return Array();
+ }
+ return $query -> fetch(PDO :: FETCH_ASSOC);
+ }
+
+function getCurrentAlerts()
+{
+ global $conn;
+ $query = "SELECT id,extract('epoch', start) as start, extract('epoch', 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) {
+ databaseError($conn -> errorInfo());
+ return Array();
+ }
+ return $query -> fetchAll();
+ }
+
+function getFutureAlerts()
+{
+ global $conn;
+ $query = "SELECT id,extract('epoch', start) as start, extract('epoch', end) as end,cause,effect,header,description,url from servicealerts_alerts where NOW() > start or NOW() < \"end\"";
+ // debug($query, "database");
+ $query = $conn -> prepare($query);
+ $query -> execute();
+ if (!$query) {
+ databaseError($conn -> errorInfo());
+ return Array();
+ }
+ return $query -> fetchAll();
+ }
+function getInformedAlerts($id, $filter_class, $filter_id)
+{
+
+ global $conn;
+ $query = "SELECT * from servicealerts_informed where servicealert_id = :servicealert_id";
+
+ if ($filter_class != "") {
+ $query .= " AND informed_class = :informed_class ";
+
+ }
+ if ($filter_id != "") {
+ $query .= " AND informed_id = :informed_id ";
+
+ }
+ // debug($query, "database");
+ $query = $conn -> prepare($query);
+ if ($filter_class != "") {
+ $query -> bindParam(":informed_class", $filter_class);
+ }
+ if ($filter_id != "") {
+ $query -> bindParam(":informed_id", $filter_id);
+ }
+ $query -> bindParam(":servicealert_id", $id);
+ $query -> execute();
+ if (!$query) {
+ databaseError($conn -> errorInfo());
+ return Array();
+ }
+ return $query -> fetchAll();
+ }
+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");
+ $query = $conn -> prepare($query);
+ $query -> bindParam(":servicealert_id", $serviceAlertID);
+ $query -> bindParam(":informed_class", $class);
+ $query -> bindParam(":informed_id", $id);
+ $query -> execute();
+ print_r($conn -> errorInfo());
+ if (!$query) {
+ databaseError($conn -> errorInfo());
+ return Array();
+ }
+ return null;
+ }
+function addInformedAlert($serviceAlertID, $class, $id, $action)
+{
+ global $conn;
+ $query = 'INSERT INTO servicealerts_informed (servicealert_id , informed_class , informed_id) VALUES(:servicealert_id ,:informed_class, :informed_id)';
+ debug($query, "database");
+ $query = $conn -> prepare($query);
+ $query -> bindParam(":servicealert_id", $serviceAlertID);
+ $query -> bindParam(":informed_class", $class);
+ $query -> bindParam(":informed_id", $id);
+ $query -> execute();
+
+ print_r($conn -> errorInfo());
+ if (!$query) {
+ databaseError($conn -> errorInfo());
+ return Array();
+ }
+ return null;
+
+ }
?>
--- a/include/db/stop-dao.inc.php
+++ b/include/db/stop-dao.inc.php
@@ -1,101 +1,154 @@
<?php
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->execute();
- if (!$query) {
- databaseError($conn->errorInfo());
- return Array();
- }
- return $query->fetch(PDO::FETCH_ASSOC);
-}
-function getStops($timingPointsOnly = false, $firstLetter = "")
-{
- global $conn;
- $conditions = Array();
- if ($timingPointsOnly) $conditions[] = "substr(stop_code,1,2) != 'Wj'";
- if ($firstLetter != "") $conditions[] = "substr(stop_name,1,1) = :firstLetter";
- $query = "Select * from stops";
- if (sizeof($conditions) > 0) {
- if (sizeof($conditions) > 1) {
- $query.= " Where " . implode(" AND ", $conditions) . " ";
- }
- else {
- $query.= " Where " . $conditions[0] . " ";
- }
- }
- $query.= " order by stop_name;";
- $query = $conn->prepare($query);
- $query->bindParam(":firstLetter", $firstLetter);
- $query->execute();
- if (!$query) {
- databaseError($conn->errorInfo());
- return Array();
- }
- return $query->fetchAll();
-}
+
+{
+ global $conn;
+ $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());
+ return Array();
+ }
+ return $query -> fetch(PDO :: FETCH_ASSOC);
+ }
+function getStops($timingPointsOnly = false, $firstLetter = "", $startsWith = "")
+
+{
+ global $conn;
+ $conditions = Array();
+ if ($timingPointsOnly) $conditions[] = "substr(stop_code,1,2) != 'Wj'";
+ 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) . " ";
+ }
+ else {
+ $query .= " Where " . $conditions[0] . " ";
+ }
+ }
+ $query .= " order by stop_name;";
+ $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
+
+{
+ 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);
- $query->execute();
- if (!$query) {
- databaseError($conn->errorInfo());
- return Array();
- }
- return $query->fetchAll();
-}
+ debug($query, "database");
+ $query = $conn -> prepare($query);
+ $query -> bindParam(":distance", $distance);
+ $query -> bindParam(":limit", $limit);
+ $query -> execute();
+ if (!$query) {
+ databaseError($conn -> errorInfo());
+ return Array();
+ }
+ return $query -> fetchAll();
+ }
+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 -> execute();
+ if (!$query) {
+ databaseError($conn -> errorInfo());
+ return Array();
+ }
+ return $query -> fetchAll();
+ }
function getStopsBySuburb($suburb)
-{
- global $conn;
- $query = "Select * from stops where zone_id LIKE :suburb order by stop_name;";
- debug($query, "database");
- $query = $conn->prepare($query);
- $suburb = "%" . $suburb . ";%";
- $query->bindParam(":suburb", $suburb);
- $query->execute();
- if (!$query) {
- databaseError($conn->errorInfo());
- return Array();
- }
- return $query->fetchAll();
-}
+
+{
+ global $conn;
+ $query = "Select * from stops where zone_id LIKE :suburb order by stop_name;";
+ debug($query, "database");
+ $query = $conn -> prepare($query);
+ $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) {
+ databaseError($conn -> errorInfo());
+ return Array();
+ }
+ return $query -> fetchAll();
+ }
function getStopRoutes($stopID, $service_period)
-{
- if ($service_period == "") $service_period = service_period();
- global $conn;
- $query = "SELECT service_id,trips.route_id,route_short_name,route_long_name
+
+{
+ if ($service_period == "") $service_period = service_period();
+ 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 WHERE stop_id = :stopID AND service_id=:service_period";
- debug($query, "database");
- $query = $conn->prepare($query);
- $query->bindParam(":service_period", $service_period);
- $query->bindParam(":stopID", $stopID);
- $query->execute();
- if (!$query) {
- databaseError($conn->errorInfo());
- return Array();
- }
- return $query->fetchAll();
-}
-function getStopTrips($stopID, $service_period = "", $afterTime = "")
-{
- if ($service_period == "") $service_period = service_period();
- 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,route_short_name,route_long_name, end_times.arrival_time as end_time
+ debug($query, "database");
+ $query = $conn -> prepare($query);
+ $query -> bindParam(":service_period", $service_period);
+ $query -> bindParam(":stopID", $stopID);
+ $query -> execute();
+ if (!$query) {
+ databaseError($conn -> errorInfo());
+ return Array();
+ }
+ return $query -> fetchAll();
+ }
+function getStopTrips($stopID, $service_period = "", $afterTime = "", $limit = "")
+
+{
+ if ($service_period == "") $service_period = service_period();
+ 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,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
@@ -105,55 +158,57 @@
AND stop_times.trip_id = end_times.trip_id
AND service_id=:service_period
AND end_times.arrival_time > :afterTime
-ORDER BY end_time";
- }
- 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
+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
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_period
-ORDER BY arrival_time";
- }
- debug($query, "database");
- $query = $conn->prepare($query);
- $query->bindParam(":service_period", $service_period);
- $query->bindParam(":stopID", $stopID);
- if ($afterTime != "") $query->bindParam(":afterTime", $afterTime);
- $query->execute();
- if (!$query) {
- databaseError($conn->errorInfo());
- return Array();
- }
- return $query->fetchAll();
-}
+ORDER BY arrival_time $limitSQL";
+ }
+ debug($query, "database");
+ $query = $conn -> prepare($query);
+ $query -> bindParam(":service_period", $service_period);
+ $query -> bindParam(":stopID", $stopID);
+ if ($limit != "") $query -> bindParam(":limit", $limit);
+ if ($afterTime != "") $query -> bindParam(":afterTime", $afterTime);
+ $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 == "") $time_range = (24 * 60 * 60);
- if ($time == "") $time = current_time();
- 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 (strtotime($trip['arrival_time']) > strtotime($time) and strtotime($trip['arrival_time']) < (strtotime($time) + $time_range)) {
- $timedTrips[] = $trip;
- }
- }
- else {
- $timedTrip = getTimeInterpolatedTripAtStop($trip['trip_id'], $trip['stop_sequence']);
- if ($timedTrip['arrival_time'] > $time and strtotime($timedTrip['arrival_time']) < (strtotime($time) + $time_range)) {
- $timedTrips[] = $timedTrip;
- }
- }
- if (sizeof($timedTrips) > $limit) break;
- }
- sktimesort($timedTrips, "arrival_time", true);
- }
- return $timedTrips;
-}
+
+{
+ if ($service_period == "") $service_period = service_period();
+ if ($time_range == "") $time_range = (24 * 60 * 60);
+ if ($time == "") $time = current_time();
+ 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 (strtotime($trip['arrival_time']) > strtotime($time) and strtotime($trip['arrival_time']) < (strtotime($time) + $time_range)) {
+ $timedTrips[] = $trip;
+ }
+ }
+ else {
+ $timedTrip = getTimeInterpolatedTripAtStop($trip['trip_id'], $trip['stop_sequence']);
+ if ($timedTrip['arrival_time'] > $time and strtotime($timedTrip['arrival_time']) < (strtotime($time) + $time_range)) {
+ $timedTrips[] = $timedTrip;
+ }
+ }
+ if (sizeof($timedTrips) > $limit) break;
+ }
+ sktimesort($timedTrips, "arrival_time", true);
+ }
+ return $timedTrips;
+ }
?>