From: maxious Date: Thu, 17 Feb 2011 13:22:21 +0000 Subject: Fix css issues X-Git-Url: http://maxious.lambdacomplex.org/git/?p=bus.git&a=commitdiff&h=451eb7887e50abf13e16a138afa7cbe818851c89 --- Fix css issues Place time/period/location adjuster on many views Sanitize more user input --- --- /dev/null +++ b/betweenpoint.add.php @@ -1,1 +1,50 @@ +"); + $sql = "INSERT INTO stops (geohash,lat,lng) VALUES ('$geoPo', '$nodelat', '$nodelon')"; + $result = pg_query($conn, $sql); + if (!$result) { + echo("Error in SQL query: " . pg_last_error() . "
\n"); + } else { + echo "Inserted new point at $geoPo
"; + } + } + flush(); +?> --- /dev/null +++ b/betweenpoint.delete.php @@ -1,1 +1,33 @@ - +\n"); + } else { + echo "Deleted {$_REQUEST['oldgeopo']}
"; + $updatedroutes = 0; + $result_outdatedroutes = pg_query($conn, "Select * FROM between_stops where points LIKE '%" . $_REQUEST['oldgeopo'] . ";%'"); + while ($outdatedroute = pg_fetch_assoc($result_outdatedroutes)) { + $newpoints = str_replace($_REQUEST['oldgeopo'].';', '', $outdatedroute['points']); + $sql = "UPDATE between_stops set points='$newpoints' where fromlocation = '{$outdatedroute['fromlocation']}' AND tolocation = '{$outdatedroute['tolocation']}' "; + $result = pg_query($conn, $sql); + if (!$result) { + echo("Error in SQL query: " . pg_last_error() . "
\n"); + } + echo "updated ".$outdatedroute['fromlocation']."->".$outdatedroute['tolocation']."
"; + + $updatedroutes++; + } + echo "updated $updatedroutes routes
"; + } + } + flush(); +?> --- a/betweenpoint.move.php +++ b/betweenpoint.move.php @@ -66,21 +66,26 @@ $nodelat = (int)($lat * 10000000); $nodelon = (int)($lng * 10000000); echo($nodelat . "," . $nodelon . "=$geoPo
"); - $sql = "UPDATE stops SET geohash='$geoPo', lat='$nodelat', lng='$nodelon' WHERE geohash = '{$_REQUEST['oldgeopo']}'"; + $sql = "UPDATE stops SET geohash='$geoPo', lat='$nodelat', lng='$nodelon', name=null, suburb=null WHERE geohash = '{$_REQUEST['oldgeopo']}'"; $result = pg_query($conn, $sql); if (!$result) { echo("Error in SQL query: " . pg_last_error() . "
\n"); + } else if (pg_affected_rows($result) == 0) { + echo ("Error 0 points moved, please refresh page and try again"); } else { echo $_REQUEST['oldgeopo'] . " replaced with $geoPo
"; $updatedroutes = 0; $result_outdatedroutes = pg_query($conn, "Select * FROM between_stops where points LIKE '%" . $_REQUEST['oldgeopo'] . ";%'"); while ($outdatedroute = pg_fetch_assoc($result_outdatedroutes)) { $newpoints = str_replace($_REQUEST['oldgeopo'], $geoPo, $outdatedroute['points']); - $sql = "UPDATE between_stops set points='$newpoints' where fromlocation = '{$outdatedroute['fromlocation']}' AND tolocation = '{$outdatedroute['tolocation']}' "; + $sql = "UPDATE between_stops set points='$newpoints' where + fromlocation = '".pg_escape_string($outdatedroute['fromlocation']). + "' AND tolocation = '".pg_escape_string($outdatedroute['tolocation'])."' "; $result = pg_query($conn, $sql); if (!$result) { echo("Error in SQL query: " . pg_last_error() . "
\n"); } + echo "updated ".$outdatedroute['fromlocation']."->".$outdatedroute['tolocation']."
"; $updatedroutes++; } echo "updated $updatedroutes routes
"; --- a/betweenpoint.php +++ b/betweenpoint.php @@ -10,7 +10,7 @@ // create the ol map object var map = new OpenLayers.Map('map'); - var osmtiles = new OpenLayers.Layer.OSM("local", "http://10.0.1.154/tiles/${z}/${x}/${y}.png") + var osmtiles = new OpenLayers.Layer.OSM("local", "/tiles/${z}/${x}/${y}.png") // use http://open.atlas.free.fr/GMapsTransparenciesImgOver.php and http://code.google.com/p/googletilecutter/ to make tiles markers = new OpenLayers.Layer.Markers("Between Stop Markers"); @@ -76,7 +76,7 @@ '; } ?> -var timeicon = new OpenLayers.Icon("http://maps.google.com/mapfiles/kml/pushpin/grn-pushpin.png",new OpenLayers.Size(32,32)); +var timeicon = new OpenLayers.Icon("icong.png",new OpenLayers.Size(16,16)); var timepoints = new OpenLayers.Layer.GeoRSS("Timing Points", "displaytimepoints.georss.php", { icon: timeicon }); map.addLayers([osmtiles, markers,timepoints]); @@ -88,13 +88,28 @@ function submitBetween () { $.post("betweenpoint.submit.php", $("#inputform").serialize(), function(html){ $("#response").html(html); - //clearForms(); + clearForms(); return false; }); }; function submitMove () { $.post("betweenpoint.move.php", $("#moveform").serialize(), function(html){ $("#response").html(html); + clearForms(); + return false; + }); +}; +function submitDelete () { + $.post("betweenpoint.delete.php", $("#moveform").serialize(), function(html){ + $("#response").html(html); + clearForms(); + return false; + }); +}; +function submitAdd () { + $.post("betweenpoint.add.php", $("#moveform").serialize(), function(html){ + $("#response").html(html); + clearForms(); return false; }); }; @@ -188,10 +203,11 @@ } - + $processed = 0; foreach ($paths as $path => $routes) { if (!in_array($path, array_keys($completedPaths))) { - echo "\n"; + echo "\n"; + $processed++; } else { $completedRoutes = explode(";", $completedPaths[$path]); $incompleteRoutes = ""; @@ -203,13 +219,14 @@ } if ($incompleteRoutes != "") { - echo "\n"; + echo "\n"; + $processed++; } } } + echo "$processed"; ?> - from to
@@ -224,7 +241,8 @@ oldgeopo newlatlng - + +
--- a/betweenpoint.submit.php +++ b/betweenpoint.submit.php @@ -5,7 +5,7 @@ exit; } print_r($_REQUEST); -$reverse=$_REQUEST["reverse"]; +$reverse=(isset($_REQUEST["reverse"]) ? $_REQUEST["reverse"] : "off"); $from=pg_escape_string($_REQUEST["from"]); $to=pg_escape_string($_REQUEST["to"]); $routes=$_REQUEST["routes"] ; --- a/busui/about.php +++ b/busui/about.php @@ -2,7 +2,22 @@ include('common.inc.php'); ?>

+ Busness Time - An ACT bus timetable webapp +Based on the maxious-canberra-transit-feed +Uses jQuery Mobile, PHP, Ruby, Python, Google Transit Feed Specification tools, OpenTripPlanner, OpenLayers, OpenStreetMap, Cloudmade Geocoder and Tile Service + +Feedback encouraged; contact maxious@lambdacomplex.org + Some icons by Joseph Wain / glyphish.com + + +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, +express or implied concerning the topicality, correctness, completeness or quality of the information, which is provided +"as is". The Author expressly disclaims all warranties, including but not limited to warranties of fitness for a particular purpose and warranties of merchantability. +All offers are not binding and without obligation. The Author expressly reserves the right, in his discretion, to suspend, +change, modify, add or remove portions of the Site and to restrict or terminate the use and accessibility of the Site +without prior notice. --- a/busui/common.inc.php +++ b/busui/common.inc.php @@ -1,14 +1,33 @@ centroid)) { + $session['lat'] = $contents[0]->centroid->coordinates[0]; + $session['lon'] = $contents[0]->centroid->coordinates[1]; + } + else { + $session['lat'] = ""; + $session['lon'] = ""; + } + } +//print_r ($_SESSION); function isDebug() { - return $_SERVER['SERVER_NAME'] == "localhost" || $_SERVER['SERVER_NAME'] == "127.0.0.1" || !$_SERVER['SERVER_NAME']; + return $_SERVER['SERVER_NAME'] == "10.0.1.154" || $_SERVER['SERVER_NAME'] == "localhost" || $_SERVER['SERVER_NAME'] == "127.0.0.1" || !$_SERVER['SERVER_NAME']; } function debug($msg) { @@ -19,25 +38,40 @@ } function include_header($pageTitle, $opendiv = true, $geolocate = false) { - // this starts the session - session_start(); - - // if (isDebug()) // set php error level high echo ' - bus.lambdacomplex.org - '.$pageTitle.' + busness time - '.$pageTitle.' '; - if (isDebug()) echo ' - '; - else echo ' - '; + if (isDebug()) echo ' + + '; + else echo ' + + '; echo ' + + + + @@ -47,35 +81,12 @@ if ($geolocate) { echo ""; + } + echo '

'; } $service_periods = Array ('sunday','saturday','weekday'); @@ -128,7 +147,7 @@ { // from http://www.perturb.org/display/Perlfunc__Seconds_Since_Midnight.html if (isset($_SESSION['time'])) { - $time = mkdate($_SESSION['time']); + $time = strtotime($_SESSION['time']); return (date("G",$time) * 3600) + (date("i",$time) * 60) + date("s",$time); } return (date("G") * 3600) + (date("i") * 60) + date("s"); @@ -136,15 +155,22 @@ function midnight_seconds_to_time($seconds) { +if ($seconds > 0) { $midnight = mktime (0, 0, 0, date("n"), date("j"), date("Y")); return date("h:ia",$midnight+$seconds); +} else { +return ""; +} } function getPage($url) { + debug($url); $ch = curl_init($url); curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 ); curl_setopt( $ch, CURLOPT_HEADER, 0 ); + curl_setopt($ch,CURLOPT_TIMEOUT,30); $page = curl_exec($ch); + if(curl_errno($ch)) echo " Database temporarily unavailable: ".curl_errno($ch)." ".curl_error($ch).""; curl_close($ch); return $page; } @@ -202,8 +228,11 @@ } $center = $totalLat/sizeof($mapPoints).",".$totalLon/sizeof($mapPoints); } - - return ''; + $output = ""; + $output .= '

Open Map...

'; + $output .= '
'; + $output .= '
'; + return $output; } function distance($lat1, $lng1, $lat2, $lng2) @@ -309,7 +338,8 @@ } function geocode($query, $giveOptions) { - $url = "http://geocoding.cloudmade.com/daa03470bb8740298d4b10e3f03d63e6/geocoding/v2/find.js?query=".$query."&bbox=-35.5,149.00,-35.15,149.1930&return_location=true&bbox_only=true"; + global $cloudmadeAPIkey; + $url = "http://geocoding.cloudmade.com/$cloudmadeAPIkey/geocoding/v2/find.js?query=".$query."&bbox=-35.5,149.00,-35.15,149.1930&return_location=true&bbox_only=true"; $contents = json_decode(getPage($url)); if ($giveOptions) return $contents->features; elseif (isset($contents->features[0]->centroid)) return $contents->features[0]->centroid->coordinates[0].",".$contents->features[0]->centroid->coordinates[1]; @@ -317,7 +347,8 @@ } function reverseGeocode($lat,$lng) { - $url = "http://geocoding.cloudmade.com/daa03470bb8740298d4b10e3f03d63e6/geocoding/v2/find.js?around=".$lat.",".$lng."&distance=closest&object_type=road"; + global $cloudmadeAPIkey; + $url = "http://geocoding.cloudmade.com/$cloudmadeAPIkey/geocoding/v2/find.js?around=".$lat.",".$lng."&distance=closest&object_type=road"; $contents = json_decode(getPage($url)); return $contents->features[0]->properties->name; } @@ -331,6 +362,79 @@ if($case){return (strcmp(substr($haystack, strlen($haystack) - strlen($needle)),$needle)===0);} return (strcasecmp(substr($haystack, strlen($haystack) - strlen($needle)),$needle)===0); } +function bracketsMeanNewLine($input) { + return str_replace(")","",str_replace("(","
",$input)); +} + +function viaPoints($tripid,$stopid, $timingPointsOnly = false) { + global $APIurl; + $url = $APIurl."/json/tripstoptimes?trip=".$tripid; + +$json = json_decode(getPage($url)); +debug(print_r($json,true)); +$stops = $json[0]; +$times = $json[1]; +$foundStop = false; +$viaPoints = Array(); +foreach ($stops as $key => $row) +{ + if ($foundStop) { + if (!$timingPointsOnly || !startsWith($row[5],"Wj") ) { + $viaPoints[] = Array("id" => $row[0], "name" => $row[1], "time" => $times[$key]); + } + } else { + if ($row[0] == $stopid) $foundStop = true; + } +} + return $viaPoints; +} + +function viaPointNames($tripid,$stopid) { + $points = viaPoints($tripid,$stopid,true); + $pointNames = Array(); + foreach ($points as $point) { + $pointNames[] = $point['name']; + } + return implode(", ",$pointNames); +} + +function timePlaceSettings($geolocate = false) { + global $service_periods; + $geoerror = false; + if ($geolocate == true) { + $geoerror = !isset($_SESSION['lat']) || !isset($_SESSION['lat']) + || $_SESSION['lat'] == "" || $_SESSION['lon'] == ""; + } + if ($geoerror) { + echo '
Sorry, but your location could not currently be detected. + Please allow location permission, wait for your location to be detected, + or enter an address/co-ordinates in the box below.
'; + } + echo '
+

Change Time/Place...

+
+
+
+ + +
+
+ + Current Time? +
+
+ + + +
+ + + +
'; +} ?> - - --- /dev/null +++ b/busui/css/jquery-mobile-1.0a3.css @@ -1,1 +1,16 @@ - +/*! + * jQuery Mobile v1.0a3 + * http://jquerymobile.com/ + * + * Copyright 2010, jQuery Project + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + */ +/*! + * jQuery Mobile v1.0a3 + * http://jquerymobile.com/ + * + * Copyright 2010, jQuery Project + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + */.ui-bar-a{border:1px solid #2a2a2a;background:#111;color:#fff;font-weight:bold;text-shadow:0 -1px 1px #000;background-image:-moz-linear-gradient(top,#3c3c3c,#111);background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0,#3c3c3c),color-stop(1,#111));-msfilter:"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:#222;color:#fff;text-shadow:0 1px 0 #000;font-weight:normal;background-image:-moz-linear-gradient(top,#666,#222);background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0,#666),color-stop(1,#222));-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:1px solid rgba(130,130,130,.3)}.ui-btn-up-a{border:1px solid #222;background:#333;font-weight:bold;color:#fff;cursor:pointer;text-shadow:0 -1px 1px #000;text-decoration:none;background-image:-moz-linear-gradient(top,#555,#333);background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0,#555),color-stop(1,#333));-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:#444;font-weight:bold;color:#fff;text-shadow:0 -1px 1px #000;text-decoration:none;background-image:-moz-linear-gradient(top,#666,#444);background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0,#666),color-stop(1,#444));-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,#333,#5a5a5a);background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0,#333),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}.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:#ccc;color:#333;text-shadow:0 1px 0 #fff;font-weight:normal;background-image:-moz-linear-gradient(top,#e6e6e6,#ccc);background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0,#e6e6e6),color-stop(1,#ccc));-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:#333}.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;cursor:pointer;text-shadow:0 -1px 1px #145072;text-decoration:none;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);text-decoration:none;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}.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:#333;text-shadow:0 1px 0 #fff;background:#f0f0f0;background-image:-moz-linear-gradient(top,#eee,#ddd);background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0,#eee),color-stop(1,#ddd));-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:#333}.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;cursor:pointer;text-shadow:0 1px 1px #f6f6f6;text-decoration:none;background-image:-moz-linear-gradient(top,#fefefe,#eee);background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0,#fdfdfd),color-stop(1,#eee));-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-decoration:none;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:#111;text-shadow:0 1px 1px #fff;background-image:-moz-linear-gradient(top,#eee,#fdfdfd);background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0,#eee),color-stop(1,#fdfdfd));-msfilter:"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}.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:#333;text-shadow:0 1px 0 #fff;background:#fff}.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:#333}.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-decoration:none;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:#eee;font-weight:bold;color:#222;cursor:pointer;text-shadow:0 1px 1px #fff;text-decoration:none;background-image:-moz-linear-gradient(top,#fdfdfd,#eee);background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0,#fdfdfd),color-stop(1,#eee));-msfilter:"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 #aaa;background:#fff;font-weight:bold;color:#111;text-shadow:0 1px 1px #fff;background-image:-moz-linear-gradient(top,#eee,#fff);background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0,#eee),color-stop(1,#fff));-msfilter:"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,#ccc,#eee);background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0,#ccc),color-stop(1,#eee));-msfilter:"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}.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));-msfilter:"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:#333;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));-msfilter:"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:#333}.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;cursor:pointer;text-shadow:0 1px 1px #fe3;text-decoration:none;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-decoration:none;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));-msfilter:"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 #fff;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}a.ui-link-inherit{text-decoration:none!important}.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));-msfilter:"progid:DXImageTransform.Microsoft.gradient(startColorStr='#85bae4', EndColorStr='#5393c5')";outline:0}.ui-btn-active a.ui-link-inherit{color:#fff}.ui-btn-inner{border-top:1px solid #fff;border-color:rgba(255,255,255,.3)}.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}.ui-disabled{opacity:.3}.ui-disabled,.ui-disabled a{cursor:default!important}.ui-icon{background-image:url(images/icons-18-white.png);background-repeat:no-repeat;background-color:#666;background-color:rgba(0,0,0,.4);-moz-border-radius:9px;-webkit-border-radius:9px;border-radius:9px}.ui-icon-disc{background-color:#666;background-color:rgba(0,0,0,.3);-moz-border-radius:9px;-webkit-border-radius:9px;border-radius:9px}.ui-icon-black{background-image:url(images/icons-18-black.png)}.ui-icon-black-disc{background-color:#fff;background-color:rgba(255,255,255,.3);-moz-border-radius:9px;-webkit-border-radius:9px;border-radius:9px}@media screen and (-webkit-min-device-pixel-ratio:2),screen and (max--moz-device-pixel-ratio:2){.ui-icon{background-image:url(images/icons-36-white.png);background-size:630px 18px}.ui-icon-black{background-image:url(images/icons-36-black.png)}}.ui-icon-plus{background-position:-0 0}.ui-icon-minus{background-position:-36px 0}.ui-icon-delete{background-position:-72px 0}.ui-icon-arrow-r{background-position:-108px 0}.ui-icon-arrow-l{background-position:-144px 0}.ui-icon-arrow-u{background-position:-180px 0}.ui-icon-arrow-d{background-position:-216px 0}.ui-icon-check{background-position:-252px 0}.ui-icon-gear{background-position:-288px 0}.ui-icon-refresh{background-position:-324px 0}.ui-icon-forward{background-position:-360px 0}.ui-icon-back{background-position:-396px 0}.ui-icon-grid{background-position:-432px 0}.ui-icon-star{background-position:-468px 0}.ui-icon-alert{background-position:-504px 0}.ui-icon-info{background-position:-540px 0}.ui-icon-home{background-position:-576px 0}.ui-icon-search{background-position:-612px 0}.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;background-size:20px 20px}.ui-icon-checkbox-off{background-image:url(images/form-check-off.png)}.ui-icon-checkbox-on{background-image:url(images/form-check-on.png)}.ui-icon-radio-off{background-image:url(images/form-radio-off.png)}.ui-icon-radio-on{background-image:url(images/form-radio-on.png)}.ui-icon-searchfield{background-image:url(images/icon-search-black.png);background-size:16px 16px}.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}.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}.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}.ui-overlay{background:#666;opacity:.5;filter:Alpha(Opacity=50);position:absolute;width:100%;height:100%}.ui-overlay-shadow{-moz-box-shadow:0 0 12px rgba(0,0,0,.6);-webkit-box-shadow:0 0 12px rgba(0,0,0,.6);box-shadow:0 0 12px rgba(0,0,0,.6)}.ui-shadow{-moz-box-shadow:0 1px 4px rgba(0,0,0,.3);-webkit-box-shadow:0 1px 4px rgba(0,0,0,.3);box-shadow:0 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:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.ui-shadow-inset{-moz-box-shadow:inset 0 1px 4px rgba(0,0,0,.2);-webkit-box-shadow:inset 0 1px 4px rgba(0,0,0,.2);box-shadow:inset 0 1px 4px rgba(0,0,0,.2)}.ui-icon-shadow{-moz-box-shadow:0 1px 0 rgba(255,255,255,.4);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.4);box-shadow:0 1px 0 rgba(255,255,255,.4)}.ui-focus{-moz-box-shadow:0 0 12px #387bbe;-webkit-box-shadow:0 0 12px #387bbe;box-shadow:0 0 12px #387bbe}.ui-mobile-nosupport-boxshadow *{-moz-box-shadow:none!important;-webkit-box-shadow:none!important;box-shadow:none!important}.ui-mobile-nosupport-boxshadow .ui-focus{outline-width:2px}.ui-mobile fieldset,.ui-page{padding:0;margin:0}.ui-mobile a img,.ui-mobile fieldset{border:0}.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)}[data-role=page],[data-role=dialog],.ui-page{top:0;left:0;width:100%;min-height:100%;position:absolute;display:none;border:0}.ui-page-active{display:block;overflow:visible}.portrait,.portrait .ui-page{min-height:480px}.landscape,.landscape .ui-page{min-height:320px}.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}.ui-mobile-rendering>*{visibility:hidden}.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-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}.ui-header .ui-btn-right{position:absolute;right:10px;top:.4em}.ui-content{border-width:0;overflow:visible;overflow-x:hidden;padding:15px}.ui-page-fullscreen .ui-content{padding:0}.ui-icon{width:18px;height:18px}.ui-fullscreen img{max-width:100%}.ui-nojs{position:absolute;left:-9999px}.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)}}.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}.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)}.flip.in{-webkit-transform:rotateY(0) scale(1);-webkit-animation-name:flipinfromleft}.flip.out{-webkit-transform:rotateY(-180deg) scale(.8);-webkit-animation-name:flipouttoleft}.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)}}@-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}}.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}.ui-grid-a .ui-block-a,.ui-grid-a .ui-block-b{width:50%}.ui-grid-a .ui-block-a{clear:left}.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}.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}.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}.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)}.ui-footer-duplicate,.ui-page-fullscreen .ui-fixed-inline{display:none}.ui-page-fullscreen .ui-header,.ui-page-fullscreen .ui-footer{opacity:.9}.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}.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}.ui-btn{display:block;text-align:center;cursor:pointer;position:relative;margin:.5em 5px;padding:0}.ui-btn:focus,.ui-btn:active{outline:0}.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}.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}.ui-btn-hidden{position:absolute;top:0;left:0;width:100%;height:100%;-webkit-appearance:button;opacity:0;cursor:pointer}.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 0 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}.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{margin:0 -5px 0 0;display:inline-block}.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}.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}.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}.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}.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}.ui-field-contain{background:0;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}.ui-select{display:block;position:relative}.ui-select select{position:absolute;left:-9999px;top:-9999px}.ui-select .ui-btn select{cursor:pointer;-webkit-appearance:button;left:0;top:0;width:100%;height:100%;opacity:.001}.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}label.ui-select{font-size:16px;line-height:1.4;font-weight:normal;margin:0 0 .3em;display:block}.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;width:85%}.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}.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}.ui-selectmenu .ui-header h1:after{content:'.';visibility:hidden}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:0;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}.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%}.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;zoom:1}.ui-li{display:block;margin:0;position:relative;overflow:hidden;text-align:left;border-width:0;border-top-width:1px}.ui-li .ui-btn-text{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.ui-li-divider,.ui-li-static{padding:.5em 15px;font-size:14px;font-weight:bold;counter-reset:listnumbering}ol.ui-listview .ui-link-inherit: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}.ui-listview-inset .ui-li{border-right-width:1px;border-left-width:1px}.ui-li:last-child{border-bottom-width:1px}.ui-li .ui-btn-inner{display:block;position:relative;padding:.7em 75px .7em 15px}.ui-li-has-thumb .ui-btn-inner{min-height:60px;padding-left:100px}.ui-li-has-icon .ui-btn-inner{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-has-alt .ui-btn-inner{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{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}@media only screen and (min-device-width:768px) and (max-device-width:1024px){.ui-li .ui-btn-text{overflow:visible}}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:10}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:0;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/busui/css/jquery.ui.datepicker.mobile.css @@ -1,1 +1,30 @@ +/* + * jQuery UI Datepicker @VERSION + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Datepicker#theming + */ +div.hasDatepicker{ display: block; padding: 0; overflow: visible; margin: 8px 0; } +.ui-datepicker { overflow: visible; margin: 0; max-width: 500px; } +.ui-datepicker .ui-datepicker-header { position:relative; padding:.4em 0; border-bottom: 0; font-weight: bold; } +.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { padding: 1px 0 1px 2px; position:absolute; top: .5em; margin-top: 0; text-indent: -9999px; } +.ui-datepicker .ui-datepicker-prev { left:6px; } +.ui-datepicker .ui-datepicker-next { right:6px; } +.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; } +.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; } +.ui-datepicker select.ui-datepicker-month-year {width: 100%;} +.ui-datepicker select.ui-datepicker-month, +.ui-datepicker select.ui-datepicker-year { width: 49%;} +.ui-datepicker table {width: 100%; border-collapse: collapse; margin:0; } +.ui-datepicker td { border-width: 1px; padding: 0; text-align: center; } +.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em 0; font-weight: bold; margin: 0; border-width: 0; text-align: center; text-decoration: none; } + +.ui-datepicker-calendar th { padding-top: .3em; padding-bottom: .3em; } +.ui-datepicker-calendar th span, .ui-datepicker-calendar span.ui-state-default { opacity: .3; } +.ui-datepicker-calendar td a { padding-top: .5em; padding-bottom: .5em; } + +.min-width-480px div.hasDatepicker { width: 63%; display: inline-block; margin: 0; } --- a/busui/index.php +++ b/busui/index.php @@ -1,62 +1,28 @@ -
-
-

logo
- bus.lambdacomplex.org

+
+
+
+

busness time


Canberra Bus Timetables and Trip Planner
-
Launch Trip Planner... -
-

Time/Place Settings

-
- - -
-
- - "/> -
-
- - - -
- - -
- -
+ +
--- a/busui/jquery-mobile-1.0a2.css +++ /dev/null @@ -1,890 +1,1 @@ - -/* -* 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 -*/ - - - -/* theme bar,body,btn containers -----------------------------------*/ -.ui-bar-a { border: 1px solid #2A2A2A; background: #111111; color: #fff; font-weight: bold; text-shadow: 0 -1px 1px #000; 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: 1px solid rgba(130,130,130,.3); } - -.ui-btn-up-a { border: 1px solid #222; background: #333333; font-weight: bold; color: #fff; cursor: pointer; text-shadow: 0 -1px 1px #000; text-decoration: none; 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; text-decoration: none; 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; } - - - - -.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; cursor: pointer; text-shadow: 0 -1px 1px #145072; text-decoration: none; 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); text-decoration: none; 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; } - - - - -.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, #fff, #f0f0f0); background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #fff),color-stop(1, #f0f0f0)); -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#ffffff', EndColorStr='#f0f0f0')"; } -.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; cursor: pointer; text-shadow: 0 1px 1px #f6f6f6; text-decoration: none; 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-up-c a.ui-link-inherit { color: #2F3E46; } - -.ui-btn-hover-c { border: 1px solid #aaa; background: #f5f5f5; font-weight: bold; color: #111111; text-decoration: none; text-shadow: 0 1px 1px #fff; background-image: -moz-linear-gradient(top, #ffffff, #f5f5f5); background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #ffffff),color-stop(1, #f5f5f5)); -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#ffffff', EndColorStr='#f5f5f5')"; } -.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; } - - -.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='#ddd', EndColorStr='#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-decoration: none; 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; text-decoration: none; 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; } - - -.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; cursor: pointer; text-shadow: 0 1px 1px #fe3; text-decoration: none; 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-decoration: none; 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; } - - -/* 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')"; } -.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); } - - -/* Container Corner radius */ -.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 { cursor: default !important; opacity: .3; } - -/* Icons -----------------------------------*/ -/* .ui-icon { background-position: 50% 50%; background-repeat: no-repeat; background-color: #fff; background-color: rgba(0,0,0,.4); -moz-border-radius: 9px; -webkit-border-radius: 9px; border-radius: 9px; } */ - -.ui-icon { background-image: url(images/icons-18-white.png); background-repeat: no-repeat; background-color: #666; background-color: rgba(0,0,0,.4); -moz-border-radius: 9px; -webkit-border-radius: 9px; border-radius: 9px; } -.ui-icon-disc { background-color: #666; background-color: rgba(0,0,0,.3); -moz-border-radius: 9px; -webkit-border-radius: 9px; border-radius: 9px; } - -/* alt color */ -.ui-icon-black { background-image: url(images/icons-18-black.png); } -.ui-icon-black-disc { background-color: #fff; background-color: rgba(255,255,255,.3); -moz-border-radius: 9px; -webkit-border-radius: 9px; border-radius: 9px; } - -/* retina */ -@media screen and (-webkit-min-device-pixel-ratio: 2), screen and (max--moz-device-pixel-ratio: 2) { - .ui-icon { background-image: url(images/icons-36-white.png); background-size: 558px 18px; } - .ui-icon-black { background-image: url(images/icons-36-black.png); } -} - -/*plus minus*/ -.ui-icon-plus { background-position: -0 0; } -.ui-icon-minus { background-position: -36px 0; } - -/* delete/close */ -.ui-icon-delete { background-position: -72px 0; } - -/*arrows*/ -.ui-icon-arrow-r { background-position: -108px 0; } -.ui-icon-arrow-l { background-position: -144px 0; } -.ui-icon-arrow-u { background-position: -180px 0; } -.ui-icon-arrow-d { background-position: -216px 0; } - -.ui-icon-check { background-position: -252px 0; } -.ui-icon-gear { background-position: -288px 0; } -.ui-icon-refresh { background-position: -324px 0; } -.ui-icon-forward { background-position: -360px 0; } -.ui-icon-back { background-position: -396px 0; } - -.ui-icon-grid { background-position: -432px 0; } -.ui-icon-star { background-position: -468px 0; } -.ui-icon-alert { background-position: -504px 0; } -.ui-icon-info { background-position: -540px 0; } - -/*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; background-size: 20px 20px; } - -.ui-icon-checkbox-off { background-image: url(images/form-check-off.png); } -.ui-icon-checkbox-on { background-image: url(images/form-check-on.png); } -.ui-icon-radio-off { background-image: url(images/form-radio-off.png);} -.ui-icon-radio-on { background-image: url(images/form-radio-on.png); } - -.ui-icon-search { 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; } - -/* btn Corner radius */ -.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 */ -.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; -} - -/* Overlays */ -.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); } - -/* set focus state last */ -.ui-focus { outline-width: 0; -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; } -.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 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); } - -/*orientations from js are available */ -.portrait { } -.landscape { } - -/* "page" containers - full-screen views, one should always be in view post-pageload */ -.ui-page { top: 0; left: 0; width: 100%; min-height: 100%; position: absolute; display: none; border: 0; } -.ui-page-active { display: block; overflow: visible; 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; top: 75px; left: 50%; width: 200px; margin-left: -130px; padding: 20px 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-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; } -.ui-header .ui-btn-right { position: absolute; right: 10px; top: .4em; } - -/*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; -} - -/* 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-transitioning { - -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; } - -/* 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: -99999px; top: -99999px; } -.ui-navbar li .ui-btn, .ui-navbar .ui-navbar-toggle .ui-btn { display: block; font-size: 12px; text-align: center; margin: 0; outline: none; 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 a:focus { 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: 1px 0px 1px 2px; 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; left: -9999px; } - - -/* -* 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:-99999px; } -.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 { margin: 0 -5px 0 0; display: inline-block; } -.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 .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; } -@media screen and (max-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; } -.ui-select select { position: absolute; left: -99999px; } -.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-selectmenu { position: absolute; padding: 0; z-index: 100 !important; width: 80%; max-width: 350px; padding: 6px; } -.ui-selectmenu .ui-listview { margin: 0; - } -.ui-selectmenu-hidden { top: -999999px; left: -99999px; } -.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-btn-active .ui-icon { display: block; } - - -.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; } - -/* -* 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: 2px; top: 50%; margin-top: -12px; } -.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%; } - -/* -* 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; zoom: 1; } -.ui-li { display: block; margin:0; position: relative; overflow: hidden; text-align: left; border-width: 0; border-top-width: 1px; } -.ui-li .ui-btn-text { text-overflow: ellipsis; overflow: hidden; white-space: nowrap; } -.ui-li-divider, .ui-li-static { padding: .5em 15px; font-size: 14px; font-weight: bold; counter-reset: listnumbering; } -ol.ui-listview .ui-link-inherit: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 { border-bottom-width: 1px; } -.ui-li .ui-btn-inner { display: block; position: relative; padding: .7em 75px .7em 15px; } -.ui-li-has-thumb .ui-btn-inner { min-height: 60px; padding-left: 100px; } -.ui-li-has-icon .ui-btn-inner { 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-has-alt .ui-btn-inner { 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 { 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; } - -/* 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: 10; } - -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 } - --- a/busui/jquery-mobile-1.0a2.js +++ /dev/null @@ -1,11138 +1,1 @@ - -/*! - * jQuery JavaScript Library v1.4.4 - * http://jquery.com/ - * - * Copyright 2010, John Resig - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * Includes Sizzle.js - * http://sizzlejs.com/ - * Copyright 2010, The Dojo Foundation - * Released under the MIT, BSD, and GPL Licenses. - * - * Date: Thu Nov 11 19:04:53 2010 -0500 - */ -(function( window, undefined ) { - -// Use the correct document accordingly with window argument (sandbox) -var document = window.document; -var jQuery = (function() { - -// Define a local copy of jQuery -var jQuery = function( selector, context ) { - // The jQuery object is actually just the init constructor 'enhanced' - return new jQuery.fn.init( selector, context ); - }, - - // Map over jQuery in case of overwrite - _jQuery = window.jQuery, - - // Map over the $ in case of overwrite - _$ = window.$, - - // A central reference to the root jQuery(document) - rootjQuery, - - // A simple way to check for HTML strings or ID strings - // (both of which we optimize for) - quickExpr = /^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]+)$)/, - - // Is it a simple selector - isSimple = /^.[^:#\[\.,]*$/, - - // Check if a string has a non-whitespace character in it - rnotwhite = /\S/, - rwhite = /\s/, - - // Used for trimming whitespace - trimLeft = /^\s+/, - trimRight = /\s+$/, - - // Check for non-word characters - rnonword = /\W/, - - // Check for digits - rdigit = /\d/, - - // Match a standalone tag - rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/, - - // JSON RegExp - rvalidchars = /^[\],:{}\s]*$/, - rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, - rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, - rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g, - - // Useragent RegExp - rwebkit = /(webkit)[ \/]([\w.]+)/, - ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/, - rmsie = /(msie) ([\w.]+)/, - rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/, - - // Keep a UserAgent string for use with jQuery.browser - userAgent = navigator.userAgent, - - // For matching the engine and version of the browser - browserMatch, - - // Has the ready events already been bound? - readyBound = false, - - // The functions to execute on DOM ready - readyList = [], - - // The ready event handler - DOMContentLoaded, - - // Save a reference to some core methods - toString = Object.prototype.toString, - hasOwn = Object.prototype.hasOwnProperty, - push = Array.prototype.push, - slice = Array.prototype.slice, - trim = String.prototype.trim, - indexOf = Array.prototype.indexOf, - - // [[Class]] -> type pairs - class2type = {}; - -jQuery.fn = jQuery.prototype = { - init: function( selector, context ) { - var match, elem, ret, doc; - - // Handle $(""), $(null), or $(undefined) - if ( !selector ) { - return this; - } - - // Handle $(DOMElement) - if ( selector.nodeType ) { - this.context = this[0] = selector; - this.length = 1; - return this; - } - - // The body element only exists once, optimize finding it - if ( selector === "body" && !context && document.body ) { - this.context = document; - this[0] = document.body; - this.selector = "body"; - this.length = 1; - return this; - } - - // Handle HTML strings - if ( typeof selector === "string" ) { - // Are we dealing with HTML string or an ID? - match = quickExpr.exec( selector ); - - // Verify a match, and that no context was specified for #id - if ( match && (match[1] || !context) ) { - - // HANDLE: $(html) -> $(array) - if ( match[1] ) { - doc = (context ? context.ownerDocument || context : document); - - // If a single string is passed in and it's a single tag - // just do a createElement and skip the rest - ret = rsingleTag.exec( selector ); - - if ( ret ) { - if ( jQuery.isPlainObject( context ) ) { - selector = [ document.createElement( ret[1] ) ]; - jQuery.fn.attr.call( selector, context, true ); - - } else { - selector = [ doc.createElement( ret[1] ) ]; - } - - } else { - ret = jQuery.buildFragment( [ match[1] ], [ doc ] ); - selector = (ret.cacheable ? ret.fragment.cloneNode(true) : ret.fragment).childNodes; - } - - return jQuery.merge( this, selector ); - - // HANDLE: $("#id") - } else { - elem = document.getElementById( match[2] ); - - // Check parentNode to catch when Blackberry 4.6 returns - // nodes that are no longer in the document #6963 - if ( elem && elem.parentNode ) { - // Handle the case where IE and Opera return items - // by name instead of ID - if ( elem.id !== match[2] ) { - return rootjQuery.find( selector ); - } - - // Otherwise, we inject the element directly into the jQuery object - this.length = 1; - this[0] = elem; - } - - this.context = document; - this.selector = selector; - return this; - } - - // HANDLE: $("TAG") - } else if ( !context && !rnonword.test( selector ) ) { - this.selector = selector; - this.context = document; - selector = document.getElementsByTagName( selector ); - return jQuery.merge( this, selector ); - - // HANDLE: $(expr, $(...)) - } else if ( !context || context.jquery ) { - return (context || rootjQuery).find( selector ); - - // HANDLE: $(expr, context) - // (which is just equivalent to: $(context).find(expr) - } else { - return jQuery( context ).find( selector ); - } - - // HANDLE: $(function) - // Shortcut for document ready - } else if ( jQuery.isFunction( selector ) ) { - return rootjQuery.ready( selector ); - } - - if (selector.selector !== undefined) { - this.selector = selector.selector; - this.context = selector.context; - } - - return jQuery.makeArray( selector, this ); - }, - - // Start with an empty selector - selector: "", - - // The current version of jQuery being used - jquery: "1.4.4", - - // The default length of a jQuery object is 0 - length: 0, - - // The number of elements contained in the matched element set - size: function() { - return this.length; - }, - - toArray: function() { - return slice.call( this, 0 ); - }, - - // Get the Nth element in the matched element set OR - // Get the whole matched element set as a clean array - get: function( num ) { - return num == null ? - - // Return a 'clean' array - this.toArray() : - - // Return just the object - ( num < 0 ? this.slice(num)[ 0 ] : this[ num ] ); - }, - - // Take an array of elements and push it onto the stack - // (returning the new matched element set) - pushStack: function( elems, name, selector ) { - // Build a new jQuery matched element set - var ret = jQuery(); - - if ( jQuery.isArray( elems ) ) { - push.apply( ret, elems ); - - } else { - jQuery.merge( ret, elems ); - } - - // Add the old object onto the stack (as a reference) - ret.prevObject = this; - - ret.context = this.context; - - if ( name === "find" ) { - ret.selector = this.selector + (this.selector ? " " : "") + selector; - } else if ( name ) { - ret.selector = this.selector + "." + name + "(" + selector + ")"; - } - - // Return the newly-formed element set - return ret; - }, - - // Execute a callback for every element in the matched set. - // (You can seed the arguments with an array of args, but this is - // only used internally.) - each: function( callback, args ) { - return jQuery.each( this, callback, args ); - }, - - ready: function( fn ) { - // Attach the listeners - jQuery.bindReady(); - - // If the DOM is already ready - if ( jQuery.isReady ) { - // Execute the function immediately - fn.call( document, jQuery ); - - // Otherwise, remember the function for later - } else if ( readyList ) { - // Add the function to the wait list - readyList.push( fn ); - } - - return this; - }, - - eq: function( i ) { - return i === -1 ? - this.slice( i ) : - this.slice( i, +i + 1 ); - }, - - first: function() { - return this.eq( 0 ); - }, - - last: function() { - return this.eq( -1 ); - }, - - slice: function() { - return this.pushStack( slice.apply( this, arguments ), - "slice", slice.call(arguments).join(",") ); - }, - - map: function( callback ) { - return this.pushStack( jQuery.map(this, function( elem, i ) { - return callback.call( elem, i, elem ); - })); - }, - - end: function() { - return this.prevObject || jQuery(null); - }, - - // For internal use only. - // Behaves like an Array's method, not like a jQuery method. - push: push, - sort: [].sort, - splice: [].splice -}; - -// Give the init function the jQuery prototype for later instantiation -jQuery.fn.init.prototype = jQuery.fn; - -jQuery.extend = jQuery.fn.extend = function() { - var options, name, src, copy, copyIsArray, clone, - target = arguments[0] || {}, - i = 1, - length = arguments.length, - deep = false; - - // Handle a deep copy situation - if ( typeof target === "boolean" ) { - deep = target; - target = arguments[1] || {}; - // skip the boolean and the target - i = 2; - } - - // Handle case when target is a string or something (possible in deep copy) - if ( typeof target !== "object" && !jQuery.isFunction(target) ) { - target = {}; - } - - // extend jQuery itself if only one argument is passed - if ( length === i ) { - target = this; - --i; - } - - for ( ; i < length; i++ ) { - // Only deal with non-null/undefined values - if ( (options = arguments[ i ]) != null ) { - // Extend the base object - for ( name in options ) { - src = target[ name ]; - copy = options[ name ]; - - // Prevent never-ending loop - if ( target === copy ) { - continue; - } - - // Recurse if we're merging plain objects or arrays - if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) { - if ( copyIsArray ) { - copyIsArray = false; - clone = src && jQuery.isArray(src) ? src : []; - - } else { - clone = src && jQuery.isPlainObject(src) ? src : {}; - } - - // Never move original objects, clone them - target[ name ] = jQuery.extend( deep, clone, copy ); - - // Don't bring in undefined values - } else if ( copy !== undefined ) { - target[ name ] = copy; - } - } - } - } - - // Return the modified object - return target; -}; - -jQuery.extend({ - noConflict: function( deep ) { - window.$ = _$; - - if ( deep ) { - window.jQuery = _jQuery; - } - - return jQuery; - }, - - // Is the DOM ready to be used? Set to true once it occurs. - isReady: false, - - // A counter to track how many items to wait for before - // the ready event fires. See #6781 - readyWait: 1, - - // Handle when the DOM is ready - ready: function( wait ) { - // A third-party is pushing the ready event forwards - if ( wait === true ) { - jQuery.readyWait--; - } - - // Make sure that the DOM is not already loaded - if ( !jQuery.readyWait || (wait !== true && !jQuery.isReady) ) { - // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). - if ( !document.body ) { - return setTimeout( jQuery.ready, 1 ); - } - - // Remember that the DOM is ready - jQuery.isReady = true; - - // If a normal DOM Ready event fired, decrement, and wait if need be - if ( wait !== true && --jQuery.readyWait > 0 ) { - return; - } - - // If there are functions bound, to execute - if ( readyList ) { - // Execute all of them - var fn, - i = 0, - ready = readyList; - - // Reset the list of functions - readyList = null; - - while ( (fn = ready[ i++ ]) ) { - fn.call( document, jQuery ); - } - - // Trigger any bound ready events - if ( jQuery.fn.trigger ) { - jQuery( document ).trigger( "ready" ).unbind( "ready" ); - } - } - } - }, - - bindReady: function() { - if ( readyBound ) { - return; - } - - readyBound = true; - - // Catch cases where $(document).ready() is called after the - // browser event has already occurred. - if ( document.readyState === "complete" ) { - // Handle it asynchronously to allow scripts the opportunity to delay ready - return setTimeout( jQuery.ready, 1 ); - } - - // Mozilla, Opera and webkit nightlies currently support this event - if ( document.addEventListener ) { - // Use the handy event callback - document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false ); - - // A fallback to window.onload, that will always work - window.addEventListener( "load", jQuery.ready, false ); - - // If IE event model is used - } else if ( document.attachEvent ) { - // ensure firing before onload, - // maybe late but safe also for iframes - document.attachEvent("onreadystatechange", DOMContentLoaded); - - // A fallback to window.onload, that will always work - window.attachEvent( "onload", jQuery.ready ); - - // If IE and not a frame - // continually check to see if the document is ready - var toplevel = false; - - try { - toplevel = window.frameElement == null; - } catch(e) {} - - if ( document.documentElement.doScroll && toplevel ) { - doScrollCheck(); - } - } - }, - - // See test/unit/core.js for details concerning isFunction. - // Since version 1.3, DOM methods and functions like alert - // aren't supported. They return false on IE (#2968). - isFunction: function( obj ) { - return jQuery.type(obj) === "function"; - }, - - isArray: Array.isArray || function( obj ) { - return jQuery.type(obj) === "array"; - }, - - // A crude way of determining if an object is a window - isWindow: function( obj ) { - return obj && typeof obj === "object" && "setInterval" in obj; - }, - - isNaN: function( obj ) { - return obj == null || !rdigit.test( obj ) || isNaN( obj ); - }, - - type: function( obj ) { - return obj == null ? - String( obj ) : - class2type[ toString.call(obj) ] || "object"; - }, - - isPlainObject: function( obj ) { - // Must be an Object. - // Because of IE, we also have to check the presence of the constructor property. - // Make sure that DOM nodes and window objects don't pass through, as well - if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { - return false; - } - - // Not own constructor property must be Object - if ( obj.constructor && - !hasOwn.call(obj, "constructor") && - !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) { - return false; - } - - // Own properties are enumerated firstly, so to speed up, - // if last one is own, then all properties are own. - - var key; - for ( key in obj ) {} - - return key === undefined || hasOwn.call( obj, key ); - }, - - isEmptyObject: function( obj ) { - for ( var name in obj ) { - return false; - } - return true; - }, - - error: function( msg ) { - throw msg; - }, - - parseJSON: function( data ) { - if ( typeof data !== "string" || !data ) { - return null; - } - - // Make sure leading/trailing whitespace is removed (IE can't handle it) - data = jQuery.trim( data ); - - // Make sure the incoming data is actual JSON - // Logic borrowed from http://json.org/json2.js - if ( rvalidchars.test(data.replace(rvalidescape, "@") - .replace(rvalidtokens, "]") - .replace(rvalidbraces, "")) ) { - - // Try to use the native JSON parser first - return window.JSON && window.JSON.parse ? - window.JSON.parse( data ) : - (new Function("return " + data))(); - - } else { - jQuery.error( "Invalid JSON: " + data ); - } - }, - - noop: function() {}, - - // Evalulates a script in a global context - globalEval: function( data ) { - if ( data && rnotwhite.test(data) ) { - // Inspired by code by Andrea Giammarchi - // http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html - var head = document.getElementsByTagName("head")[0] || document.documentElement, - script = document.createElement("script"); - - script.type = "text/javascript"; - - if ( jQuery.support.scriptEval ) { - script.appendChild( document.createTextNode( data ) ); - } else { - script.text = data; - } - - // Use insertBefore instead of appendChild to circumvent an IE6 bug. - // This arises when a base node is used (#2709). - head.insertBefore( script, head.firstChild ); - head.removeChild( script ); - } - }, - - nodeName: function( elem, name ) { - return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase(); - }, - - // args is for internal usage only - each: function( object, callback, args ) { - var name, i = 0, - length = object.length, - isObj = length === undefined || jQuery.isFunction(object); - - if ( args ) { - if ( isObj ) { - for ( name in object ) { - if ( callback.apply( object[ name ], args ) === false ) { - break; - } - } - } else { - for ( ; i < length; ) { - if ( callback.apply( object[ i++ ], args ) === false ) { - break; - } - } - } - - // A special, fast, case for the most common use of each - } else { - if ( isObj ) { - for ( name in object ) { - if ( callback.call( object[ name ], name, object[ name ] ) === false ) { - break; - } - } - } else { - for ( var value = object[0]; - i < length && callback.call( value, i, value ) !== false; value = object[++i] ) {} - } - } - - return object; - }, - - // Use native String.trim function wherever possible - trim: trim ? - function( text ) { - return text == null ? - "" : - trim.call( text ); - } : - - // Otherwise use our own trimming functionality - function( text ) { - return text == null ? - "" : - text.toString().replace( trimLeft, "" ).replace( trimRight, "" ); - }, - - // results is for internal usage only - makeArray: function( array, results ) { - var ret = results || []; - - if ( array != null ) { - // The window, strings (and functions) also have 'length' - // The extra typeof function check is to prevent crashes - // in Safari 2 (See: #3039) - // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930 - var type = jQuery.type(array); - - if ( array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( array ) ) { - push.call( ret, array ); - } else { - jQuery.merge( ret, array ); - } - } - - return ret; - }, - - inArray: function( elem, array ) { - if ( array.indexOf ) { - return array.indexOf( elem ); - } - - for ( var i = 0, length = array.length; i < length; i++ ) { - if ( array[ i ] === elem ) { - return i; - } - } - - return -1; - }, - - merge: function( first, second ) { - var i = first.length, - j = 0; - - if ( typeof second.length === "number" ) { - for ( var l = second.length; j < l; j++ ) { - first[ i++ ] = second[ j ]; - } - - } else { - while ( second[j] !== undefined ) { - first[ i++ ] = second[ j++ ]; - } - } - - first.length = i; - - return first; - }, - - grep: function( elems, callback, inv ) { - var ret = [], retVal; - inv = !!inv; - - // Go through the array, only saving the items - // that pass the validator function - for ( var i = 0, length = elems.length; i < length; i++ ) { - retVal = !!callback( elems[ i ], i ); - if ( inv !== retVal ) { - ret.push( elems[ i ] ); - } - } - - return ret; - }, - - // arg is for internal usage only - map: function( elems, callback, arg ) { - var ret = [], value; - - // Go through the array, translating each of the items to their - // new value (or values). - for ( var i = 0, length = elems.length; i < length; i++ ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret[ ret.length ] = value; - } - } - - return ret.concat.apply( [], ret ); - }, - - // A global GUID counter for objects - guid: 1, - - proxy: function( fn, proxy, thisObject ) { - if ( arguments.length === 2 ) { - if ( typeof proxy === "string" ) { - thisObject = fn; - fn = thisObject[ proxy ]; - proxy = undefined; - - } else if ( proxy && !jQuery.isFunction( proxy ) ) { - thisObject = proxy; - proxy = undefined; - } - } - - if ( !proxy && fn ) { - proxy = function() { - return fn.apply( thisObject || this, arguments ); - }; - } - - // Set the guid of unique handler to the same of original handler, so it can be removed - if ( fn ) { - proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++; - } - - // So proxy can be declared as an argument - return proxy; - }, - - // Mutifunctional method to get and set values to a collection - // The value/s can be optionally by executed if its a function - access: function( elems, key, value, exec, fn, pass ) { - var length = elems.length; - - // Setting many attributes - if ( typeof key === "object" ) { - for ( var k in key ) { - jQuery.access( elems, k, key[k], exec, fn, value ); - } - return elems; - } - - // Setting one attribute - if ( value !== undefined ) { - // Optionally, function values get executed if exec is true - exec = !pass && exec && jQuery.isFunction(value); - - for ( var i = 0; i < length; i++ ) { - fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass ); - } - - return elems; - } - - // Getting an attribute - return length ? fn( elems[0], key ) : undefined; - }, - - now: function() { - return (new Date()).getTime(); - }, - - // Use of jQuery.browser is frowned upon. - // More details: http://docs.jquery.com/Utilities/jQuery.browser - uaMatch: function( ua ) { - ua = ua.toLowerCase(); - - var match = rwebkit.exec( ua ) || - ropera.exec( ua ) || - rmsie.exec( ua ) || - ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) || - []; - - return { browser: match[1] || "", version: match[2] || "0" }; - }, - - browser: {} -}); - -// Populate the class2type map -jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) { - class2type[ "[object " + name + "]" ] = name.toLowerCase(); -}); - -browserMatch = jQuery.uaMatch( userAgent ); -if ( browserMatch.browser ) { - jQuery.browser[ browserMatch.browser ] = true; - jQuery.browser.version = browserMatch.version; -} - -// Deprecated, use jQuery.browser.webkit instead -if ( jQuery.browser.webkit ) { - jQuery.browser.safari = true; -} - -if ( indexOf ) { - jQuery.inArray = function( elem, array ) { - return indexOf.call( array, elem ); - }; -} - -// Verify that \s matches non-breaking spaces -// (IE fails on this test) -if ( !rwhite.test( "\xA0" ) ) { - trimLeft = /^[\s\xA0]+/; - trimRight = /[\s\xA0]+$/; -} - -// All jQuery objects should point back to these -rootjQuery = jQuery(document); - -// Cleanup functions for the document ready method -if ( document.addEventListener ) { - DOMContentLoaded = function() { - document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false ); - jQuery.ready(); - }; - -} else if ( document.attachEvent ) { - DOMContentLoaded = function() { - // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). - if ( document.readyState === "complete" ) { - document.detachEvent( "onreadystatechange", DOMContentLoaded ); - jQuery.ready(); - } - }; -} - -// The DOM ready check for Internet Explorer -function doScrollCheck() { - if ( jQuery.isReady ) { - return; - } - - try { - // If IE is used, use the trick by Diego Perini - // http://javascript.nwbox.com/IEContentLoaded/ - document.documentElement.doScroll("left"); - } catch(e) { - setTimeout( doScrollCheck, 1 ); - return; - } - - // and execute any waiting functions - jQuery.ready(); -} - -// Expose jQuery to the global object -return (window.jQuery = window.$ = jQuery); - -})(); - - -(function() { - - jQuery.support = {}; - - var root = document.documentElement, - script = document.createElement("script"), - div = document.createElement("div"), - id = "script" + jQuery.now(); - - div.style.display = "none"; - div.innerHTML = "
a"; - - var all = div.getElementsByTagName("*"), - a = div.getElementsByTagName("a")[0], - select = document.createElement("select"), - opt = select.appendChild( document.createElement("option") ); - - // Can't get basic test support - if ( !all || !all.length || !a ) { - return; - } - - jQuery.support = { - // IE strips leading whitespace when .innerHTML is used - leadingWhitespace: div.firstChild.nodeType === 3, - - // Make sure that tbody elements aren't automatically inserted - // IE will insert them into empty tables - tbody: !div.getElementsByTagName("tbody").length, - - // Make sure that link elements get serialized correctly by innerHTML - // This requires a wrapper element in IE - htmlSerialize: !!div.getElementsByTagName("link").length, - - // Get the style information from getAttribute - // (IE uses .cssText insted) - style: /red/.test( a.getAttribute("style") ), - - // Make sure that URLs aren't manipulated - // (IE normalizes it by default) - hrefNormalized: a.getAttribute("href") === "/a", - - // Make sure that element opacity exists - // (IE uses filter instead) - // Use a regex to work around a WebKit issue. See #5145 - opacity: /^0.55$/.test( a.style.opacity ), - - // Verify style float existence - // (IE uses styleFloat instead of cssFloat) - cssFloat: !!a.style.cssFloat, - - // Make sure that if no value is specified for a checkbox - // that it defaults to "on". - // (WebKit defaults to "" instead) - checkOn: div.getElementsByTagName("input")[0].value === "on", - - // Make sure that a selected-by-default option has a working selected property. - // (WebKit defaults to false instead of true, IE too, if it's in an optgroup) - optSelected: opt.selected, - - // Will be defined later - deleteExpando: true, - optDisabled: false, - checkClone: false, - scriptEval: false, - noCloneEvent: true, - boxModel: null, - inlineBlockNeedsLayout: false, - shrinkWrapBlocks: false, - reliableHiddenOffsets: true - }; - - // Make sure that the options inside disabled selects aren't marked as disabled - // (WebKit marks them as diabled) - select.disabled = true; - jQuery.support.optDisabled = !opt.disabled; - - script.type = "text/javascript"; - try { - script.appendChild( document.createTextNode( "window." + id + "=1;" ) ); - } catch(e) {} - - root.insertBefore( script, root.firstChild ); - - // Make sure that the execution of code works by injecting a script - // tag with appendChild/createTextNode - // (IE doesn't support this, fails, and uses .text instead) - if ( window[ id ] ) { - jQuery.support.scriptEval = true; - delete window[ id ]; - } - - // Test to see if it's possible to delete an expando from an element - // Fails in Internet Explorer - try { - delete script.test; - - } catch(e) { - jQuery.support.deleteExpando = false; - } - - root.removeChild( script ); - - if ( div.attachEvent && div.fireEvent ) { - div.attachEvent("onclick", function click() { - // Cloning a node shouldn't copy over any - // bound event handlers (IE does this) - jQuery.support.noCloneEvent = false; - div.detachEvent("onclick", click); - }); - div.cloneNode(true).fireEvent("onclick"); - } - - div = document.createElement("div"); - div.innerHTML = ""; - - var fragment = document.createDocumentFragment(); - fragment.appendChild( div.firstChild ); - - // WebKit doesn't clone checked state correctly in fragments - jQuery.support.checkClone = fragment.cloneNode(true).cloneNode(true).lastChild.checked; - - // Figure out if the W3C box model works as expected - // document.body must exist before we can do this - jQuery(function() { - var div = document.createElement("div"); - div.style.width = div.style.paddingLeft = "1px"; - - document.body.appendChild( div ); - jQuery.boxModel = jQuery.support.boxModel = div.offsetWidth === 2; - - if ( "zoom" in div.style ) { - // Check if natively block-level elements act like inline-block - // elements when setting their display to 'inline' and giving - // them layout - // (IE < 8 does this) - div.style.display = "inline"; - div.style.zoom = 1; - jQuery.support.inlineBlockNeedsLayout = div.offsetWidth === 2; - - // Check if elements with layout shrink-wrap their children - // (IE 6 does this) - div.style.display = ""; - div.innerHTML = "
"; - jQuery.support.shrinkWrapBlocks = div.offsetWidth !== 2; - } - - div.innerHTML = "
t
"; - var tds = div.getElementsByTagName("td"); - - // Check if table cells still have offsetWidth/Height when they are set - // to display:none and there are still other visible table cells in a - // table row; if so, offsetWidth/Height are not reliable for use when - // determining if an element has been hidden directly using - // display:none (it is still safe to use offsets if a parent element is - // hidden; don safety goggles and see bug #4512 for more information). - // (only IE 8 fails this test) - jQuery.support.reliableHiddenOffsets = tds[0].offsetHeight === 0; - - tds[0].style.display = ""; - tds[1].style.display = "none"; - - // Check if empty table cells still have offsetWidth/Height - // (IE < 8 fail this test) - jQuery.support.reliableHiddenOffsets = jQuery.support.reliableHiddenOffsets && tds[0].offsetHeight === 0; - div.innerHTML = ""; - - document.body.removeChild( div ).style.display = "none"; - div = tds = null; - }); - - // Technique from Juriy Zaytsev - // http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/ - var eventSupported = function( eventName ) { - var el = document.createElement("div"); - eventName = "on" + eventName; - - var isSupported = (eventName in el); - if ( !isSupported ) { - el.setAttribute(eventName, "return;"); - isSupported = typeof el[eventName] === "function"; - } - el = null; - - return isSupported; - }; - - jQuery.support.submitBubbles = eventSupported("submit"); - jQuery.support.changeBubbles = eventSupported("change"); - - // release memory in IE - root = script = div = all = a = null; -})(); - - - -var windowData = {}, - rbrace = /^(?:\{.*\}|\[.*\])$/; - -jQuery.extend({ - cache: {}, - - // Please use with caution - uuid: 0, - - // Unique for each copy of jQuery on the page - expando: "jQuery" + jQuery.now(), - - // The following elements throw uncatchable exceptions if you - // attempt to add expando properties to them. - noData: { - "embed": true, - // Ban all objects except for Flash (which handle expandos) - "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000", - "applet": true - }, - - data: function( elem, name, data ) { - if ( !jQuery.acceptData( elem ) ) { - return; - } - - elem = elem == window ? - windowData : - elem; - - var isNode = elem.nodeType, - id = isNode ? elem[ jQuery.expando ] : null, - cache = jQuery.cache, thisCache; - - if ( isNode && !id && typeof name === "string" && data === undefined ) { - return; - } - - // Get the data from the object directly - if ( !isNode ) { - cache = elem; - - // Compute a unique ID for the element - } else if ( !id ) { - elem[ jQuery.expando ] = id = ++jQuery.uuid; - } - - // Avoid generating a new cache unless none exists and we - // want to manipulate it. - if ( typeof name === "object" ) { - if ( isNode ) { - cache[ id ] = jQuery.extend(cache[ id ], name); - - } else { - jQuery.extend( cache, name ); - } - - } else if ( isNode && !cache[ id ] ) { - cache[ id ] = {}; - } - - thisCache = isNode ? cache[ id ] : cache; - - // Prevent overriding the named cache with undefined values - if ( data !== undefined ) { - thisCache[ name ] = data; - } - - return typeof name === "string" ? thisCache[ name ] : thisCache; - }, - - removeData: function( elem, name ) { - if ( !jQuery.acceptData( elem ) ) { - return; - } - - elem = elem == window ? - windowData : - elem; - - var isNode = elem.nodeType, - id = isNode ? elem[ jQuery.expando ] : elem, - cache = jQuery.cache, - thisCache = isNode ? cache[ id ] : id; - - // If we want to remove a specific section of the element's data - if ( name ) { - if ( thisCache ) { - // Remove the section of cache data - delete thisCache[ name ]; - - // If we've removed all the data, remove the element's cache - if ( isNode && jQuery.isEmptyObject(thisCache) ) { - jQuery.removeData( elem ); - } - } - - // Otherwise, we want to remove all of the element's data - } else { - if ( isNode && jQuery.support.deleteExpando ) { - delete elem[ jQuery.expando ]; - - } else if ( elem.removeAttribute ) { - elem.removeAttribute( jQuery.expando ); - - // Completely remove the data cache - } else if ( isNode ) { - delete cache[ id ]; - - // Remove all fields from the object - } else { - for ( var n in elem ) { - delete elem[ n ]; - } - } - } - }, - - // A method for determining if a DOM node can handle the data expando - acceptData: function( elem ) { - if ( elem.nodeName ) { - var match = jQuery.noData[ elem.nodeName.toLowerCase() ]; - - if ( match ) { - return !(match === true || elem.getAttribute("classid") !== match); - } - } - - return true; - } -}); - -jQuery.fn.extend({ - data: function( key, value ) { - var data = null; - - if ( typeof key === "undefined" ) { - if ( this.length ) { - var attr = this[0].attributes, name; - data = jQuery.data( this[0] ); - - for ( var i = 0, l = attr.length; i < l; i++ ) { - name = attr[i].name; - - if ( name.indexOf( "data-" ) === 0 ) { - name = name.substr( 5 ); - dataAttr( this[0], name, data[ name ] ); - } - } - } - - return data; - - } else if ( typeof key === "object" ) { - return this.each(function() { - jQuery.data( this, key ); - }); - } - - var parts = key.split("."); - parts[1] = parts[1] ? "." + parts[1] : ""; - - if ( value === undefined ) { - data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]); - - // Try to fetch any internally stored data first - if ( data === undefined && this.length ) { - data = jQuery.data( this[0], key ); - data = dataAttr( this[0], key, data ); - } - - return data === undefined && parts[1] ? - this.data( parts[0] ) : - data; - - } else { - return this.each(function() { - var $this = jQuery( this ), - args = [ parts[0], value ]; - - $this.triggerHandler( "setData" + parts[1] + "!", args ); - jQuery.data( this, key, value ); - $this.triggerHandler( "changeData" + parts[1] + "!", args ); - }); - } - }, - - removeData: function( key ) { - return this.each(function() { - jQuery.removeData( this, key ); - }); - } -}); - -function dataAttr( elem, key, data ) { - // If nothing was found internally, try to fetch any - // data from the HTML5 data-* attribute - if ( data === undefined && elem.nodeType === 1 ) { - data = elem.getAttribute( "data-" + key ); - - if ( typeof data === "string" ) { - try { - data = data === "true" ? true : - data === "false" ? false : - data === "null" ? null : - !jQuery.isNaN( data ) ? parseFloat( data ) : - rbrace.test( data ) ? jQuery.parseJSON( data ) : - data; - } catch( e ) {} - - // Make sure we set the data so it isn't changed later - jQuery.data( elem, key, data ); - - } else { - data = undefined; - } - } - - return data; -} - - - - -jQuery.extend({ - queue: function( elem, type, data ) { - if ( !elem ) { - return; - } - - type = (type || "fx") + "queue"; - var q = jQuery.data( elem, type ); - - // Speed up dequeue by getting out quickly if this is just a lookup - if ( !data ) { - return q || []; - } - - if ( !q || jQuery.isArray(data) ) { - q = jQuery.data( elem, type, jQuery.makeArray(data) ); - - } else { - q.push( data ); - } - - return q; - }, - - dequeue: function( elem, type ) { - type = type || "fx"; - - var queue = jQuery.queue( elem, type ), - fn = queue.shift(); - - // If the fx queue is dequeued, always remove the progress sentinel - if ( fn === "inprogress" ) { - fn = queue.shift(); - } - - if ( fn ) { - // Add a progress sentinel to prevent the fx queue from being - // automatically dequeued - if ( type === "fx" ) { - queue.unshift("inprogress"); - } - - fn.call(elem, function() { - jQuery.dequeue(elem, type); - }); - } - } -}); - -jQuery.fn.extend({ - queue: function( type, data ) { - if ( typeof type !== "string" ) { - data = type; - type = "fx"; - } - - if ( data === undefined ) { - return jQuery.queue( this[0], type ); - } - return this.each(function( i ) { - var queue = jQuery.queue( this, type, data ); - - if ( type === "fx" && queue[0] !== "inprogress" ) { - jQuery.dequeue( this, type ); - } - }); - }, - dequeue: function( type ) { - return this.each(function() { - jQuery.dequeue( this, type ); - }); - }, - - // Based off of the plugin by Clint Helfers, with permission. - // http://blindsignals.com/index.php/2009/07/jquery-delay/ - delay: function( time, type ) { - time = jQuery.fx ? jQuery.fx.speeds[time] || time : time; - type = type || "fx"; - - return this.queue( type, function() { - var elem = this; - setTimeout(function() { - jQuery.dequeue( elem, type ); - }, time ); - }); - }, - - clearQueue: function( type ) { - return this.queue( type || "fx", [] ); - } -}); - - - - -var rclass = /[\n\t]/g, - rspaces = /\s+/, - rreturn = /\r/g, - rspecialurl = /^(?:href|src|style)$/, - rtype = /^(?:button|input)$/i, - rfocusable = /^(?:button|input|object|select|textarea)$/i, - rclickable = /^a(?:rea)?$/i, - rradiocheck = /^(?:radio|checkbox)$/i; - -jQuery.props = { - "for": "htmlFor", - "class": "className", - readonly: "readOnly", - maxlength: "maxLength", - cellspacing: "cellSpacing", - rowspan: "rowSpan", - colspan: "colSpan", - tabindex: "tabIndex", - usemap: "useMap", - frameborder: "frameBorder" -}; - -jQuery.fn.extend({ - attr: function( name, value ) { - return jQuery.access( this, name, value, true, jQuery.attr ); - }, - - removeAttr: function( name, fn ) { - return this.each(function(){ - jQuery.attr( this, name, "" ); - if ( this.nodeType === 1 ) { - this.removeAttribute( name ); - } - }); - }, - - addClass: function( value ) { - if ( jQuery.isFunction(value) ) { - return this.each(function(i) { - var self = jQuery(this); - self.addClass( value.call(this, i, self.attr("class")) ); - }); - } - - if ( value && typeof value === "string" ) { - var classNames = (value || "").split( rspaces ); - - for ( var i = 0, l = this.length; i < l; i++ ) { - var elem = this[i]; - - if ( elem.nodeType === 1 ) { - if ( !elem.className ) { - elem.className = value; - - } else { - var className = " " + elem.className + " ", - setClass = elem.className; - - for ( var c = 0, cl = classNames.length; c < cl; c++ ) { - if ( className.indexOf( " " + classNames[c] + " " ) < 0 ) { - setClass += " " + classNames[c]; - } - } - elem.className = jQuery.trim( setClass ); - } - } - } - } - - return this; - }, - - removeClass: function( value ) { - if ( jQuery.isFunction(value) ) { - return this.each(function(i) { - var self = jQuery(this); - self.removeClass( value.call(this, i, self.attr("class")) ); - }); - } - - if ( (value && typeof value === "string") || value === undefined ) { - var classNames = (value || "").split( rspaces ); - - for ( var i = 0, l = this.length; i < l; i++ ) { - var elem = this[i]; - - if ( elem.nodeType === 1 && elem.className ) { - if ( value ) { - var className = (" " + elem.className + " ").replace(rclass, " "); - for ( var c = 0, cl = classNames.length; c < cl; c++ ) { - className = className.replace(" " + classNames[c] + " ", " "); - } - elem.className = jQuery.trim( className ); - - } else { - elem.className = ""; - } - } - } - } - - return this; - }, - - toggleClass: function( value, stateVal ) { - var type = typeof value, - isBool = typeof stateVal === "boolean"; - - if ( jQuery.isFunction( value ) ) { - return this.each(function(i) { - var self = jQuery(this); - self.toggleClass( value.call(this, i, self.attr("class"), stateVal), stateVal ); - }); - } - - return this.each(function() { - if ( type === "string" ) { - // toggle individual class names - var className, - i = 0, - self = jQuery( this ), - state = stateVal, - classNames = value.split( rspaces ); - - while ( (className = classNames[ i++ ]) ) { - // check each className given, space seperated list - state = isBool ? state : !self.hasClass( className ); - self[ state ? "addClass" : "removeClass" ]( className ); - } - - } else if ( type === "undefined" || type === "boolean" ) { - if ( this.className ) { - // store className if set - jQuery.data( this, "__className__", this.className ); - } - - // toggle whole className - this.className = this.className || value === false ? "" : jQuery.data( this, "__className__" ) || ""; - } - }); - }, - - hasClass: function( selector ) { - var className = " " + selector + " "; - for ( var i = 0, l = this.length; i < l; i++ ) { - if ( (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) { - return true; - } - } - - return false; - }, - - val: function( value ) { - if ( !arguments.length ) { - var elem = this[0]; - - if ( elem ) { - if ( jQuery.nodeName( elem, "option" ) ) { - // attributes.value is undefined in Blackberry 4.7 but - // uses .value. See #6932 - var val = elem.attributes.value; - return !val || val.specified ? elem.value : elem.text; - } - - // We need to handle select boxes special - if ( jQuery.nodeName( elem, "select" ) ) { - var index = elem.selectedIndex, - values = [], - options = elem.options, - one = elem.type === "select-one"; - - // Nothing was selected - if ( index < 0 ) { - return null; - } - - // Loop through all the selected options - for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) { - var option = options[ i ]; - - // Don't return options that are disabled or in a disabled optgroup - if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) && - (!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) { - - // Get the specific value for the option - value = jQuery(option).val(); - - // We don't need an array for one selects - if ( one ) { - return value; - } - - // Multi-Selects return an array - values.push( value ); - } - } - - return values; - } - - // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified - if ( rradiocheck.test( elem.type ) && !jQuery.support.checkOn ) { - return elem.getAttribute("value") === null ? "on" : elem.value; - } - - - // Everything else, we just grab the value - return (elem.value || "").replace(rreturn, ""); - - } - - return undefined; - } - - var isFunction = jQuery.isFunction(value); - - return this.each(function(i) { - var self = jQuery(this), val = value; - - if ( this.nodeType !== 1 ) { - return; - } - - if ( isFunction ) { - val = value.call(this, i, self.val()); - } - - // Treat null/undefined as ""; convert numbers to string - if ( val == null ) { - val = ""; - } else if ( typeof val === "number" ) { - val += ""; - } else if ( jQuery.isArray(val) ) { - val = jQuery.map(val, function (value) { - return value == null ? "" : value + ""; - }); - } - - if ( jQuery.isArray(val) && rradiocheck.test( this.type ) ) { - this.checked = jQuery.inArray( self.val(), val ) >= 0; - - } else if ( jQuery.nodeName( this, "select" ) ) { - var values = jQuery.makeArray(val); - - jQuery( "option", this ).each(function() { - this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0; - }); - - if ( !values.length ) { - this.selectedIndex = -1; - } - - } else { - this.value = val; - } - }); - } -}); - -jQuery.extend({ - attrFn: { - val: true, - css: true, - html: true, - text: true, - data: true, - width: true, - height: true, - offset: true - }, - - attr: function( elem, name, value, pass ) { - // don't set attributes on text and comment nodes - if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) { - return undefined; - } - - if ( pass && name in jQuery.attrFn ) { - return jQuery(elem)[name](value); - } - - var notxml = elem.nodeType !== 1 || !jQuery.isXMLDoc( elem ), - // Whether we are setting (or getting) - set = value !== undefined; - - // Try to normalize/fix the name - name = notxml && jQuery.props[ name ] || name; - - // These attributes require special treatment - var special = rspecialurl.test( name ); - - // Safari mis-reports the default selected property of an option - // Accessing the parent's selectedIndex property fixes it - if ( name === "selected" && !jQuery.support.optSelected ) { - var parent = elem.parentNode; - if ( parent ) { - parent.selectedIndex; - - // Make sure that it also works with optgroups, see #5701 - if ( parent.parentNode ) { - parent.parentNode.selectedIndex; - } - } - } - - // If applicable, access the attribute via the DOM 0 way - // 'in' checks fail in Blackberry 4.7 #6931 - if ( (name in elem || elem[ name ] !== undefined) && notxml && !special ) { - if ( set ) { - // We can't allow the type property to be changed (since it causes problems in IE) - if ( name === "type" && rtype.test( elem.nodeName ) && elem.parentNode ) { - jQuery.error( "type property can't be changed" ); - } - - if ( value === null ) { - if ( elem.nodeType === 1 ) { - elem.removeAttribute( name ); - } - - } else { - elem[ name ] = value; - } - } - - // browsers index elements by id/name on forms, give priority to attributes. - if ( jQuery.nodeName( elem, "form" ) && elem.getAttributeNode(name) ) { - return elem.getAttributeNode( name ).nodeValue; - } - - // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set - // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ - if ( name === "tabIndex" ) { - var attributeNode = elem.getAttributeNode( "tabIndex" ); - - return attributeNode && attributeNode.specified ? - attributeNode.value : - rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ? - 0 : - undefined; - } - - return elem[ name ]; - } - - if ( !jQuery.support.style && notxml && name === "style" ) { - if ( set ) { - elem.style.cssText = "" + value; - } - - return elem.style.cssText; - } - - if ( set ) { - // convert the value to a string (all browsers do this but IE) see #1070 - elem.setAttribute( name, "" + value ); - } - - // Ensure that missing attributes return undefined - // Blackberry 4.7 returns "" from getAttribute #6938 - if ( !elem.attributes[ name ] && (elem.hasAttribute && !elem.hasAttribute( name )) ) { - return undefined; - } - - var attr = !jQuery.support.hrefNormalized && notxml && special ? - // Some attributes require a special call on IE - elem.getAttribute( name, 2 ) : - elem.getAttribute( name ); - - // Non-existent attributes return null, we normalize to undefined - return attr === null ? undefined : attr; - } -}); - - - - -var rnamespaces = /\.(.*)$/, - rformElems = /^(?:textarea|input|select)$/i, - rperiod = /\./g, - rspace = / /g, - rescape = /[^\w\s.|`]/g, - fcleanup = function( nm ) { - return nm.replace(rescape, "\\$&"); - }, - focusCounts = { focusin: 0, focusout: 0 }; - -/* - * A number of helper functions used for managing events. - * Many of the ideas behind this code originated from - * Dean Edwards' addEvent library. - */ -jQuery.event = { - - // Bind an event to an element - // Original by Dean Edwards - add: function( elem, types, handler, data ) { - if ( elem.nodeType === 3 || elem.nodeType === 8 ) { - return; - } - - // For whatever reason, IE has trouble passing the window object - // around, causing it to be cloned in the process - if ( jQuery.isWindow( elem ) && ( elem !== window && !elem.frameElement ) ) { - elem = window; - } - - if ( handler === false ) { - handler = returnFalse; - } else if ( !handler ) { - // Fixes bug #7229. Fix recommended by jdalton - return; - } - - var handleObjIn, handleObj; - - if ( handler.handler ) { - handleObjIn = handler; - handler = handleObjIn.handler; - } - - // Make sure that the function being executed has a unique ID - if ( !handler.guid ) { - handler.guid = jQuery.guid++; - } - - // Init the element's event structure - var elemData = jQuery.data( elem ); - - // If no elemData is found then we must be trying to bind to one of the - // banned noData elements - if ( !elemData ) { - return; - } - - // Use a key less likely to result in collisions for plain JS objects. - // Fixes bug #7150. - var eventKey = elem.nodeType ? "events" : "__events__", - events = elemData[ eventKey ], - eventHandle = elemData.handle; - - if ( typeof events === "function" ) { - // On plain objects events is a fn that holds the the data - // which prevents this data from being JSON serialized - // the function does not need to be called, it just contains the data - eventHandle = events.handle; - events = events.events; - - } else if ( !events ) { - if ( !elem.nodeType ) { - // On plain objects, create a fn that acts as the holder - // of the values to avoid JSON serialization of event data - elemData[ eventKey ] = elemData = function(){}; - } - - elemData.events = events = {}; - } - - if ( !eventHandle ) { - elemData.handle = eventHandle = function() { - // Handle the second event of a trigger and when - // an event is called after a page has unloaded - return typeof jQuery !== "undefined" && !jQuery.event.triggered ? - jQuery.event.handle.apply( eventHandle.elem, arguments ) : - undefined; - }; - } - - // Add elem as a property of the handle function - // This is to prevent a memory leak with non-native events in IE. - eventHandle.elem = elem; - - // Handle multiple events separated by a space - // jQuery(...).bind("mouseover mouseout", fn); - types = types.split(" "); - - var type, i = 0, namespaces; - - while ( (type = types[ i++ ]) ) { - handleObj = handleObjIn ? - jQuery.extend({}, handleObjIn) : - { handler: handler, data: data }; - - // Namespaced event handlers - if ( type.indexOf(".") > -1 ) { - namespaces = type.split("."); - type = namespaces.shift(); - handleObj.namespace = namespaces.slice(0).sort().join("."); - - } else { - namespaces = []; - handleObj.namespace = ""; - } - - handleObj.type = type; - if ( !handleObj.guid ) { - handleObj.guid = handler.guid; - } - - // Get the current list of functions bound to this event - var handlers = events[ type ], - special = jQuery.event.special[ type ] || {}; - - // Init the event handler queue - if ( !handlers ) { - handlers = events[ type ] = []; - - // Check for a special event handler - // Only use addEventListener/attachEvent if the special - // events handler returns false - if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { - // Bind the global event handler to the element - if ( elem.addEventListener ) { - elem.addEventListener( type, eventHandle, false ); - - } else if ( elem.attachEvent ) { - elem.attachEvent( "on" + type, eventHandle ); - } - } - } - - if ( special.add ) { - special.add.call( elem, handleObj ); - - if ( !handleObj.handler.guid ) { - handleObj.handler.guid = handler.guid; - } - } - - // Add the function to the element's handler list - handlers.push( handleObj ); - - // Keep track of which events have been used, for global triggering - jQuery.event.global[ type ] = true; - } - - // Nullify elem to prevent memory leaks in IE - elem = null; - }, - - global: {}, - - // Detach an event or set of events from an element - remove: function( elem, types, handler, pos ) { - // don't do events on text and comment nodes - if ( elem.nodeType === 3 || elem.nodeType === 8 ) { - return; - } - - if ( handler === false ) { - handler = returnFalse; - } - - var ret, type, fn, j, i = 0, all, namespaces, namespace, special, eventType, handleObj, origType, - eventKey = elem.nodeType ? "events" : "__events__", - elemData = jQuery.data( elem ), - events = elemData && elemData[ eventKey ]; - - if ( !elemData || !events ) { - return; - } - - if ( typeof events === "function" ) { - elemData = events; - events = events.events; - } - - // types is actually an event object here - if ( types && types.type ) { - handler = types.handler; - types = types.type; - } - - // Unbind all events for the element - if ( !types || typeof types === "string" && types.charAt(0) === "." ) { - types = types || ""; - - for ( type in events ) { - jQuery.event.remove( elem, type + types ); - } - - return; - } - - // Handle multiple events separated by a space - // jQuery(...).unbind("mouseover mouseout", fn); - types = types.split(" "); - - while ( (type = types[ i++ ]) ) { - origType = type; - handleObj = null; - all = type.indexOf(".") < 0; - namespaces = []; - - if ( !all ) { - // Namespaced event handlers - namespaces = type.split("."); - type = namespaces.shift(); - - namespace = new RegExp("(^|\\.)" + - jQuery.map( namespaces.slice(0).sort(), fcleanup ).join("\\.(?:.*\\.)?") + "(\\.|$)"); - } - - eventType = events[ type ]; - - if ( !eventType ) { - continue; - } - - if ( !handler ) { - for ( j = 0; j < eventType.length; j++ ) { - handleObj = eventType[ j ]; - - if ( all || namespace.test( handleObj.namespace ) ) { - jQuery.event.remove( elem, origType, handleObj.handler, j ); - eventType.splice( j--, 1 ); - } - } - - continue; - } - - special = jQuery.event.special[ type ] || {}; - - for ( j = pos || 0; j < eventType.length; j++ ) { - handleObj = eventType[ j ]; - - if ( handler.guid === handleObj.guid ) { - // remove the given handler for the given type - if ( all || namespace.test( handleObj.namespace ) ) { - if ( pos == null ) { - eventType.splice( j--, 1 ); - } - - if ( special.remove ) { - special.remove.call( elem, handleObj ); - } - } - - if ( pos != null ) { - break; - } - } - } - - // remove generic event handler if no more handlers exist - if ( eventType.length === 0 || pos != null && eventType.length === 1 ) { - if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) { - jQuery.removeEvent( elem, type, elemData.handle ); - } - - ret = null; - delete events[ type ]; - } - } - - // Remove the expando if it's no longer used - if ( jQuery.isEmptyObject( events ) ) { - var handle = elemData.handle; - if ( handle ) { - handle.elem = null; - } - - delete elemData.events; - delete elemData.handle; - - if ( typeof elemData === "function" ) { - jQuery.removeData( elem, eventKey ); - - } else if ( jQuery.isEmptyObject( elemData ) ) { - jQuery.removeData( elem ); - } - } - }, - - // bubbling is internal - trigger: function( event, data, elem /*, bubbling */ ) { - // Event object or event type - var type = event.type || event, - bubbling = arguments[3]; - - if ( !bubbling ) { - event = typeof event === "object" ? - // jQuery.Event object - event[ jQuery.expando ] ? event : - // Object literal - jQuery.extend( jQuery.Event(type), event ) : - // Just the event type (string) - jQuery.Event(type); - - if ( type.indexOf("!") >= 0 ) { - event.type = type = type.slice(0, -1); - event.exclusive = true; - } - - // Handle a global trigger - if ( !elem ) { - // Don't bubble custom events when global (to avoid too much overhead) - event.stopPropagation(); - - // Only trigger if we've ever bound an event for it - if ( jQuery.event.global[ type ] ) { - jQuery.each( jQuery.cache, function() { - if ( this.events && this.events[type] ) { - jQuery.event.trigger( event, data, this.handle.elem ); - } - }); - } - } - - // Handle triggering a single element - - // don't do events on text and comment nodes - if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) { - return undefined; - } - - // Clean up in case it is reused - event.result = undefined; - event.target = elem; - - // Clone the incoming data, if any - data = jQuery.makeArray( data ); - data.unshift( event ); - } - - event.currentTarget = elem; - - // Trigger the event, it is assumed that "handle" is a function - var handle = elem.nodeType ? - jQuery.data( elem, "handle" ) : - (jQuery.data( elem, "__events__" ) || {}).handle; - - if ( handle ) { - handle.apply( elem, data ); - } - - var parent = elem.parentNode || elem.ownerDocument; - - // Trigger an inline bound script - try { - if ( !(elem && elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()]) ) { - if ( elem[ "on" + type ] && elem[ "on" + type ].apply( elem, data ) === false ) { - event.result = false; - event.preventDefault(); - } - } - - // prevent IE from throwing an error for some elements with some event types, see #3533 - } catch (inlineError) {} - - if ( !event.isPropagationStopped() && parent ) { - jQuery.event.trigger( event, data, parent, true ); - - } else if ( !event.isDefaultPrevented() ) { - var old, - target = event.target, - targetType = type.replace( rnamespaces, "" ), - isClick = jQuery.nodeName( target, "a" ) && targetType === "click", - special = jQuery.event.special[ targetType ] || {}; - - if ( (!special._default || special._default.call( elem, event ) === false) && - !isClick && !(target && target.nodeName && jQuery.noData[target.nodeName.toLowerCase()]) ) { - - try { - if ( target[ targetType ] ) { - // Make sure that we don't accidentally re-trigger the onFOO events - old = target[ "on" + targetType ]; - - if ( old ) { - target[ "on" + targetType ] = null; - } - - jQuery.event.triggered = true; - target[ targetType ](); - } - - // prevent IE from throwing an error for some elements with some event types, see #3533 - } catch (triggerError) {} - - if ( old ) { - target[ "on" + targetType ] = old; - } - - jQuery.event.triggered = false; - } - } - }, - - handle: function( event ) { - var all, handlers, namespaces, namespace_re, events, - namespace_sort = [], - args = jQuery.makeArray( arguments ); - - event = args[0] = jQuery.event.fix( event || window.event ); - event.currentTarget = this; - - // Namespaced event handlers - all = event.type.indexOf(".") < 0 && !event.exclusive; - - if ( !all ) { - namespaces = event.type.split("."); - event.type = namespaces.shift(); - namespace_sort = namespaces.slice(0).sort(); - namespace_re = new RegExp("(^|\\.)" + namespace_sort.join("\\.(?:.*\\.)?") + "(\\.|$)"); - } - - event.namespace = event.namespace || namespace_sort.join("."); - - events = jQuery.data(this, this.nodeType ? "events" : "__events__"); - - if ( typeof events === "function" ) { - events = events.events; - } - - handlers = (events || {})[ event.type ]; - - if ( events && handlers ) { - // Clone the handlers to prevent manipulation - handlers = handlers.slice(0); - - for ( var j = 0, l = handlers.length; j < l; j++ ) { - var handleObj = handlers[ j ]; - - // Filter the functions by class - if ( all || namespace_re.test( handleObj.namespace ) ) { - // Pass in a reference to the handler function itself - // So that we can later remove it - event.handler = handleObj.handler; - event.data = handleObj.data; - event.handleObj = handleObj; - - var ret = handleObj.handler.apply( this, args ); - - if ( ret !== undefined ) { - event.result = ret; - if ( ret === false ) { - event.preventDefault(); - event.stopPropagation(); - } - } - - if ( event.isImmediatePropagationStopped() ) { - break; - } - } - } - } - - return event.result; - }, - - props: "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "), - - fix: function( event ) { - if ( event[ jQuery.expando ] ) { - return event; - } - - // store a copy of the original event object - // and "clone" to set read-only properties - var originalEvent = event; - event = jQuery.Event( originalEvent ); - - for ( var i = this.props.length, prop; i; ) { - prop = this.props[ --i ]; - event[ prop ] = originalEvent[ prop ]; - } - - // Fix target property, if necessary - if ( !event.target ) { - // Fixes #1925 where srcElement might not be defined either - event.target = event.srcElement || document; - } - - // check if target is a textnode (safari) - if ( event.target.nodeType === 3 ) { - event.target = event.target.parentNode; - } - - // Add relatedTarget, if necessary - if ( !event.relatedTarget && event.fromElement ) { - event.relatedTarget = event.fromElement === event.target ? event.toElement : event.fromElement; - } - - // Calculate pageX/Y if missing and clientX/Y available - if ( event.pageX == null && event.clientX != null ) { - var doc = document.documentElement, - body = document.body; - - event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0); - event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0); - } - - // Add which for key events - if ( event.which == null && (event.charCode != null || event.keyCode != null) ) { - event.which = event.charCode != null ? event.charCode : event.keyCode; - } - - // Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs) - if ( !event.metaKey && event.ctrlKey ) { - event.metaKey = event.ctrlKey; - } - - // Add which for click: 1 === left; 2 === middle; 3 === right - // Note: button is not normalized, so don't use it - if ( !event.which && event.button !== undefined ) { - event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) )); - } - - return event; - }, - - // Deprecated, use jQuery.guid instead - guid: 1E8, - - // Deprecated, use jQuery.proxy instead - proxy: jQuery.proxy, - - special: { - ready: { - // Make sure the ready event is setup - setup: jQuery.bindReady, - teardown: jQuery.noop - }, - - live: { - add: function( handleObj ) { - jQuery.event.add( this, - liveConvert( handleObj.origType, handleObj.selector ), - jQuery.extend({}, handleObj, {handler: liveHandler, guid: handleObj.handler.guid}) ); - }, - - remove: function( handleObj ) { - jQuery.event.remove( this, liveConvert( handleObj.origType, handleObj.selector ), handleObj ); - } - }, - - beforeunload: { - setup: function( data, namespaces, eventHandle ) { - // We only want to do this special case on windows - if ( jQuery.isWindow( this ) ) { - this.onbeforeunload = eventHandle; - } - }, - - teardown: function( namespaces, eventHandle ) { - if ( this.onbeforeunload === eventHandle ) { - this.onbeforeunload = null; - } - } - } - } -}; - -jQuery.removeEvent = document.removeEventListener ? - function( elem, type, handle ) { - if ( elem.removeEventListener ) { - elem.removeEventListener( type, handle, false ); - } - } : - function( elem, type, handle ) { - if ( elem.detachEvent ) { - elem.detachEvent( "on" + type, handle ); - } - }; - -jQuery.Event = function( src ) { - // Allow instantiation without the 'new' keyword - if ( !this.preventDefault ) { - return new jQuery.Event( src ); - } - - // Event object - if ( src && src.type ) { - this.originalEvent = src; - this.type = src.type; - // Event type - } else { - this.type = src; - } - - // timeStamp is buggy for some events on Firefox(#3843) - // So we won't rely on the native value - this.timeStamp = jQuery.now(); - - // Mark it as fixed - this[ jQuery.expando ] = true; -}; - -function returnFalse() { - return false; -} -function returnTrue() { - return true; -} - -// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding -// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html -jQuery.Event.prototype = { - preventDefault: function() { - this.isDefaultPrevented = returnTrue; - - var e = this.originalEvent; - if ( !e ) { - return; - } - - // if preventDefault exists run it on the original event - if ( e.preventDefault ) { - e.preventDefault(); - - // otherwise set the returnValue property of the original event to false (IE) - } else { - e.returnValue = false; - } - }, - stopPropagation: function() { - this.isPropagationStopped = returnTrue; - - var e = this.originalEvent; - if ( !e ) { - return; - } - // if stopPropagation exists run it on the original event - if ( e.stopPropagation ) { - e.stopPropagation(); - } - // otherwise set the cancelBubble property of the original event to true (IE) - e.cancelBubble = true; - }, - stopImmediatePropagation: function() { - this.isImmediatePropagationStopped = returnTrue; - this.stopPropagation(); - }, - isDefaultPrevented: returnFalse, - isPropagationStopped: returnFalse, - isImmediatePropagationStopped: returnFalse -}; - -// Checks if an event happened on an element within another element -// Used in jQuery.event.special.mouseenter and mouseleave handlers -var withinElement = function( event ) { - // Check if mouse(over|out) are still within the same parent element - var parent = event.relatedTarget; - - // Firefox sometimes assigns relatedTarget a XUL element - // which we cannot access the parentNode property of - try { - // Traverse up the tree - while ( parent && parent !== this ) { - parent = parent.parentNode; - } - - if ( parent !== this ) { - // set the correct event type - event.type = event.data; - - // handle event if we actually just moused on to a non sub-element - jQuery.event.handle.apply( this, arguments ); - } - - // assuming we've left the element since we most likely mousedover a xul element - } catch(e) { } -}, - -// In case of event delegation, we only need to rename the event.type, -// liveHandler will take care of the rest. -delegate = function( event ) { - event.type = event.data; - jQuery.event.handle.apply( this, arguments ); -}; - -// Create mouseenter and mouseleave events -jQuery.each({ - mouseenter: "mouseover", - mouseleave: "mouseout" -}, function( orig, fix ) { - jQuery.event.special[ orig ] = { - setup: function( data ) { - jQuery.event.add( this, fix, data && data.selector ? delegate : withinElement, orig ); - }, - teardown: function( data ) { - jQuery.event.remove( this, fix, data && data.selector ? delegate : withinElement ); - } - }; -}); - -// submit delegation -if ( !jQuery.support.submitBubbles ) { - - jQuery.event.special.submit = { - setup: function( data, namespaces ) { - if ( this.nodeName.toLowerCase() !== "form" ) { - jQuery.event.add(this, "click.specialSubmit", function( e ) { - var elem = e.target, - type = elem.type; - - if ( (type === "submit" || type === "image") && jQuery( elem ).closest("form").length ) { - e.liveFired = undefined; - return trigger( "submit", this, arguments ); - } - }); - - jQuery.event.add(this, "keypress.specialSubmit", function( e ) { - var elem = e.target, - type = elem.type; - - if ( (type === "text" || type === "password") && jQuery( elem ).closest("form").length && e.keyCode === 13 ) { - e.liveFired = undefined; - return trigger( "submit", this, arguments ); - } - }); - - } else { - return false; - } - }, - - teardown: function( namespaces ) { - jQuery.event.remove( this, ".specialSubmit" ); - } - }; - -} - -// change delegation, happens here so we have bind. -if ( !jQuery.support.changeBubbles ) { - - var changeFilters, - - getVal = function( elem ) { - var type = elem.type, val = elem.value; - - if ( type === "radio" || type === "checkbox" ) { - val = elem.checked; - - } else if ( type === "select-multiple" ) { - val = elem.selectedIndex > -1 ? - jQuery.map( elem.options, function( elem ) { - return elem.selected; - }).join("-") : - ""; - - } else if ( elem.nodeName.toLowerCase() === "select" ) { - val = elem.selectedIndex; - } - - return val; - }, - - testChange = function testChange( e ) { - var elem = e.target, data, val; - - if ( !rformElems.test( elem.nodeName ) || elem.readOnly ) { - return; - } - - data = jQuery.data( elem, "_change_data" ); - val = getVal(elem); - - // the current data will be also retrieved by beforeactivate - if ( e.type !== "focusout" || elem.type !== "radio" ) { - jQuery.data( elem, "_change_data", val ); - } - - if ( data === undefined || val === data ) { - return; - } - - if ( data != null || val ) { - e.type = "change"; - e.liveFired = undefined; - return jQuery.event.trigger( e, arguments[1], elem ); - } - }; - - jQuery.event.special.change = { - filters: { - focusout: testChange, - - beforedeactivate: testChange, - - click: function( e ) { - var elem = e.target, type = elem.type; - - if ( type === "radio" || type === "checkbox" || elem.nodeName.toLowerCase() === "select" ) { - return testChange.call( this, e ); - } - }, - - // Change has to be called before submit - // Keydown will be called before keypress, which is used in submit-event delegation - keydown: function( e ) { - var elem = e.target, type = elem.type; - - if ( (e.keyCode === 13 && elem.nodeName.toLowerCase() !== "textarea") || - (e.keyCode === 32 && (type === "checkbox" || type === "radio")) || - type === "select-multiple" ) { - return testChange.call( this, e ); - } - }, - - // Beforeactivate happens also before the previous element is blurred - // with this event you can't trigger a change event, but you can store - // information - beforeactivate: function( e ) { - var elem = e.target; - jQuery.data( elem, "_change_data", getVal(elem) ); - } - }, - - setup: function( data, namespaces ) { - if ( this.type === "file" ) { - return false; - } - - for ( var type in changeFilters ) { - jQuery.event.add( this, type + ".specialChange", changeFilters[type] ); - } - - return rformElems.test( this.nodeName ); - }, - - teardown: function( namespaces ) { - jQuery.event.remove( this, ".specialChange" ); - - return rformElems.test( this.nodeName ); - } - }; - - changeFilters = jQuery.event.special.change.filters; - - // Handle when the input is .focus()'d - changeFilters.focus = changeFilters.beforeactivate; -} - -function trigger( type, elem, args ) { - args[0].type = type; - return jQuery.event.handle.apply( elem, args ); -} - -// Create "bubbling" focus and blur events -if ( document.addEventListener ) { - jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { - jQuery.event.special[ fix ] = { - setup: function() { - if ( focusCounts[fix]++ === 0 ) { - document.addEventListener( orig, handler, true ); - } - }, - teardown: function() { - if ( --focusCounts[fix] === 0 ) { - document.removeEventListener( orig, handler, true ); - } - } - }; - - function handler( e ) { - e = jQuery.event.fix( e ); - e.type = fix; - return jQuery.event.trigger( e, null, e.target ); - } - }); -} - -jQuery.each(["bind", "one"], function( i, name ) { - jQuery.fn[ name ] = function( type, data, fn ) { - // Handle object literals - if ( typeof type === "object" ) { - for ( var key in type ) { - this[ name ](key, data, type[key], fn); - } - return this; - } - - if ( jQuery.isFunction( data ) || data === false ) { - fn = data; - data = undefined; - } - - var handler = name === "one" ? jQuery.proxy( fn, function( event ) { - jQuery( this ).unbind( event, handler ); - return fn.apply( this, arguments ); - }) : fn; - - if ( type === "unload" && name !== "one" ) { - this.one( type, data, fn ); - - } else { - for ( var i = 0, l = this.length; i < l; i++ ) { - jQuery.event.add( this[i], type, handler, data ); - } - } - - return this; - }; -}); - -jQuery.fn.extend({ - unbind: function( type, fn ) { - // Handle object literals - if ( typeof type === "object" && !type.preventDefault ) { - for ( var key in type ) { - this.unbind(key, type[key]); - } - - } else { - for ( var i = 0, l = this.length; i < l; i++ ) { - jQuery.event.remove( this[i], type, fn ); - } - } - - return this; - }, - - delegate: function( selector, types, data, fn ) { - return this.live( types, data, fn, selector ); - }, - - undelegate: function( selector, types, fn ) { - if ( arguments.length === 0 ) { - return this.unbind( "live" ); - - } else { - return this.die( types, null, fn, selector ); - } - }, - - trigger: function( type, data ) { - return this.each(function() { - jQuery.event.trigger( type, data, this ); - }); - }, - - triggerHandler: function( type, data ) { - if ( this[0] ) { - var event = jQuery.Event( type ); - event.preventDefault(); - event.stopPropagation(); - jQuery.event.trigger( event, data, this[0] ); - return event.result; - } - }, - - toggle: function( fn ) { - // Save reference to arguments for access in closure - var args = arguments, - i = 1; - - // link all the functions, so any of them can unbind this click handler - while ( i < args.length ) { - jQuery.proxy( fn, args[ i++ ] ); - } - - return this.click( jQuery.proxy( fn, function( event ) { - // Figure out which function to execute - var lastToggle = ( jQuery.data( this, "lastToggle" + fn.guid ) || 0 ) % i; - jQuery.data( this, "lastToggle" + fn.guid, lastToggle + 1 ); - - // Make sure that clicks stop - event.preventDefault(); - - // and execute the function - return args[ lastToggle ].apply( this, arguments ) || false; - })); - }, - - hover: function( fnOver, fnOut ) { - return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); - } -}); - -var liveMap = { - focus: "focusin", - blur: "focusout", - mouseenter: "mouseover", - mouseleave: "mouseout" -}; - -jQuery.each(["live", "die"], function( i, name ) { - jQuery.fn[ name ] = function( types, data, fn, origSelector /* Internal Use Only */ ) { - var type, i = 0, match, namespaces, preType, - selector = origSelector || this.selector, - context = origSelector ? this : jQuery( this.context ); - - if ( typeof types === "object" && !types.preventDefault ) { - for ( var key in types ) { - context[ name ]( key, data, types[key], selector ); - } - - return this; - } - - if ( jQuery.isFunction( data ) ) { - fn = data; - data = undefined; - } - - types = (types || "").split(" "); - - while ( (type = types[ i++ ]) != null ) { - match = rnamespaces.exec( type ); - namespaces = ""; - - if ( match ) { - namespaces = match[0]; - type = type.replace( rnamespaces, "" ); - } - - if ( type === "hover" ) { - types.push( "mouseenter" + namespaces, "mouseleave" + namespaces ); - continue; - } - - preType = type; - - if ( type === "focus" || type === "blur" ) { - types.push( liveMap[ type ] + namespaces ); - type = type + namespaces; - - } else { - type = (liveMap[ type ] || type) + namespaces; - } - - if ( name === "live" ) { - // bind live handler - for ( var j = 0, l = context.length; j < l; j++ ) { - jQuery.event.add( context[j], "live." + liveConvert( type, selector ), - { data: data, selector: selector, handler: fn, origType: type, origHandler: fn, preType: preType } ); - } - - } else { - // unbind live handler - context.unbind( "live." + liveConvert( type, selector ), fn ); - } - } - - return this; - }; -}); - -function liveHandler( event ) { - var stop, maxLevel, related, match, handleObj, elem, j, i, l, data, close, namespace, ret, - elems = [], - selectors = [], - events = jQuery.data( this, this.nodeType ? "events" : "__events__" ); - - if ( typeof events === "function" ) { - events = events.events; - } - - // Make sure we avoid non-left-click bubbling in Firefox (#3861) - if ( event.liveFired === this || !events || !events.live || event.button && event.type === "click" ) { - return; - } - - if ( event.namespace ) { - namespace = new RegExp("(^|\\.)" + event.namespace.split(".").join("\\.(?:.*\\.)?") + "(\\.|$)"); - } - - event.liveFired = this; - - var live = events.live.slice(0); - - for ( j = 0; j < live.length; j++ ) { - handleObj = live[j]; - - if ( handleObj.origType.replace( rnamespaces, "" ) === event.type ) { - selectors.push( handleObj.selector ); - - } else { - live.splice( j--, 1 ); - } - } - - match = jQuery( event.target ).closest( selectors, event.currentTarget ); - - for ( i = 0, l = match.length; i < l; i++ ) { - close = match[i]; - - for ( j = 0; j < live.length; j++ ) { - handleObj = live[j]; - - if ( close.selector === handleObj.selector && (!namespace || namespace.test( handleObj.namespace )) ) { - elem = close.elem; - related = null; - - // Those two events require additional checking - if ( handleObj.preType === "mouseenter" || handleObj.preType === "mouseleave" ) { - event.type = handleObj.preType; - related = jQuery( event.relatedTarget ).closest( handleObj.selector )[0]; - } - - if ( !related || related !== elem ) { - elems.push({ elem: elem, handleObj: handleObj, level: close.level }); - } - } - } - } - - for ( i = 0, l = elems.length; i < l; i++ ) { - match = elems[i]; - - if ( maxLevel && match.level > maxLevel ) { - break; - } - - event.currentTarget = match.elem; - event.data = match.handleObj.data; - event.handleObj = match.handleObj; - - ret = match.handleObj.origHandler.apply( match.elem, arguments ); - - if ( ret === false || event.isPropagationStopped() ) { - maxLevel = match.level; - - if ( ret === false ) { - stop = false; - } - if ( event.isImmediatePropagationStopped() ) { - break; - } - } - } - - return stop; -} - -function liveConvert( type, selector ) { - return (type && type !== "*" ? type + "." : "") + selector.replace(rperiod, "`").replace(rspace, "&"); -} - -jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " + - "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + - "change select submit keydown keypress keyup error").split(" "), function( i, name ) { - - // Handle event binding - jQuery.fn[ name ] = function( data, fn ) { - if ( fn == null ) { - fn = data; - data = null; - } - - return arguments.length > 0 ? - this.bind( name, data, fn ) : - this.trigger( name ); - }; - - if ( jQuery.attrFn ) { - jQuery.attrFn[ name ] = true; - } -}); - -// Prevent memory leaks in IE -// Window isn't included so as not to unbind existing unload events -// More info: -// - http://isaacschlueter.com/2006/10/msie-memory-leaks/ -if ( window.attachEvent && !window.addEventListener ) { - jQuery(window).bind("unload", function() { - for ( var id in jQuery.cache ) { - if ( jQuery.cache[ id ].handle ) { - // Try/Catch is to handle iframes being unloaded, see #4280 - try { - jQuery.event.remove( jQuery.cache[ id ].handle.elem ); - } catch(e) {} - } - } - }); -} - - -/*! - * Sizzle CSS Selector Engine - v1.0 - * Copyright 2009, The Dojo Foundation - * Released under the MIT, BSD, and GPL Licenses. - * More information: http://sizzlejs.com/ - */ -(function(){ - -var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, - done = 0, - toString = Object.prototype.toString, - hasDuplicate = false, - baseHasDuplicate = true; - -// Here we check if the JavaScript engine is using some sort of -// optimization where it does not always call our comparision -// function. If that is the case, discard the hasDuplicate value. -// Thus far that includes Google Chrome. -[0, 0].sort(function() { - baseHasDuplicate = false; - return 0; -}); - -var Sizzle = function( selector, context, results, seed ) { - results = results || []; - context = context || document; - - var origContext = context; - - if ( context.nodeType !== 1 && context.nodeType !== 9 ) { - return []; - } - - if ( !selector || typeof selector !== "string" ) { - return results; - } - - var m, set, checkSet, extra, ret, cur, pop, i, - prune = true, - contextXML = Sizzle.isXML( context ), - parts = [], - soFar = selector; - - // Reset the position of the chunker regexp (start from head) - do { - chunker.exec( "" ); - m = chunker.exec( soFar ); - - if ( m ) { - soFar = m[3]; - - parts.push( m[1] ); - - if ( m[2] ) { - extra = m[3]; - break; - } - } - } while ( m ); - - if ( parts.length > 1 && origPOS.exec( selector ) ) { - - if ( parts.length === 2 && Expr.relative[ parts[0] ] ) { - set = posProcess( parts[0] + parts[1], context ); - - } else { - set = Expr.relative[ parts[0] ] ? - [ context ] : - Sizzle( parts.shift(), context ); - - while ( parts.length ) { - selector = parts.shift(); - - if ( Expr.relative[ selector ] ) { - selector += parts.shift(); - } - - set = posProcess( selector, set ); - } - } - - } else { - // Take a shortcut and set the context if the root selector is an ID - // (but not if it'll be faster if the inner selector is an ID) - if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML && - Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) { - - ret = Sizzle.find( parts.shift(), context, contextXML ); - context = ret.expr ? - Sizzle.filter( ret.expr, ret.set )[0] : - ret.set[0]; - } - - if ( context ) { - ret = seed ? - { expr: parts.pop(), set: makeArray(seed) } : - Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML ); - - set = ret.expr ? - Sizzle.filter( ret.expr, ret.set ) : - ret.set; - - if ( parts.length > 0 ) { - checkSet = makeArray( set ); - - } else { - prune = false; - } - - while ( parts.length ) { - cur = parts.pop(); - pop = cur; - - if ( !Expr.relative[ cur ] ) { - cur = ""; - } else { - pop = parts.pop(); - } - - if ( pop == null ) { - pop = context; - } - - Expr.relative[ cur ]( checkSet, pop, contextXML ); - } - - } else { - checkSet = parts = []; - } - } - - if ( !checkSet ) { - checkSet = set; - } - - if ( !checkSet ) { - Sizzle.error( cur || selector ); - } - - if ( toString.call(checkSet) === "[object Array]" ) { - if ( !prune ) { - results.push.apply( results, checkSet ); - - } else if ( context && context.nodeType === 1 ) { - for ( i = 0; checkSet[i] != null; i++ ) { - if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) { - results.push( set[i] ); - } - } - - } else { - for ( i = 0; checkSet[i] != null; i++ ) { - if ( checkSet[i] && checkSet[i].nodeType === 1 ) { - results.push( set[i] ); - } - } - } - - } else { - makeArray( checkSet, results ); - } - - if ( extra ) { - Sizzle( extra, origContext, results, seed ); - Sizzle.uniqueSort( results ); - } - - return results; -}; - -Sizzle.uniqueSort = function( results ) { - if ( sortOrder ) { - hasDuplicate = baseHasDuplicate; - results.sort( sortOrder ); - - if ( hasDuplicate ) { - for ( var i = 1; i < results.length; i++ ) { - if ( results[i] === results[ i - 1 ] ) { - results.splice( i--, 1 ); - } - } - } - } - - return results; -}; - -Sizzle.matches = function( expr, set ) { - return Sizzle( expr, null, null, set ); -}; - -Sizzle.matchesSelector = function( node, expr ) { - return Sizzle( expr, null, null, [node] ).length > 0; -}; - -Sizzle.find = function( expr, context, isXML ) { - var set; - - if ( !expr ) { - return []; - } - - for ( var i = 0, l = Expr.order.length; i < l; i++ ) { - var match, - type = Expr.order[i]; - - if ( (match = Expr.leftMatch[ type ].exec( expr )) ) { - var left = match[1]; - match.splice( 1, 1 ); - - if ( left.substr( left.length - 1 ) !== "\\" ) { - match[1] = (match[1] || "").replace(/\\/g, ""); - set = Expr.find[ type ]( match, context, isXML ); - - if ( set != null ) { - expr = expr.replace( Expr.match[ type ], "" ); - break; - } - } - } - } - - if ( !set ) { - set = context.getElementsByTagName( "*" ); - } - - return { set: set, expr: expr }; -}; - -Sizzle.filter = function( expr, set, inplace, not ) { - var match, anyFound, - old = expr, - result = [], - curLoop = set, - isXMLFilter = set && set[0] && Sizzle.isXML( set[0] ); - - while ( expr && set.length ) { - for ( var type in Expr.filter ) { - if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) { - var found, item, - filter = Expr.filter[ type ], - left = match[1]; - - anyFound = false; - - match.splice(1,1); - - if ( left.substr( left.length - 1 ) === "\\" ) { - continue; - } - - if ( curLoop === result ) { - result = []; - } - - if ( Expr.preFilter[ type ] ) { - match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter ); - - if ( !match ) { - anyFound = found = true; - - } else if ( match === true ) { - continue; - } - } - - if ( match ) { - for ( var i = 0; (item = curLoop[i]) != null; i++ ) { - if ( item ) { - found = filter( item, match, i, curLoop ); - var pass = not ^ !!found; - - if ( inplace && found != null ) { - if ( pass ) { - anyFound = true; - - } else { - curLoop[i] = false; - } - - } else if ( pass ) { - result.push( item ); - anyFound = true; - } - } - } - } - - if ( found !== undefined ) { - if ( !inplace ) { - curLoop = result; - } - - expr = expr.replace( Expr.match[ type ], "" ); - - if ( !anyFound ) { - return []; - } - - break; - } - } - } - - // Improper expression - if ( expr === old ) { - if ( anyFound == null ) { - Sizzle.error( expr ); - - } else { - break; - } - } - - old = expr; - } - - return curLoop; -}; - -Sizzle.error = function( msg ) { - throw "Syntax error, unrecognized expression: " + msg; -}; - -var Expr = Sizzle.selectors = { - order: [ "ID", "NAME", "TAG" ], - - match: { - ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/, - CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/, - NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/, - ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/, - TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/, - CHILD: /:(only|nth|last|first)-child(?:\((even|odd|[\dn+\-]*)\))?/, - POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/, - PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/ - }, - - leftMatch: {}, - - attrMap: { - "class": "className", - "for": "htmlFor" - }, - - attrHandle: { - href: function( elem ) { - return elem.getAttribute( "href" ); - } - }, - - relative: { - "+": function(checkSet, part){ - var isPartStr = typeof part === "string", - isTag = isPartStr && !/\W/.test( part ), - isPartStrNotTag = isPartStr && !isTag; - - if ( isTag ) { - part = part.toLowerCase(); - } - - for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) { - if ( (elem = checkSet[i]) ) { - while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {} - - checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ? - elem || false : - elem === part; - } - } - - if ( isPartStrNotTag ) { - Sizzle.filter( part, checkSet, true ); - } - }, - - ">": function( checkSet, part ) { - var elem, - isPartStr = typeof part === "string", - i = 0, - l = checkSet.length; - - if ( isPartStr && !/\W/.test( part ) ) { - part = part.toLowerCase(); - - for ( ; i < l; i++ ) { - elem = checkSet[i]; - - if ( elem ) { - var parent = elem.parentNode; - checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false; - } - } - - } else { - for ( ; i < l; i++ ) { - elem = checkSet[i]; - - if ( elem ) { - checkSet[i] = isPartStr ? - elem.parentNode : - elem.parentNode === part; - } - } - - if ( isPartStr ) { - Sizzle.filter( part, checkSet, true ); - } - } - }, - - "": function(checkSet, part, isXML){ - var nodeCheck, - doneName = done++, - checkFn = dirCheck; - - if ( typeof part === "string" && !/\W/.test(part) ) { - part = part.toLowerCase(); - nodeCheck = part; - checkFn = dirNodeCheck; - } - - checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML ); - }, - - "~": function( checkSet, part, isXML ) { - var nodeCheck, - doneName = done++, - checkFn = dirCheck; - - if ( typeof part === "string" && !/\W/.test( part ) ) { - part = part.toLowerCase(); - nodeCheck = part; - checkFn = dirNodeCheck; - } - - checkFn( "previousSibling", part, doneName, checkSet, nodeCheck, isXML ); - } - }, - - find: { - ID: function( match, context, isXML ) { - if ( typeof context.getElementById !== "undefined" && !isXML ) { - var m = context.getElementById(match[1]); - // Check parentNode to catch when Blackberry 4.6 returns - // nodes that are no longer in the document #6963 - return m && m.parentNode ? [m] : []; - } - }, - - NAME: function( match, context ) { - if ( typeof context.getElementsByName !== "undefined" ) { - var ret = [], - results = context.getElementsByName( match[1] ); - - for ( var i = 0, l = results.length; i < l; i++ ) { - if ( results[i].getAttribute("name") === match[1] ) { - ret.push( results[i] ); - } - } - - return ret.length === 0 ? null : ret; - } - }, - - TAG: function( match, context ) { - return context.getElementsByTagName( match[1] ); - } - }, - preFilter: { - CLASS: function( match, curLoop, inplace, result, not, isXML ) { - match = " " + match[1].replace(/\\/g, "") + " "; - - if ( isXML ) { - return match; - } - - for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) { - if ( elem ) { - if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n]/g, " ").indexOf(match) >= 0) ) { - if ( !inplace ) { - result.push( elem ); - } - - } else if ( inplace ) { - curLoop[i] = false; - } - } - } - - return false; - }, - - ID: function( match ) { - return match[1].replace(/\\/g, ""); - }, - - TAG: function( match, curLoop ) { - return match[1].toLowerCase(); - }, - - CHILD: function( match ) { - if ( match[1] === "nth" ) { - // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6' - var test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec( - match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" || - !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]); - - // calculate the numbers (first)n+(last) including if they are negative - match[2] = (test[1] + (test[2] || 1)) - 0; - match[3] = test[3] - 0; - } - - // TODO: Move to normal caching system - match[0] = done++; - - return match; - }, - - ATTR: function( match, curLoop, inplace, result, not, isXML ) { - var name = match[1].replace(/\\/g, ""); - - if ( !isXML && Expr.attrMap[name] ) { - match[1] = Expr.attrMap[name]; - } - - if ( match[2] === "~=" ) { - match[4] = " " + match[4] + " "; - } - - return match; - }, - - PSEUDO: function( match, curLoop, inplace, result, not ) { - if ( match[1] === "not" ) { - // If we're dealing with a complex expression, or a simple one - if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) { - match[3] = Sizzle(match[3], null, null, curLoop); - - } else { - var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not); - - if ( !inplace ) { - result.push.apply( result, ret ); - } - - return false; - } - - } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) { - return true; - } - - return match; - }, - - POS: function( match ) { - match.unshift( true ); - - return match; - } - }, - - filters: { - enabled: function( elem ) { - return elem.disabled === false && elem.type !== "hidden"; - }, - - disabled: function( elem ) { - return elem.disabled === true; - }, - - checked: function( elem ) { - return elem.checked === true; - }, - - selected: function( elem ) { - // Accessing this property makes selected-by-default - // options in Safari work properly - elem.parentNode.selectedIndex; - - return elem.selected === true; - }, - - parent: function( elem ) { - return !!elem.firstChild; - }, - - empty: function( elem ) { - return !elem.firstChild; - }, - - has: function( elem, i, match ) { - return !!Sizzle( match[3], elem ).length; - }, - - header: function( elem ) { - return (/h\d/i).test( elem.nodeName ); - }, - - text: function( elem ) { - return "text" === elem.type; - }, - radio: function( elem ) { - return "radio" === elem.type; - }, - - checkbox: function( elem ) { - return "checkbox" === elem.type; - }, - - file: function( elem ) { - return "file" === elem.type; - }, - password: function( elem ) { - return "password" === elem.type; - }, - - submit: function( elem ) { - return "submit" === elem.type; - }, - - image: function( elem ) { - return "image" === elem.type; - }, - - reset: function( elem ) { - return "reset" === elem.type; - }, - - button: function( elem ) { - return "button" === elem.type || elem.nodeName.toLowerCase() === "button"; - }, - - input: function( elem ) { - return (/input|select|textarea|button/i).test( elem.nodeName ); - } - }, - setFilters: { - first: function( elem, i ) { - return i === 0; - }, - - last: function( elem, i, match, array ) { - return i === array.length - 1; - }, - - even: function( elem, i ) { - return i % 2 === 0; - }, - - odd: function( elem, i ) { - return i % 2 === 1; - }, - - lt: function( elem, i, match ) { - return i < match[3] - 0; - }, - - gt: function( elem, i, match ) { - return i > match[3] - 0; - }, - - nth: function( elem, i, match ) { - return match[3] - 0 === i; - }, - - eq: function( elem, i, match ) { - return match[3] - 0 === i; - } - }, - filter: { - PSEUDO: function( elem, match, i, array ) { - var name = match[1], - filter = Expr.filters[ name ]; - - if ( filter ) { - return filter( elem, i, match, array ); - - } else if ( name === "contains" ) { - return (elem.textContent || elem.innerText || Sizzle.getText([ elem ]) || "").indexOf(match[3]) >= 0; - - } else if ( name === "not" ) { - var not = match[3]; - - for ( var j = 0, l = not.length; j < l; j++ ) { - if ( not[j] === elem ) { - return false; - } - } - - return true; - - } else { - Sizzle.error( "Syntax error, unrecognized expression: " + name ); - } - }, - - CHILD: function( elem, match ) { - var type = match[1], - node = elem; - - switch ( type ) { - case "only": - case "first": - while ( (node = node.previousSibling) ) { - if ( node.nodeType === 1 ) { - return false; - } - } - - if ( type === "first" ) { - return true; - } - - node = elem; - - case "last": - while ( (node = node.nextSibling) ) { - if ( node.nodeType === 1 ) { - return false; - } - } - - return true; - - case "nth": - var first = match[2], - last = match[3]; - - if ( first === 1 && last === 0 ) { - return true; - } - - var doneName = match[0], - parent = elem.parentNode; - - if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) { - var count = 0; - - for ( node = parent.firstChild; node; node = node.nextSibling ) { - if ( node.nodeType === 1 ) { - node.nodeIndex = ++count; - } - } - - parent.sizcache = doneName; - } - - var diff = elem.nodeIndex - last; - - if ( first === 0 ) { - return diff === 0; - - } else { - return ( diff % first === 0 && diff / first >= 0 ); - } - } - }, - - ID: function( elem, match ) { - return elem.nodeType === 1 && elem.getAttribute("id") === match; - }, - - TAG: function( elem, match ) { - return (match === "*" && elem.nodeType === 1) || elem.nodeName.toLowerCase() === match; - }, - - CLASS: function( elem, match ) { - return (" " + (elem.className || elem.getAttribute("class")) + " ") - .indexOf( match ) > -1; - }, - - ATTR: function( elem, match ) { - var name = match[1], - result = Expr.attrHandle[ name ] ? - Expr.attrHandle[ name ]( elem ) : - elem[ name ] != null ? - elem[ name ] : - elem.getAttribute( name ), - value = result + "", - type = match[2], - check = match[4]; - - return result == null ? - type === "!=" : - type === "=" ? - value === check : - type === "*=" ? - value.indexOf(check) >= 0 : - type === "~=" ? - (" " + value + " ").indexOf(check) >= 0 : - !check ? - value && result !== false : - type === "!=" ? - value !== check : - type === "^=" ? - value.indexOf(check) === 0 : - type === "$=" ? - value.substr(value.length - check.length) === check : - type === "|=" ? - value === check || value.substr(0, check.length + 1) === check + "-" : - false; - }, - - POS: function( elem, match, i, array ) { - var name = match[2], - filter = Expr.setFilters[ name ]; - - if ( filter ) { - return filter( elem, i, match, array ); - } - } - } -}; - -var origPOS = Expr.match.POS, - fescape = function(all, num){ - return "\\" + (num - 0 + 1); - }; - -for ( var type in Expr.match ) { - Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) ); - Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) ); -} - -var makeArray = function( array, results ) { - array = Array.prototype.slice.call( array, 0 ); - - if ( results ) { - results.push.apply( results, array ); - return results; - } - - return array; -}; - -// Perform a simple check to determine if the browser is capable of -// converting a NodeList to an array using builtin methods. -// Also verifies that the returned array holds DOM nodes -// (which is not the case in the Blackberry browser) -try { - Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType; - -// Provide a fallback method if it does not work -} catch( e ) { - makeArray = function( array, results ) { - var i = 0, - ret = results || []; - - if ( toString.call(array) === "[object Array]" ) { - Array.prototype.push.apply( ret, array ); - - } else { - if ( typeof array.length === "number" ) { - for ( var l = array.length; i < l; i++ ) { - ret.push( array[i] ); - } - - } else { - for ( ; array[i]; i++ ) { - ret.push( array[i] ); - } - } - } - - return ret; - }; -} - -var sortOrder, siblingCheck; - -if ( document.documentElement.compareDocumentPosition ) { - sortOrder = function( a, b ) { - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) { - return a.compareDocumentPosition ? -1 : 1; - } - - return a.compareDocumentPosition(b) & 4 ? -1 : 1; - }; - -} else { - sortOrder = function( a, b ) { - var al, bl, - ap = [], - bp = [], - aup = a.parentNode, - bup = b.parentNode, - cur = aup; - - // The nodes are identical, we can exit early - if ( a === b ) { - hasDuplicate = true; - return 0; - - // If the nodes are siblings (or identical) we can do a quick check - } else if ( aup === bup ) { - return siblingCheck( a, b ); - - // If no parents were found then the nodes are disconnected - } else if ( !aup ) { - return -1; - - } else if ( !bup ) { - return 1; - } - - // Otherwise they're somewhere else in the tree so we need - // to build up a full list of the parentNodes for comparison - while ( cur ) { - ap.unshift( cur ); - cur = cur.parentNode; - } - - cur = bup; - - while ( cur ) { - bp.unshift( cur ); - cur = cur.parentNode; - } - - al = ap.length; - bl = bp.length; - - // Start walking down the tree looking for a discrepancy - for ( var i = 0; i < al && i < bl; i++ ) { - if ( ap[i] !== bp[i] ) { - return siblingCheck( ap[i], bp[i] ); - } - } - - // We ended someplace up the tree so do a sibling check - return i === al ? - siblingCheck( a, bp[i], -1 ) : - siblingCheck( ap[i], b, 1 ); - }; - - siblingCheck = function( a, b, ret ) { - if ( a === b ) { - return ret; - } - - var cur = a.nextSibling; - - while ( cur ) { - if ( cur === b ) { - return -1; - } - - cur = cur.nextSibling; - } - - return 1; - }; -} - -// Utility function for retreiving the text value of an array of DOM nodes -Sizzle.getText = function( elems ) { - var ret = "", elem; - - for ( var i = 0; elems[i]; i++ ) { - elem = elems[i]; - - // Get the text from text nodes and CDATA nodes - if ( elem.nodeType === 3 || elem.nodeType === 4 ) { - ret += elem.nodeValue; - - // Traverse everything else, except comment nodes - } else if ( elem.nodeType !== 8 ) { - ret += Sizzle.getText( elem.childNodes ); - } - } - - return ret; -}; - -// Check to see if the browser returns elements by name when -// querying by getElementById (and provide a workaround) -(function(){ - // We're going to inject a fake input element with a specified name - var form = document.createElement("div"), - id = "script" + (new Date()).getTime(), - root = document.documentElement; - - form.innerHTML = ""; - - // Inject it into the root element, check its status, and remove it quickly - root.insertBefore( form, root.firstChild ); - - // The workaround has to do additional checks after a getElementById - // Which slows things down for other browsers (hence the branching) - if ( document.getElementById( id ) ) { - Expr.find.ID = function( match, context, isXML ) { - if ( typeof context.getElementById !== "undefined" && !isXML ) { - var m = context.getElementById(match[1]); - - return m ? - m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? - [m] : - undefined : - []; - } - }; - - Expr.filter.ID = function( elem, match ) { - var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id"); - - return elem.nodeType === 1 && node && node.nodeValue === match; - }; - } - - root.removeChild( form ); - - // release memory in IE - root = form = null; -})(); - -(function(){ - // Check to see if the browser returns only elements - // when doing getElementsByTagName("*") - - // Create a fake element - var div = document.createElement("div"); - div.appendChild( document.createComment("") ); - - // Make sure no comments are found - if ( div.getElementsByTagName("*").length > 0 ) { - Expr.find.TAG = function( match, context ) { - var results = context.getElementsByTagName( match[1] ); - - // Filter out possible comments - if ( match[1] === "*" ) { - var tmp = []; - - for ( var i = 0; results[i]; i++ ) { - if ( results[i].nodeType === 1 ) { - tmp.push( results[i] ); - } - } - - results = tmp; - } - - return results; - }; - } - - // Check to see if an attribute returns normalized href attributes - div.innerHTML = ""; - - if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" && - div.firstChild.getAttribute("href") !== "#" ) { - - Expr.attrHandle.href = function( elem ) { - return elem.getAttribute( "href", 2 ); - }; - } - - // release memory in IE - div = null; -})(); - -if ( document.querySelectorAll ) { - (function(){ - var oldSizzle = Sizzle, - div = document.createElement("div"), - id = "__sizzle__"; - - div.innerHTML = "

"; - - // Safari can't handle uppercase or unicode characters when - // in quirks mode. - if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) { - return; - } - - Sizzle = function( query, context, extra, seed ) { - context = context || document; - - // Make sure that attribute selectors are quoted - query = query.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']"); - - // Only use querySelectorAll on non-XML documents - // (ID selectors don't work in non-HTML documents) - if ( !seed && !Sizzle.isXML(context) ) { - if ( context.nodeType === 9 ) { - try { - return makeArray( context.querySelectorAll(query), extra ); - } catch(qsaError) {} - - // qSA works strangely on Element-rooted queries - // We can work around this by specifying an extra ID on the root - // and working up from there (Thanks to Andrew Dupont for the technique) - // IE 8 doesn't work on object elements - } else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { - var old = context.getAttribute( "id" ), - nid = old || id; - - if ( !old ) { - context.setAttribute( "id", nid ); - } - - try { - return makeArray( context.querySelectorAll( "#" + nid + " " + query ), extra ); - - } catch(pseudoError) { - } finally { - if ( !old ) { - context.removeAttribute( "id" ); - } - } - } - } - - return oldSizzle(query, context, extra, seed); - }; - - for ( var prop in oldSizzle ) { - Sizzle[ prop ] = oldSizzle[ prop ]; - } - - // release memory in IE - div = null; - })(); -} - -(function(){ - var html = document.documentElement, - matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector, - pseudoWorks = false; - - try { - // This should fail with an exception - // Gecko does not error, returns false instead - matches.call( document.documentElement, "[test!='']:sizzle" ); - - } catch( pseudoError ) { - pseudoWorks = true; - } - - if ( matches ) { - Sizzle.matchesSelector = function( node, expr ) { - // Make sure that attribute selectors are quoted - expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']"); - - if ( !Sizzle.isXML( node ) ) { - try { - if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) { - return matches.call( node, expr ); - } - } catch(e) {} - } - - return Sizzle(expr, null, null, [node]).length > 0; - }; - } -})(); - -(function(){ - var div = document.createElement("div"); - - div.innerHTML = "
"; - - // Opera can't find a second classname (in 9.6) - // Also, make sure that getElementsByClassName actually exists - if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) { - return; - } - - // Safari caches class attributes, doesn't catch changes (in 3.2) - div.lastChild.className = "e"; - - if ( div.getElementsByClassName("e").length === 1 ) { - return; - } - - Expr.order.splice(1, 0, "CLASS"); - Expr.find.CLASS = function( match, context, isXML ) { - if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) { - return context.getElementsByClassName(match[1]); - } - }; - - // release memory in IE - div = null; -})(); - -function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { - for ( var i = 0, l = checkSet.length; i < l; i++ ) { - var elem = checkSet[i]; - - if ( elem ) { - var match = false; - - elem = elem[dir]; - - while ( elem ) { - if ( elem.sizcache === doneName ) { - match = checkSet[elem.sizset]; - break; - } - - if ( elem.nodeType === 1 && !isXML ){ - elem.sizcache = doneName; - elem.sizset = i; - } - - if ( elem.nodeName.toLowerCase() === cur ) { - match = elem; - break; - } - - elem = elem[dir]; - } - - checkSet[i] = match; - } - } -} - -function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { - for ( var i = 0, l = checkSet.length; i < l; i++ ) { - var elem = checkSet[i]; - - if ( elem ) { - var match = false; - - elem = elem[dir]; - - while ( elem ) { - if ( elem.sizcache === doneName ) { - match = checkSet[elem.sizset]; - break; - } - - if ( elem.nodeType === 1 ) { - if ( !isXML ) { - elem.sizcache = doneName; - elem.sizset = i; - } - - if ( typeof cur !== "string" ) { - if ( elem === cur ) { - match = true; - break; - } - - } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) { - match = elem; - break; - } - } - - elem = elem[dir]; - } - - checkSet[i] = match; - } - } -} - -if ( document.documentElement.contains ) { - Sizzle.contains = function( a, b ) { - return a !== b && (a.contains ? a.contains(b) : true); - }; - -} else if ( document.documentElement.compareDocumentPosition ) { - Sizzle.contains = function( a, b ) { - return !!(a.compareDocumentPosition(b) & 16); - }; - -} else { - Sizzle.contains = function() { - return false; - }; -} - -Sizzle.isXML = function( elem ) { - // documentElement is verified for cases where it doesn't yet exist - // (such as loading iframes in IE - #4833) - var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement; - - return documentElement ? documentElement.nodeName !== "HTML" : false; -}; - -var posProcess = function( selector, context ) { - var match, - tmpSet = [], - later = "", - root = context.nodeType ? [context] : context; - - // Position selectors must be done after the filter - // And so must :not(positional) so we move all PSEUDOs to the end - while ( (match = Expr.match.PSEUDO.exec( selector )) ) { - later += match[0]; - selector = selector.replace( Expr.match.PSEUDO, "" ); - } - - selector = Expr.relative[selector] ? selector + "*" : selector; - - for ( var i = 0, l = root.length; i < l; i++ ) { - Sizzle( selector, root[i], tmpSet ); - } - - return Sizzle.filter( later, tmpSet ); -}; - -// EXPOSE -jQuery.find = Sizzle; -jQuery.expr = Sizzle.selectors; -jQuery.expr[":"] = jQuery.expr.filters; -jQuery.unique = Sizzle.uniqueSort; -jQuery.text = Sizzle.getText; -jQuery.isXMLDoc = Sizzle.isXML; -jQuery.contains = Sizzle.contains; - - -})(); - - -var runtil = /Until$/, - rparentsprev = /^(?:parents|prevUntil|prevAll)/, - // Note: This RegExp should be improved, or likely pulled from Sizzle - rmultiselector = /,/, - isSimple = /^.[^:#\[\.,]*$/, - slice = Array.prototype.slice, - POS = jQuery.expr.match.POS; - -jQuery.fn.extend({ - find: function( selector ) { - var ret = this.pushStack( "", "find", selector ), - length = 0; - - for ( var i = 0, l = this.length; i < l; i++ ) { - length = ret.length; - jQuery.find( selector, this[i], ret ); - - if ( i > 0 ) { - // Make sure that the results are unique - for ( var n = length; n < ret.length; n++ ) { - for ( var r = 0; r < length; r++ ) { - if ( ret[r] === ret[n] ) { - ret.splice(n--, 1); - break; - } - } - } - } - } - - return ret; - }, - - has: function( target ) { - var targets = jQuery( target ); - return this.filter(function() { - for ( var i = 0, l = targets.length; i < l; i++ ) { - if ( jQuery.contains( this, targets[i] ) ) { - return true; - } - } - }); - }, - - not: function( selector ) { - return this.pushStack( winnow(this, selector, false), "not", selector); - }, - - filter: function( selector ) { - return this.pushStack( winnow(this, selector, true), "filter", selector ); - }, - - is: function( selector ) { - return !!selector && jQuery.filter( selector, this ).length > 0; - }, - - closest: function( selectors, context ) { - var ret = [], i, l, cur = this[0]; - - if ( jQuery.isArray( selectors ) ) { - var match, selector, - matches = {}, - level = 1; - - if ( cur && selectors.length ) { - for ( i = 0, l = selectors.length; i < l; i++ ) { - selector = selectors[i]; - - if ( !matches[selector] ) { - matches[selector] = jQuery.expr.match.POS.test( selector ) ? - jQuery( selector, context || this.context ) : - selector; - } - } - - while ( cur && cur.ownerDocument && cur !== context ) { - for ( selector in matches ) { - match = matches[selector]; - - if ( match.jquery ? match.index(cur) > -1 : jQuery(cur).is(match) ) { - ret.push({ selector: selector, elem: cur, level: level }); - } - } - - cur = cur.parentNode; - level++; - } - } - - return ret; - } - - var pos = POS.test( selectors ) ? - jQuery( selectors, context || this.context ) : null; - - for ( i = 0, l = this.length; i < l; i++ ) { - cur = this[i]; - - while ( cur ) { - if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) { - ret.push( cur ); - break; - - } else { - cur = cur.parentNode; - if ( !cur || !cur.ownerDocument || cur === context ) { - break; - } - } - } - } - - ret = ret.length > 1 ? jQuery.unique(ret) : ret; - - return this.pushStack( ret, "closest", selectors ); - }, - - // Determine the position of an element within - // the matched set of elements - index: function( elem ) { - if ( !elem || typeof elem === "string" ) { - return jQuery.inArray( this[0], - // If it receives a string, the selector is used - // If it receives nothing, the siblings are used - elem ? jQuery( elem ) : this.parent().children() ); - } - // Locate the position of the desired element - return jQuery.inArray( - // If it receives a jQuery object, the first element is used - elem.jquery ? elem[0] : elem, this ); - }, - - add: function( selector, context ) { - var set = typeof selector === "string" ? - jQuery( selector, context || this.context ) : - jQuery.makeArray( selector ), - all = jQuery.merge( this.get(), set ); - - return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ? - all : - jQuery.unique( all ) ); - }, - - andSelf: function() { - return this.add( this.prevObject ); - } -}); - -// A painfully simple check to see if an element is disconnected -// from a document (should be improved, where feasible). -function isDisconnected( node ) { - return !node || !node.parentNode || node.parentNode.nodeType === 11; -} - -jQuery.each({ - parent: function( elem ) { - var parent = elem.parentNode; - return parent && parent.nodeType !== 11 ? parent : null; - }, - parents: function( elem ) { - return jQuery.dir( elem, "parentNode" ); - }, - parentsUntil: function( elem, i, until ) { - return jQuery.dir( elem, "parentNode", until ); - }, - next: function( elem ) { - return jQuery.nth( elem, 2, "nextSibling" ); - }, - prev: function( elem ) { - return jQuery.nth( elem, 2, "previousSibling" ); - }, - nextAll: function( elem ) { - return jQuery.dir( elem, "nextSibling" ); - }, - prevAll: function( elem ) { - return jQuery.dir( elem, "previousSibling" ); - }, - nextUntil: function( elem, i, until ) { - return jQuery.dir( elem, "nextSibling", until ); - }, - prevUntil: function( elem, i, until ) { - return jQuery.dir( elem, "previousSibling", until ); - }, - siblings: function( elem ) { - return jQuery.sibling( elem.parentNode.firstChild, elem ); - }, - children: function( elem ) { - return jQuery.sibling( elem.firstChild ); - }, - contents: function( elem ) { - return jQuery.nodeName( elem, "iframe" ) ? - elem.contentDocument || elem.contentWindow.document : - jQuery.makeArray( elem.childNodes ); - } -}, function( name, fn ) { - jQuery.fn[ name ] = function( until, selector ) { - var ret = jQuery.map( this, fn, until ); - - if ( !runtil.test( name ) ) { - selector = until; - } - - if ( selector && typeof selector === "string" ) { - ret = jQuery.filter( selector, ret ); - } - - ret = this.length > 1 ? jQuery.unique( ret ) : ret; - - if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) { - ret = ret.reverse(); - } - - return this.pushStack( ret, name, slice.call(arguments).join(",") ); - }; -}); - -jQuery.extend({ - filter: function( expr, elems, not ) { - if ( not ) { - expr = ":not(" + expr + ")"; - } - - return elems.length === 1 ? - jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] : - jQuery.find.matches(expr, elems); - }, - - dir: function( elem, dir, until ) { - var matched = [], - cur = elem[ dir ]; - - while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) { - if ( cur.nodeType === 1 ) { - matched.push( cur ); - } - cur = cur[dir]; - } - return matched; - }, - - nth: function( cur, result, dir, elem ) { - result = result || 1; - var num = 0; - - for ( ; cur; cur = cur[dir] ) { - if ( cur.nodeType === 1 && ++num === result ) { - break; - } - } - - return cur; - }, - - sibling: function( n, elem ) { - var r = []; - - for ( ; n; n = n.nextSibling ) { - if ( n.nodeType === 1 && n !== elem ) { - r.push( n ); - } - } - - return r; - } -}); - -// Implement the identical functionality for filter and not -function winnow( elements, qualifier, keep ) { - if ( jQuery.isFunction( qualifier ) ) { - return jQuery.grep(elements, function( elem, i ) { - var retVal = !!qualifier.call( elem, i, elem ); - return retVal === keep; - }); - - } else if ( qualifier.nodeType ) { - return jQuery.grep(elements, function( elem, i ) { - return (elem === qualifier) === keep; - }); - - } else if ( typeof qualifier === "string" ) { - var filtered = jQuery.grep(elements, function( elem ) { - return elem.nodeType === 1; - }); - - if ( isSimple.test( qualifier ) ) { - return jQuery.filter(qualifier, filtered, !keep); - } else { - qualifier = jQuery.filter( qualifier, filtered ); - } - } - - return jQuery.grep(elements, function( elem, i ) { - return (jQuery.inArray( elem, qualifier ) >= 0) === keep; - }); -} - - - - -var rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g, - rleadingWhitespace = /^\s+/, - rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig, - rtagName = /<([\w:]+)/, - rtbody = /\s]+\/)>/g, - wrapMap = { - option: [ 1, "" ], - legend: [ 1, "
", "
" ], - thead: [ 1, "", "
" ], - tr: [ 2, "", "
" ], - td: [ 3, "", "
" ], - col: [ 2, "", "
" ], - area: [ 1, "", "" ], - _default: [ 0, "", "" ] - }; - -wrapMap.optgroup = wrapMap.option; -wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; -wrapMap.th = wrapMap.td; - -// IE can't serialize and ' ); - - iframe_doc.close(); - - // Update the Iframe's hash, for great justice. - iframe.location.hash = hash; - } - }; - - })(); - // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - // ^^^^^^^^^^^^^^^^^^^ REMOVE IF NOT SUPPORTING IE6/7/8 ^^^^^^^^^^^^^^^^^^^ - // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - return self; - })(); - -})(jQuery,this); - - -/*! - * jQuery Mobile v@VERSION - * http://jquerymobile.com/ - * - * Copyright 2010, jQuery Project - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - */ - -(function( $, window, undefined ) { - - //jQuery.mobile configurable options - $.extend( $.mobile, { - - //define the url parameter used for referencing widget-generated sub-pages. - //Translates to to example.html&ui-page=subpageIdentifier - //hash segment before &ui-page= is used to make Ajax request - subPageUrlKey: 'ui-page', - - //anchor links with a data-rel, or pages with a data-role, that match these selectors will be untrackable in history - //(no change in URL, not bookmarkable) - nonHistorySelectors: 'dialog', - - //class assigned to page currently in view, and during transitions - activePageClass: 'ui-page-active', - - //class used for "active" button state, from CSS framework - activeBtnClass: 'ui-btn-active', - - //automatically handle link clicks through Ajax, when possible - ajaxLinksEnabled: true, - - //automatically handle form submissions through Ajax, when possible - ajaxFormsEnabled: true, - - //set default transition - 'none' for no transitions - defaultTransition: 'slide', - - //show loading message during Ajax requests - //if false, message will not appear, but loading classes will still be toggled on html el - loadingMessage: "loading", - - //configure meta viewport tag's content attr: - metaViewportContent: "width=device-width, minimum-scale=1, maximum-scale=1", - - //support conditions that must be met in order to proceed - gradeA: function(){ - return $.support.mediaquery; - } - }); - - -//trigger mobileinit event - useful hook for configuring $.mobile settings before they're used - $( window.document ).trigger('mobileinit'); - - -//support conditions - //if device support condition(s) aren't met, leave things as they are -> a basic, usable experience, - //otherwise, proceed with the enhancements - if ( !$.mobile.gradeA() ) { - return; - } - - -//define vars for interal use - var $window = $(window), - $html = $('html'), - $head = $('head'), - - //loading div which appears during Ajax requests - //will not appear if $.mobile.loadingMessage is false - $loader = $.mobile.loadingMessage ? - $('
'+ - ''+ - '

'+ $.mobile.loadingMessage +'

'+ - '
') - : undefined; - - -//add mobile, initial load "rendering" classes to docEl - $html.addClass('ui-mobile ui-mobile-rendering'); - - -//define & prepend meta viewport tag, if content is defined - $.mobile.metaViewportContent ? $("", { name: "viewport", content: $.mobile.metaViewportContent}).prependTo( $head ) : undefined; - - -//expose some core utilities - $.extend($.mobile, { - - // turn on/off page loading message. - pageLoading: function ( done ) { - if ( done ) { - $html.removeClass( "ui-loading" ); - } else { - if( $.mobile.loadingMessage ){ - $loader.appendTo($.mobile.pageContainer).css({top: $(window).scrollTop() + 75}); - } - $html.addClass( "ui-loading" ); - } - }, - - //scroll page vertically: scroll to 0 to hide iOS address bar, or pass a Y value - silentScroll: function( ypos ) { - // prevent scrollstart and scrollstop events - $.event.special.scrollstart.enabled = false; - setTimeout(function() { - window.scrollTo( 0, ypos || 0 ); - },20); - setTimeout(function() { - $.event.special.scrollstart.enabled = true; - }, 150 ); - } - }); - - -//dom-ready inits - $(function(){ - - //find present pages - var $pages = $("[data-role='page']"); - - //set up active page - $.mobile.startPage = $.mobile.activePage = $pages.first(); - - //set page container - $.mobile.pageContainer = $.mobile.startPage.parent().addClass('ui-mobile-viewport'); - - //cue page loading message - $.mobile.pageLoading(); - - //initialize all pages present - $pages.page(); - - //trigger a new hashchange, hash or not - $window.trigger( "hashchange", [ true ] ); - - //remove rendering class - $html.removeClass('ui-mobile-rendering'); - }); - - -//window load event - //hide iOS browser chrome on load - $window.load( $.mobile.silentScroll ); - -})( jQuery, this ); - - -/* -* jQuery Mobile Framework : core utilities for auto ajax navigation, base tag mgmt, -* Copyright (c) jQuery Project -* Dual licensed under the MIT or GPL Version 2 licenses. -* http://jquery.org/license -*/ -(function($, undefined ) { - - //define vars for interal use - var $window = $(window), - $html = $('html'), - $head = $('head'), - - //url path helpers for use in relative url management - path = { - - //get path from current hash, or from a file path - get: function( newPath ){ - if( newPath == undefined ){ - newPath = location.hash; - } - newPath = newPath.replace(/#/,'').split('/'); - newPath.pop(); - return newPath.join('/') + (newPath.length ? '/' : ''); - }, - - //return the substring of a filepath before the sub-page key, for making a server request - getFilePath: function( path ){ - var splitkey = '&' + $.mobile.subPageUrlKey; - return path.indexOf( splitkey ) > -1 ? path.split( splitkey )[0] : path; - }, - - set: function( path, disableListening){ - if(disableListening) { hashListener = false; } - location.hash = path; - }, - - //location pathname from intial directory request - origin: null, - - setOrigin: function(){ - path.origin = path.get( location.protocol + '//' + location.host + location.pathname ); - } - }, - - //base element management, defined depending on dynamic base tag support - base = $.support.dynamicBaseTag ? { - - //define base element, for use in routing asset urls that are referenced in Ajax-requested markup - element: $("", { href: path.origin }).prependTo( $head ), - - //set the generated BASE element's href attribute to a new page's base path - set: function( href ){ - base.element.attr('href', path.origin + path.get( href )); - }, - - //set the generated BASE element's href attribute to a new page's base path - reset: function(){ - base.element.attr('href', path.origin ); - } - - } : undefined, - - - //will be defined when a link is clicked and given an active class - $activeClickedLink = null, - - //array of pages that are visited during a single page load - //length will grow as pages are visited, and shrink as "back" link/button is clicked - //each item has a url (string matches ID), and transition (saved for reuse when "back" link/button is clicked) - urlStack = [ { - url: location.hash.replace( /^#/, "" ), - transition: undefined - } ], - - //define first selector to receive focus when a page is shown - focusable = "[tabindex],a,button:visible,select:visible,input", - - //contains role for next page, if defined on clicked link via data-rel - nextPageRole = null, - - //enable/disable hashchange event listener - //toggled internally when location.hash is updated to match the url of a successful page load - hashListener = true; - - //set location pathname from intial directory request - path.setOrigin(); - - -/* - internal utility functions ---------------------------------------*/ - - - //direct focus to the page title, or otherwise first focusable element - function reFocus( page ){ - var pageTitle = page.find( ".ui-title:eq(0)" ); - if( pageTitle.length ){ - pageTitle.focus(); - } - else{ - page.find( focusable ).eq(0).focus(); - } - }; - - //remove active classes after page transition or error - function removeActiveLinkClass( forceRemoval ){ - if( !!$activeClickedLink && (!$activeClickedLink.closest( '.ui-page-active' ).length || forceRemoval )){ - $activeClickedLink.removeClass( $.mobile.activeBtnClass ); - } - $activeClickedLink = null; - }; - - - //animation complete callback - $.fn.animationComplete = function( callback ){ - if($.support.cssTransitions){ - return $(this).one('webkitAnimationEnd', callback); - } - else{ - callback(); - } - }; - - - -/* exposed $.mobile methods */ - - //update location.hash, with or without triggering hashchange event - $.mobile.updateHash = path.set; - - //url stack, useful when plugins need to be aware of previous pages viewed - $.mobile.urlStack = urlStack; - - // changepage function - $.mobile.changePage = function( to, transition, back, changeHash){ - - //from is always the currently viewed page - var toIsArray = $.type(to) === "array", - from = toIsArray ? to[0] : $.mobile.activePage, - to = toIsArray ? to[1] : to, - url = fileUrl = $.type(to) === "string" ? to.replace( /^#/, "" ) : null, - data = undefined, - type = 'get', - isFormRequest = false, - duplicateCachedPage = null, - back = (back !== undefined) ? back : ( urlStack.length > 1 && urlStack[ urlStack.length - 2 ].url === url ), - transition = (transition !== undefined) ? transition : $.mobile.defaultTransition; - - if( $.type(to) === "object" && to.url ){ - url = to.url, - data = to.data, - type = to.type, - isFormRequest = true; - //make get requests bookmarkable - if( data && type == 'get' ){ - url += "?" + data; - data = undefined; - } - } - - //reset base to pathname for new request - if(base){ base.reset(); } - - // if the new href is the same as the previous one - if ( back ) { - var pop = urlStack.pop(); - if( pop ){ - transition = pop.transition; - } - } else { - urlStack.push({ url: url, transition: transition }); - } - - //function for transitioning between two existing pages - function transitionPages() { - - //kill the keyboard - $( window.document.activeElement ).blur(); - - //get current scroll distance - var currScroll = $window.scrollTop(); - - //set as data for returning to that spot - from.data('lastScroll', currScroll); - - //trigger before show/hide events - from.data("page")._trigger("beforehide", {nextPage: to}); - to.data("page")._trigger("beforeshow", {prevPage: from}); - - function loadComplete(){ - $.mobile.pageLoading( true ); - //trigger show/hide events, allow preventing focus change through return false - if( from.data("page")._trigger("hide", null, {nextPage: to}) !== false && to.data("page")._trigger("show", null, {prevPage: from}) !== false ){ - $.mobile.activePage = to; - } - reFocus( to ); - if( changeHash !== false && url ){ - path.set(url, true); - } - removeActiveLinkClass(); - - //if there's a duplicateCachedPage, remove it from the DOM now that it's hidden - if( duplicateCachedPage != null ){ - duplicateCachedPage.remove(); - } - - //jump to top or prev scroll, if set - $.mobile.silentScroll( to.data( 'lastScroll' ) ); - }; - - if(transition && (transition !== 'none')){ - $.mobile.pageContainer.addClass('ui-mobile-viewport-transitioning'); - // animate in / out - from.addClass( transition + " out " + ( back ? "reverse" : "" ) ); - to.addClass( $.mobile.activePageClass + " " + transition + - " in " + ( back ? "reverse" : "" ) ); - - // callback - remove classes, etc - to.animationComplete(function() { - from.add( to ).removeClass("out in reverse " + transition ); - from.removeClass( $.mobile.activePageClass ); - loadComplete(); - $.mobile.pageContainer.removeClass('ui-mobile-viewport-transitioning'); - }); - } - else{ - from.removeClass( $.mobile.activePageClass ); - to.addClass( $.mobile.activePageClass ); - loadComplete(); - } - }; - - //shared page enhancements - function enhancePage(){ - - //set next page role, if defined - if ( nextPageRole ) { - to.attr( "data-role", nextPageRole ); - nextPageRole = undefined; - } - - //run page plugin - to.page(); - }; - - //if url is a string - if( url ){ - to = $( "[id='" + url + "']" ), - fileUrl = path.getFilePath(url); - } - else{ //find base url of element, if avail - var toID = to.attr('id'), - toIDfileurl = path.getFilePath(toID); - - if(toID != toIDfileurl){ - fileUrl = toIDfileurl; - } - } - - // find the "to" page, either locally existing in the dom or by creating it through ajax - if ( to.length && !isFormRequest ) { - if( fileUrl && base ){ - base.set( fileUrl ); - } - enhancePage(); - transitionPages(); - } else { - - //if to exists in DOM, save a reference to it in duplicateCachedPage for removal after page change - if( to.length ){ - duplicateCachedPage = to; - } - - $.mobile.pageLoading(); - - $.ajax({ - url: fileUrl, - type: type, - data: data, - success: function( html ) { - - if(base){ base.set(fileUrl); } - - var all = $("
"); - //workaround to allow scripts to execute when included in page divs - all.get(0).innerHTML = html; - to = all.find('[data-role="page"]'); - - //rewrite src and href attrs to use a base url - if( !$.support.dynamicBaseTag ){ - var newPath = path.get( fileUrl ); - to.find('[src],link[href]').each(function(){ - var thisAttr = $(this).is('[href]') ? 'href' : 'src', - thisUrl = $(this).attr(thisAttr); - - //if full path exists and is same, chop it - helps IE out - thisUrl.replace( location.protocol + '//' + location.host + location.pathname, '' ); - - if( !/^(\w+:|#|\/)/.test(thisUrl) ){ - $(this).attr(thisAttr, newPath + thisUrl); - } - }); - } - - //preserve ID on a retrieved page - if ( to.attr('id') ) { - //wrap page and transfer data-attrs if it has an ID - var copyAttrs = ['data-role', 'data-theme', 'data-fullscreen'], //TODO: more page-level attrs? - wrapper = to.wrap( "
" ).parent(); - - $.each(copyAttrs,function(i){ - if( to.attr( copyAttrs[ i ] ) ){ - wrapper.attr( copyAttrs[ i ], to.attr( copyAttrs[ i ] ) ); - to.removeAttr( copyAttrs[ i ] ); - } - }); - to = wrapper; - } - - to - .attr( "id", fileUrl ) - .appendTo( $.mobile.pageContainer ); - - enhancePage(); - transitionPages(); - }, - error: function() { - $.mobile.pageLoading( true ); - removeActiveLinkClass(true); - $("

Error Loading Page

") - .css({ "display": "block", "opacity": 0.96, "top": $(window).scrollTop() + 100 }) - .appendTo( $.mobile.pageContainer ) - .delay( 800 ) - .fadeOut( 400, function(){ - $(this).remove(); - }); - } - }); - } - - }; - - - - -/* Event Bindings - hashchange, submit, and click */ - - //bind to form submit events, handle with Ajax - $('form').live('submit', function(event){ - if( !$.mobile.ajaxFormsEnabled ){ return; } - - var type = $(this).attr("method"), - url = $(this).attr( "action" ).replace( location.protocol + "//" + location.host, ""); - - //external submits use regular HTTP - if( /^(:?\w+:)/.test( url ) ){ - return; - } - - //if it's a relative href, prefix href with base url - if( url.indexOf('/') && url.indexOf('#') !== 0 ){ - url = path.get() + url; - } - - $.mobile.changePage({ - url: url, - type: type, - data: $(this).serialize() - }, - undefined, - undefined, - true - ); - event.preventDefault(); - }); - - - //click routing - direct to HTTP or Ajax, accordingly - $( "a" ).live( "click", function(event) { - if( !$.mobile.ajaxLinksEnabled ){ return; } - var $this = $(this), - //get href, remove same-domain protocol and host - href = $this.attr( "href" ).replace( location.protocol + "//" + location.host, ""), - //if target attr is specified, it's external, and we mimic _blank... for now - target = $this.is( "[target]" ), - //if it still starts with a protocol, it's external, or could be :mailto, etc - external = target || /^(:?\w+:)/.test( href ) || $this.is( "[rel=external]" ), - target = $this.is( "[target]" ); - - if( href === '#' ){ - //for links created purely for interaction - ignore - return false; - } - - $activeClickedLink = $this.closest( ".ui-btn" ).addClass( $.mobile.activeBtnClass ); - - if( external || !$.mobile.ajaxLinksEnabled ){ - //remove active link class if external - removeActiveLinkClass(true); - - //deliberately redirect, in case click was triggered - if( target ){ - window.open(href); - } - else{ - location.href = href; - } - } - else { - //use ajax - var transition = $this.data( "transition" ), - back = $this.data( "back" ), - changeHashOnSuccess = !$this.is( "[data-rel="+ $.mobile.nonHistorySelectors +"]" ); - - nextPageRole = $this.attr( "data-rel" ); - - //if it's a relative href, prefix href with base url - if( href.indexOf('/') && href.indexOf('#') !== 0 ){ - href = path.get() + href; - } - - href.replace(/^#/,''); - - $.mobile.changePage(href, transition, back, changeHashOnSuccess); - } - event.preventDefault(); - }); - - - - //hashchange event handler - $window.bind( "hashchange", function(e, triggered) { - if( !hashListener ){ - hashListener = true; - return; - } - - if( $(".ui-page-active").is("[data-role=" + $.mobile.nonHistorySelectors + "]") ){ - return; - } - - var to = location.hash, - transition = triggered ? false : undefined; - - //if to is defined, use it - if ( to ){ - $.mobile.changePage( to, transition); - } - //there's no hash, the active page is not the start page, and it's not manually triggered hashchange - //we probably backed out to the first page visited - else if( $.mobile.activePage.length && $.mobile.startPage[0] !== $.mobile.activePage[0] && !triggered ) { - $.mobile.changePage( $.mobile.startPage, transition, true ); - } - //probably the first page - show it - else{ - $.mobile.startPage.trigger("pagebeforeshow", {prevPage: $('')}); - $.mobile.startPage.addClass( $.mobile.activePageClass ); - $.mobile.pageLoading( true ); - - if( $.mobile.startPage.trigger("pageshow", {prevPage: $('')}) !== false ){ - reFocus($.mobile.startPage); - } - } - }); -})( jQuery ); - -/* -* jQuery Mobile Framework : "page" plugin -* Copyright (c) jQuery Project -* Dual licensed under the MIT or GPL Version 2 licenses. -* http://jquery.org/license -*/ -(function($, undefined ) { - -$.widget( "mobile.page", $.mobile.widget, { - options: { - backBtnText: "Back", - addBackBtn: true, - degradeInputs: { - color: false, - date: false, - datetime: false, - "datetime-local": false, - email: false, - month: false, - number: false, - range: "number", - search: true, - tel: false, - time: false, - url: false, - week: false - } - }, - - _create: function() { - var $elem = this.element, - o = this.options; - - if ( this._trigger( "beforeCreate" ) === false ) { - return; - } - - //some of the form elements currently rely on the presence of ui-page and ui-content - // classes so we'll handle page and content roles outside of the main role processing - // loop below. - $elem.find( "[data-role='page'], [data-role='content']" ).andSelf().each(function() { - $(this).addClass( "ui-" + $(this).data( "role" ) ); - }); - - $elem.find( "[data-role='nojs']" ).addClass( "ui-nojs" ); - - this._enchanceControls(); - - // pre-find data els - var $dataEls = $elem.find( "[data-role]" ).andSelf().each(function() { - var $this = $( this ), - role = $this.data( "role" ), - theme = $this.data( "theme" ); - - //apply theming and markup modifications to page,header,content,footer - if ( role === "header" || role === "footer" ) { - $this.addClass( "ui-bar-" + (theme || $this.parent('[data-role=page]').data( "theme" ) || "a") ); - - // add ARIA role - $this.attr( "role", role === "header" ? "banner" : "contentinfo" ); - - //right,left buttons - var $headeranchors = $this.children( "a" ), - leftbtn = $headeranchors.hasClass( "ui-btn-left" ), - rightbtn = $headeranchors.hasClass( "ui-btn-right" ); - - if ( !leftbtn ) { - leftbtn = $headeranchors.eq( 0 ).not( ".ui-btn-right" ).addClass( "ui-btn-left" ).length; - } - - if ( !rightbtn ) { - rightbtn = $headeranchors.eq( 1 ).addClass( "ui-btn-right" ).length; - } - - // auto-add back btn on pages beyond first view - if ( o.addBackBtn && role === "header" && - ($.mobile.urlStack.length > 1 || $(".ui-page").length > 1) && - !leftbtn && !$this.data( "noBackBtn" ) ) { - - $( ""+ o.backBtnText +"" ) - .click(function() { - history.back(); - return false; - }) - .prependTo( $this ); - } - - //page title - $this.children( "h1, h2, h3, h4, h5, h6" ) - .addClass( "ui-title" ) - //regardless of h element number in src, it becomes h1 for the enhanced page - .attr({ "tabindex": "0", "role": "heading", "aria-level": "1" }); - - } else if ( role === "content" ) { - if ( theme ) { - $this.addClass( "ui-body-" + theme ); - } - - // add ARIA role - $this.attr( "role", "main" ); - - } else if ( role === "page" ) { - $this.addClass( "ui-body-" + (theme || "c") ); - } - - switch(role) { - case "header": - case "footer": - case "page": - case "content": - $this.addClass( "ui-" + role ); - break; - case "collapsible": - case "fieldcontain": - case "navbar": - case "listview": - case "dialog": - $this[ role ](); - break; - } - }); - - //links in bars, or those with data-role become buttons - $elem.find( "[data-role='button'], .ui-bar a, .ui-header a, .ui-footer a" ) - .not( ".ui-btn" ) - .buttonMarkup(); - - $elem - .find("[data-role='controlgroup']") - .controlgroup(); - - //links within content areas - $elem.find( "a:not(.ui-btn):not(.ui-link-inherit)" ) - .addClass( "ui-link" ); - - //fix toolbars - $elem.fixHeaderFooter(); - }, - - _enchanceControls: function() { - var o = this.options; - // degrade inputs to avoid poorly implemented native functionality - this.element.find( "input" ).each(function() { - var type = this.getAttribute( "type" ), - optType = o.degradeInputs[ type ] || "text"; - - if ( o.degradeInputs[ type ] ) { - $( this ).replaceWith( - $( "
" ).html( $(this).clone() ).html() - .replace( /type="([a-zA-Z]+)"/, "type="+ optType +" data-type='$1'" ) ); - } - }); - - // enchance form controls - this.element - .find( "[type='radio'], [type='checkbox']" ) - .checkboxradio(); - - this.element - .find( "button, [type='button'], [type='submit'], [type='reset'], [type='image']" ) - .not( ".ui-nojs" ) - .button(); - - this.element - .find( "input, textarea" ) - .not( "[type='radio'], [type='checkbox'], button, [type='button'], [type='submit'], [type='reset'], [type='image']" ) - .textinput(); - - this.element - .find( "input, select" ) - .filter( "[data-role='slider'], [data-type='range']" ) - .slider(); - - this.element - .find( "select:not([data-role='slider'])" ) - .selectmenu(); - } -}); - -})( jQuery ); - - -/* - * jQuery UI Position @VERSION - * - * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Position - */ -(function( $, undefined ) { - -$.ui = $.ui || {}; - -var horizontalPositions = /left|center|right/, - verticalPositions = /top|center|bottom/, - center = "center", - _position = $.fn.position, - _offset = $.fn.offset; - -$.fn.position = function( options ) { - if ( !options || !options.of ) { - return _position.apply( this, arguments ); - } - - // make a copy, we don't want to modify arguments - options = $.extend( {}, options ); - - var target = $( options.of ), - targetElem = target[0], - collision = ( options.collision || "flip" ).split( " " ), - offset = options.offset ? options.offset.split( " " ) : [ 0, 0 ], - targetWidth, - targetHeight, - basePosition; - - if ( targetElem.nodeType === 9 ) { - targetWidth = target.width(); - targetHeight = target.height(); - basePosition = { top: 0, left: 0 }; - // TODO: use $.isWindow() in 1.9 - } else if ( targetElem.setTimeout ) { - targetWidth = target.width(); - targetHeight = target.height(); - basePosition = { top: target.scrollTop(), left: target.scrollLeft() }; - } else if ( targetElem.preventDefault ) { - // force left top to allow flipping - options.at = "left top"; - targetWidth = targetHeight = 0; - basePosition = { top: options.of.pageY, left: options.of.pageX }; - } else { - targetWidth = target.outerWidth(); - targetHeight = target.outerHeight(); - basePosition = target.offset(); - } - - // force my and at to have valid horizontal and veritcal positions - // if a value is missing or invalid, it will be converted to center - $.each( [ "my", "at" ], function() { - var pos = ( options[this] || "" ).split( " " ); - if ( pos.length === 1) { - pos = horizontalPositions.test( pos[0] ) ? - pos.concat( [center] ) : - verticalPositions.test( pos[0] ) ? - [ center ].concat( pos ) : - [ center, center ]; - } - pos[ 0 ] = horizontalPositions.test( pos[0] ) ? pos[ 0 ] : center; - pos[ 1 ] = verticalPositions.test( pos[1] ) ? pos[ 1 ] : center; - options[ this ] = pos; - }); - - // normalize collision option - if ( collision.length === 1 ) { - collision[ 1 ] = collision[ 0 ]; - } - - // normalize offset option - offset[ 0 ] = parseInt( offset[0], 10 ) || 0; - if ( offset.length === 1 ) { - offset[ 1 ] = offset[ 0 ]; - } - offset[ 1 ] = parseInt( offset[1], 10 ) || 0; - - if ( options.at[0] === "right" ) { - basePosition.left += targetWidth; - } else if (options.at[0] === center ) { - basePosition.left += targetWidth / 2; - } - - if ( options.at[1] === "bottom" ) { - basePosition.top += targetHeight; - } else if ( options.at[1] === center ) { - basePosition.top += targetHeight / 2; - } - - basePosition.left += offset[ 0 ]; - basePosition.top += offset[ 1 ]; - - return this.each(function() { - var elem = $( this ), - elemWidth = elem.outerWidth(), - elemHeight = elem.outerHeight(), - marginLeft = parseInt( $.curCSS( this, "marginLeft", true ) ) || 0, - marginTop = parseInt( $.curCSS( this, "marginTop", true ) ) || 0, - collisionWidth = elemWidth + marginLeft + - parseInt( $.curCSS( this, "marginRight", true ) ) || 0, - collisionHeight = elemHeight + marginTop + - parseInt( $.curCSS( this, "marginBottom", true ) ) || 0, - position = $.extend( {}, basePosition ), - collisionPosition; - - if ( options.my[0] === "right" ) { - position.left -= elemWidth; - } else if ( options.my[0] === center ) { - position.left -= elemWidth / 2; - } - - if ( options.my[1] === "bottom" ) { - position.top -= elemHeight; - } else if ( options.my[1] === center ) { - position.top -= elemHeight / 2; - } - - // prevent fractions (see #5280) - position.left = parseInt( position.left ); - position.top = parseInt( position.top ); - - collisionPosition = { - left: position.left - marginLeft, - top: position.top - marginTop - }; - - $.each( [ "left", "top" ], function( i, dir ) { - if ( $.ui.position[ collision[i] ] ) { - $.ui.position[ collision[i] ][ dir ]( position, { - targetWidth: targetWidth, - targetHeight: targetHeight, - elemWidth: elemWidth, - elemHeight: elemHeight, - collisionPosition: collisionPosition, - collisionWidth: collisionWidth, - collisionHeight: collisionHeight, - offset: offset, - my: options.my, - at: options.at - }); - } - }); - - if ( $.fn.bgiframe ) { - elem.bgiframe(); - } - elem.offset( $.extend( position, { using: options.using } ) ); - }); -}; - -$.ui.position = { - fit: { - left: function( position, data ) { - var win = $( window ), - over = data.collisionPosition.left + data.collisionWidth - win.width() - win.scrollLeft(); - position.left = over > 0 ? position.left - over : Math.max( position.left - data.collisionPosition.left, position.left ); - }, - top: function( position, data ) { - var win = $( window ), - over = data.collisionPosition.top + data.collisionHeight - win.height() - win.scrollTop(); - position.top = over > 0 ? position.top - over : Math.max( position.top - data.collisionPosition.top, position.top ); - } - }, - - flip: { - left: function( position, data ) { - if ( data.at[0] === center ) { - return; - } - var win = $( window ), - over = data.collisionPosition.left + data.collisionWidth - win.width() - win.scrollLeft(), - myOffset = data.my[ 0 ] === "left" ? - -data.elemWidth : - data.my[ 0 ] === "right" ? - data.elemWidth : - 0, - atOffset = data.at[ 0 ] === "left" ? - data.targetWidth : - -data.targetWidth, - offset = -2 * data.offset[ 0 ]; - position.left += data.collisionPosition.left < 0 ? - myOffset + atOffset + offset : - over > 0 ? - myOffset + atOffset + offset : - 0; - }, - top: function( position, data ) { - if ( data.at[1] === center ) { - return; - } - var win = $( window ), - over = data.collisionPosition.top + data.collisionHeight - win.height() - win.scrollTop(), - myOffset = data.my[ 1 ] === "top" ? - -data.elemHeight : - data.my[ 1 ] === "bottom" ? - data.elemHeight : - 0, - atOffset = data.at[ 1 ] === "top" ? - data.targetHeight : - -data.targetHeight, - offset = -2 * data.offset[ 1 ]; - position.top += data.collisionPosition.top < 0 ? - myOffset + atOffset + offset : - over > 0 ? - myOffset + atOffset + offset : - 0; - } - } -}; - -// offset setter from jQuery 1.4 -if ( !$.offset.setOffset ) { - $.offset.setOffset = function( elem, options ) { - // set position first, in-case top/left are set even on static elem - if ( /static/.test( $.curCSS( elem, "position" ) ) ) { - elem.style.position = "relative"; - } - var curElem = $( elem ), - curOffset = curElem.offset(), - curTop = parseInt( $.curCSS( elem, "top", true ), 10 ) || 0, - curLeft = parseInt( $.curCSS( elem, "left", true ), 10) || 0, - props = { - top: (options.top - curOffset.top) + curTop, - left: (options.left - curOffset.left) + curLeft - }; - - if ( 'using' in options ) { - options.using.call( elem, props ); - } else { - curElem.css( props ); - } - }; - - $.fn.offset = function( options ) { - var elem = this[ 0 ]; - if ( !elem || !elem.ownerDocument ) { return null; } - if ( options ) { - return this.each(function() { - $.offset.setOffset( this, options ); - }); - } - return _offset.call( this ); - }; -} - -}( jQuery )); - -/* -* jQuery Mobile Framework : "fixHeaderFooter" plugin - on-demand positioning for headers,footers -* Copyright (c) jQuery Project -* Dual licensed under the MIT or GPL Version 2 licenses. -* http://jquery.org/license -*/ -(function($, undefined ) { -$.fn.fixHeaderFooter = function(options){ - if( !$.support.scrollTop ){ return $(this); } - return $(this).each(function(){ - if( $(this).data('fullscreen') ){ $(this).addClass('ui-page-fullscreen'); } - $(this).find('.ui-header[data-position="fixed"]').addClass('ui-header-fixed ui-fixed-inline fade'); //should be slidedown - $(this).find('.ui-footer[data-position="fixed"]').addClass('ui-footer-fixed ui-fixed-inline fade'); //should be slideup - }); -}; - -//single controller for all showing,hiding,toggling -$.fixedToolbars = (function(){ - if( !$.support.scrollTop ){ return; } - var currentstate = 'inline', - delayTimer, - ignoreTargets = 'a,input,textarea,select,button,label,.ui-header-fixed,.ui-footer-fixed', - toolbarSelector = '.ui-header-fixed:first, .ui-footer-fixed:not(.ui-footer-duplicate):last', - stickyFooter, //for storing quick references to duplicate footers - supportTouch = $.support.touch, - touchStartEvent = supportTouch ? "touchstart" : "mousedown", - touchStopEvent = supportTouch ? "touchend" : "mouseup", - stateBefore = null, - scrollTriggered = false; - - $(function() { - $(document) - .bind(touchStartEvent,function(event){ - if( $(event.target).closest(ignoreTargets).length ){ return; } - stateBefore = currentstate; - $.fixedToolbars.hide(true); - }) - .bind('scrollstart',function(event){ - if( $(event.target).closest(ignoreTargets).length ){ return; } //because it could be a touchmove... - scrollTriggered = true; - if(stateBefore == null){ stateBefore = currentstate; } - $.fixedToolbars.hide(true); - }) - .bind(touchStopEvent,function(event){ - if( $(event.target).closest(ignoreTargets).length ){ return; } - if( !scrollTriggered ){ - $.fixedToolbars.toggle(stateBefore); - stateBefore = null; - } - }) - .bind('scrollstop',function(event){ - if( $(event.target).closest(ignoreTargets).length ){ return; } - scrollTriggered = false; - $.fixedToolbars.toggle( stateBefore == 'overlay' ? 'inline' : 'overlay' ); - stateBefore = null; - }); - - //function to return another footer already in the dom with the same data-id - function findStickyFooter(el){ - var thisFooter = el.find('[data-role="footer"]'); - return $( '.ui-footer[data-id="'+ thisFooter.data('id') +'"]:not(.ui-footer-duplicate)' ).not(thisFooter); - } - - //before page is shown, check for duplicate footer - $('.ui-page').live('pagebeforeshow', function(event, ui){ - stickyFooter = findStickyFooter( $(event.target) ); - if( stickyFooter.length ){ - //if the existing footer is the first of its kind, create a placeholder before stealing it - if( stickyFooter.parents('.ui-page:eq(0)').find('.ui-footer[data-id="'+ stickyFooter.data('id') +'"]').length == 1 ){ - stickyFooter.before( stickyFooter.clone().addClass('ui-footer-duplicate') ); - } - $(event.target).find('[data-role="footer"]').addClass('ui-footer-duplicate'); - stickyFooter.appendTo($.pageContainer).css('top',0); - setTop(stickyFooter); - } - }); - - //after page is shown, append footer to new page - $('.ui-page').live('pageshow', function(event, ui){ - if( stickyFooter && stickyFooter.length ){ - stickyFooter.appendTo(event.target).css('top',0); - } - $.fixedToolbars.show(true, this); - }); - - }); - - // element.getBoundingClientRect() is broken in iOS 3.2.1 on the iPad. The - // coordinates inside of the rect it returns don't have the page scroll position - // factored out of it like the other platforms do. To get around this, - // we'll just calculate the top offset the old fashioned way until core has - // a chance to figure out how to handle this situation. - // - // TODO: We'll need to get rid of getOffsetTop() once a fix gets folded into core. - - function getOffsetTop(ele) - { - var top = 0; - if (ele) - { - var op = ele.offsetParent, body = document.body; - top = ele.offsetTop; - while (ele && ele != body) - { - top += ele.scrollTop || 0; - if (ele == op) - { - top += op.offsetTop; - op = ele.offsetParent; - } - ele = ele.parentNode; - } - } - return top; - } - - function setTop(el){ - var fromTop = $(window).scrollTop(), - thisTop = getOffsetTop(el[0]), // el.offset().top returns the wrong value on iPad iOS 3.2.1, call our workaround instead. - thisCSStop = el.css('top') == 'auto' ? 0 : parseFloat(el.css('top')), - screenHeight = window.innerHeight, - thisHeight = el.outerHeight(), - useRelative = el.parents('.ui-page:not(.ui-page-fullscreen)').length, - relval; - if( el.is('.ui-header-fixed') ){ - relval = fromTop - thisTop + thisCSStop; - if( relval < thisTop){ relval = 0; } - return el.css('top', ( useRelative ) ? relval : fromTop); - } - else{ - //relval = -1 * (thisTop - (fromTop + screenHeight) + thisCSStop + thisHeight); - //if( relval > thisTop ){ relval = 0; } - relval = fromTop + screenHeight - thisHeight - (thisTop - thisCSStop); - return el.css('top', ( useRelative ) ? relval : fromTop + screenHeight - thisHeight ); - } - } - - //exposed methods - return { - show: function(immediately, page){ - currentstate = 'overlay'; - var $ap = page ? $(page) : ($.mobile.activePage ? $.mobile.activePage : $(".ui-page-active")); - return $ap.children( toolbarSelector ).each(function(){ - var el = $(this), - fromTop = $(window).scrollTop(), - thisTop = getOffsetTop(el[0]), // el.offset().top returns the wrong value on iPad iOS 3.2.1, call our workaround instead. - screenHeight = window.innerHeight, - thisHeight = el.outerHeight(), - alreadyVisible = (el.is('.ui-header-fixed') && fromTop <= thisTop + thisHeight) || (el.is('.ui-footer-fixed') && thisTop <= fromTop + screenHeight); - - //add state class - el.addClass('ui-fixed-overlay').removeClass('ui-fixed-inline'); - - if( !alreadyVisible && !immediately ){ - el.addClass('in').animationComplete(function(){ - el.removeClass('in'); - }); - } - setTop(el); - }); - }, - hide: function(immediately){ - currentstate = 'inline'; - var $ap = $.mobile.activePage ? $.mobile.activePage : $(".ui-page-active"); - return $ap.children( toolbarSelector ).each(function(){ - var el = $(this); - - var thisCSStop = el.css('top'); thisCSStop = thisCSStop == 'auto' ? 0 : parseFloat(thisCSStop); - - //add state class - el.addClass('ui-fixed-inline').removeClass('ui-fixed-overlay'); - - if (thisCSStop < 0 || (el.is('.ui-header-fixed') && thisCSStop != 0)) - { - if(immediately){ - el.css('top',0); - } - else{ - if( el.css('top') !== 'auto' && parseFloat(el.css('top')) !== 0 ){ - var classes = 'out reverse'; - el.addClass(classes).animationComplete(function(){ - el.removeClass(classes); - el.css('top',0); - }); - } - } - } - }); - }, - hideAfterDelay: function(){ - delayTimer = setTimeout(function(){ - $.fixedToolbars.hide(); - }, 3000); - }, - toggle: function(from){ - if(from){ currentstate = from; } - return (currentstate == 'overlay') ? $.fixedToolbars.hide() : $.fixedToolbars.show(); - } - }; -})(); - -})(jQuery); - -/* -* jQuery Mobile Framework : "checkboxradio" plugin -* Copyright (c) jQuery Project -* Dual licensed under the MIT or GPL Version 2 licenses. -* http://jquery.org/license -*/ -(function($, undefined ) { -$.widget( "mobile.checkboxradio", $.mobile.widget, { - options: { - theme: null - }, - _create: function(){ - var input = this.element, - label = $("label[for='" + input.attr( "id" ) + "']"), - inputtype = input.attr( "type" ), - checkedicon = "ui-icon-" + inputtype + "-on", - uncheckedicon = "ui-icon-" + inputtype + "-off"; - - if ( inputtype != "checkbox" && inputtype != "radio" ) { return; } - - label - .buttonMarkup({ - theme: this.options.theme, - icon: this.element.parents( "[data-type='horizontal']" ).length ? undefined : uncheckedicon, - shadow: false - }); - - // wrap the input + label in a div - input - .add( label ) - .wrapAll( "
" ); - - label.bind({ - mouseover: function() { - if( $(this).parent().is('.ui-disabled') ){ return false; } - }, - - mousedown: function() { - if( $(this).parent().is('.ui-disabled') ){ return false; } - label.data( "state", input.attr( "checked" ) ); - }, - - click: function() { - setTimeout(function() { - if ( input.attr( "checked" ) === label.data( "state" ) ) { - input.trigger( "click" ); - } - }, 1); - } - }); - - input - .bind({ - - click: function() { - $( "input[name='" + input.attr( "name" ) + "'][type='" + inputtype + "']" ).checkboxradio( "refresh" ); - }, - - focus: function() { - label.addClass( "ui-focus" ); - }, - - blur: function() { - label.removeClass( "ui-focus" ); - } - }); - - this.refresh(); - - }, - - refresh: function( ){ - var input = this.element, - label = $("label[for='" + input.attr( "id" ) + "']"), - inputtype = input.attr( "type" ), - icon = label.find( ".ui-icon" ), - checkedicon = "ui-icon-" + inputtype + "-on", - uncheckedicon = "ui-icon-" + inputtype + "-off"; - - if ( input[0].checked ) { - label.addClass( "ui-btn-active" ); - icon.addClass( checkedicon ); - icon.removeClass( uncheckedicon ); - - } else { - label.removeClass( "ui-btn-active" ); - icon.removeClass( checkedicon ); - icon.addClass( uncheckedicon ); - } - - if( input.is( ":disabled" ) ){ - this.disable(); - } - else { - this.enable(); - } - }, - - disable: function(){ - this.element.attr("disabled",true).parent().addClass("ui-disabled"); - }, - - enable: function(){ - this.element.attr("disabled",false).parent().removeClass("ui-disabled"); - } -}); -})( jQuery ); - - -/* -* jQuery Mobile Framework : "textinput" plugin for text inputs, textareas -* Copyright (c) jQuery Project -* Dual licensed under the MIT or GPL Version 2 licenses. -* http://jquery.org/license -*/ -(function($, undefined ) { -$.widget( "mobile.textinput", $.mobile.widget, { - options: { - theme: null - }, - _create: function(){ - var input = this.element, - o = this.options, - theme = o.theme, - themeclass; - - if ( !theme ) { - var themedParent = this.element.closest("[class*='ui-bar-'],[class*='ui-body-']"); - theme = themedParent.length ? - /ui-(bar|body)-([a-z])/.exec( themedParent.attr("class") )[2] : - "c"; - } - - themeclass = " ui-body-" + theme; - - $('label[for='+input.attr('id')+']').addClass('ui-input-text'); - - input.addClass('ui-input-text ui-body-'+ o.theme); - - var focusedEl = input; - - //"search" input widget - if( input.is('[type="search"],[data-type="search"]') ){ - focusedEl = input.wrap('').parent(); - var clearbtn = $('clear text') - .click(function(){ - input.val('').focus(); - input.trigger('change'); - clearbtn.addClass('ui-input-clear-hidden'); - return false; - }) - .appendTo(focusedEl) - .buttonMarkup({icon: 'delete', iconpos: 'notext', corners:true, shadow:true}); - - function toggleClear(){ - if(input.val() == ''){ - clearbtn.addClass('ui-input-clear-hidden'); - } - else{ - clearbtn.removeClass('ui-input-clear-hidden'); - } - } - - toggleClear(); - input.keyup(toggleClear); - } - else{ - input.addClass('ui-corner-all ui-shadow-inset' + themeclass); - } - - input - .focus(function(){ - focusedEl.addClass('ui-focus'); - }) - .blur(function(){ - focusedEl.removeClass('ui-focus'); - }); - - //autogrow - if ( input.is('textarea') ) { - var extraLineHeight = 15, - keyupTimeoutBuffer = 100, - keyup = function() { - var scrollHeight = input[0].scrollHeight, - clientHeight = input[0].clientHeight; - if ( clientHeight < scrollHeight ) { - input.css({ height: (scrollHeight + extraLineHeight) }); - } - }, - keyupTimeout; - input.keyup(function() { - clearTimeout( keyupTimeout ); - keyupTimeout = setTimeout( keyup, keyupTimeoutBuffer ); - }); - } - }, - - disable: function(){ - ( this.element.attr("disabled",true).is('[type="search"],[data-type="search"]') ? this.element.parent() : this.element ).addClass("ui-disabled"); - }, - - enable: function(){ - ( this.element.attr("disabled", false).is('[type="search"],[data-type="search"]') ? this.element.parent() : this.element ).removeClass("ui-disabled"); - } -}); -})( jQuery ); - - -/* -* jQuery Mobile Framework : "selectmenu" plugin -* Copyright (c) jQuery Project -* Dual licensed under the MIT or GPL Version 2 licenses. -* http://jquery.org/license -*/ -(function($, undefined ) { -$.widget( "mobile.selectmenu", $.mobile.widget, { - options: { - theme: null, - disabled: false, - icon: 'arrow-d', - iconpos: 'right', - inline: null, - corners: true, - shadow: true, - iconshadow: true, - menuPageTheme: 'b', - overlayTheme: 'a' - }, - _create: function(){ - - var self = this, - - o = this.options, - - select = this.element - .attr( "tabindex", "-1" ) - .wrap( "
" ), - - selectID = select.attr( "id" ), - - label = $( "label[for="+ selectID +"]" ).addClass( "ui-select" ), - - buttonId = selectID + "-button", - - menuId = selectID + "-menu", - - thisPage = select.closest( ".ui-page" ), - - button = $( "", { - "href": "#", - "role": "button", - "id": buttonId, - "aria-haspopup": "true", - "aria-owns": menuId - }) - .text( $( select[0].options.item(select[0].selectedIndex) ).text() ) - .insertBefore( select ) - .buttonMarkup({ - theme: o.theme, - icon: o.icon, - iconpos: o.iconpos, - inline: o.inline, - corners: o.corners, - shadow: o.shadow, - iconshadow: o.iconshadow - }), - - theme = /ui-btn-up-([a-z])/.exec( button.attr("class") )[1], - - menuPage = $( "
" + - "
" + - "
" + label.text() + "
"+ - "
"+ - "
"+ - "
" ) - .appendTo( $.mobile.pageContainer ) - .page(), - - menuPageContent = menuPage.find( ".ui-content" ), - - screen = $( "
", {"class": "ui-selectmenu-screen ui-screen-hidden"}) - .appendTo( thisPage ), - - listbox = $( "
", { "class": "ui-selectmenu ui-selectmenu-hidden ui-overlay-shadow ui-corner-all pop ui-body-" + o.overlayTheme } ) - .insertAfter(screen), - - list = $( "
    ", { - "class": "ui-selectmenu-list", - "id": menuId, - "role": "listbox", - "aria-labelledby": buttonId, - "data-theme": theme - }) - .appendTo( listbox ), - - menuType; - - //expose to other methods - $.extend(self, { - select: select, - selectID: selectID, - label: label, - buttonId:buttonId, - menuId:menuId, - thisPage:thisPage, - button:button, - menuPage:menuPage, - menuPageContent:menuPageContent, - screen:screen, - listbox:listbox, - list:list, - menuType:menuType - }); - - - //create list from select, update state - self.refresh(); - - //disable if specified - if( this.options.disabled ){ this.disable(); } - - //events on native select - select - .change(function(){ - self.refresh(); - }) - .focus(function(){ - $(this).blur(); - button.focus(); - }); - - //button events - button.bind( $.support.touch ? "touchstart" : "click", function(event){ - self.open(); - return false; - }); - - //events for list items - list.delegate("li",'click', function(){ - //update select - var newIndex = list.find( "li" ).index( this ), - prevIndex = select[0].selectedIndex; - - select[0].selectedIndex = newIndex; - - //trigger change event - if(newIndex !== prevIndex){ - select.trigger( "change" ); - } - - self.refresh(); - - //hide custom select - self.close(); - return false; - }); - - //events on "screen" overlay - screen.click(function(){ - self.close(); - return false; - }); - }, - - _buildList: function(){ - var self = this; - - self.list.empty().filter('.ui-listview').listview('destroy'); - - //populate menu with options from select element - self.select.find( "option" ).each(function( i ){ - var anchor = $("", { - "role": "option", - "href": "#" - }) - .text( $(this).text() ); - - $( "
  • ", {"data-icon": "checkbox-on"}) - .append( anchor ) - .appendTo( self.list ); - }); - - //now populated, create listview - self.list.listview(); - }, - - refresh: function( forceRebuild ){ - var self = this, - select = this.element, - selected = select[0].selectedIndex; - - if( forceRebuild || select[0].options.length > self.list.find('li').length ){ - self._buildList(); - } - - self.button.find( ".ui-btn-text" ).text( $(select[0].options.item(selected)).text() ); - self.list - .find('li').removeClass( $.mobile.activeBtnClass ).attr('aria-selected', false) - .eq(selected).addClass( $.mobile.activeBtnClass ).find('a').attr('aria-selected', true); - }, - - open: function(){ - if( this.options.disabled ){ return; } - - var self = this, - menuHeight = self.list.outerHeight(), - menuWidth = self.list.outerWidth(), - scrollTop = $(window).scrollTop(), - btnOffset = self.button.offset().top, - screenHeight = window.innerHeight, - screenWidth = window.innerWidth; - - //add active class to button - self.button.addClass( $.mobile.activeBtnClass ); - - function focusMenuItem(){ - self.list.find( ".ui-btn-active" ).focus(); - } - - if( menuHeight > screenHeight - 80 || !$.support.scrollTop ){ - - //for webos (set lastscroll using button offset) - if( scrollTop == 0 && btnOffset > screenHeight ){ - self.thisPage.one('pagehide',function(){ - $(this).data('lastScroll', btnOffset); - }); - } - - self.menuPage.one('pageshow',focusMenuItem); - - self.menuType = "page"; - self.menuPageContent.append( self.list ); - $.mobile.changePage(self.menuPage, 'pop', false, false); - } - else { - self.menuType = "overlay"; - - self.screen - .height( $(document).height() ) - .removeClass('ui-screen-hidden'); - - self.listbox - .append( self.list ) - .removeClass( "ui-selectmenu-hidden" ) - .position({ - my: "center center", - at: "center center", - of: self.button, - collision: "fit" - }) - .addClass("in"); - - focusMenuItem(); - } - }, - - close: function(){ - if( this.options.disabled ){ return; } - var self = this; - - function focusButton(){ - setTimeout(function(){ - self.button.focus(); - //remove active class from button - self.button.removeClass( $.mobile.activeBtnClass ); - }, 40); - - self.listbox.removeAttr('style').append( self.list ); - } - - if(self.menuType == "page"){ - $.mobile.changePage([self.menuPage,self.thisPage], 'pop', true, false); - self.menuPage.one("pagehide",function(){ - focusButton(); - //return false; - }); - } - else{ - self.screen.addClass( "ui-screen-hidden" ); - self.listbox.addClass( "ui-selectmenu-hidden" ).removeAttr( "style" ).removeClass("in"); - focusButton(); - } - - }, - - disable: function(){ - this.element.attr("disabled",true); - this.button.addClass('ui-disabled').attr("aria-disabled", true); - return this._setOption( "disabled", true ); - }, - - enable: function(){ - this.element.attr("disabled",false); - this.button.removeClass('ui-disabled').attr("aria-disabled", false); - return this._setOption( "disabled", false ); - } -}); -})( jQuery ); - - - -/* -* jQuery Mobile Framework : plugin for making button-like links -* Copyright (c) jQuery Project -* Dual licensed under the MIT or GPL Version 2 licenses. -* http://jquery.org/license -*/ -(function($, undefined ) { - -$.fn.buttonMarkup = function( options ){ - return this.each( function() { - var el = $( this ), - o = $.extend( {}, $.fn.buttonMarkup.defaults, el.data(), options), - - // Classes Defined - buttonClass, - innerClass = "ui-btn-inner", - iconClass; - - if ( attachEvents ) { - attachEvents(); - } - - // if not, try to find closest theme container - if ( !o.theme ) { - var themedParent = el.closest("[class*='ui-bar-'],[class*='ui-body-']"); - o.theme = themedParent.length ? - /ui-(bar|body)-([a-z])/.exec( themedParent.attr("class") )[2] : - "c"; - } - - buttonClass = "ui-btn ui-btn-up-" + o.theme; - - if ( o.inline ) { - buttonClass += " ui-btn-inline"; - } - - if ( o.icon ) { - o.icon = "ui-icon-" + o.icon; - o.iconpos = o.iconpos || "left"; - - iconClass = "ui-icon " + o.icon; - - if ( o.shadow ) { - iconClass += " ui-icon-shadow" - } - } - - if ( o.iconpos ) { - buttonClass += " ui-btn-icon-" + o.iconpos; - - if ( o.iconpos == "notext" && !el.attr("title") ) { - el.attr( "title", el.text() ); - } - } - - if ( o.corners ) { - buttonClass += " ui-btn-corner-all"; - innerClass += " ui-btn-corner-all"; - } - - if ( o.shadow ) { - buttonClass += " ui-shadow"; - } - - el - .attr( "data-theme", o.theme ) - .addClass( buttonClass ); - - var wrap = ("" + - ( o.icon ? "" : "" ) + - "").replace(/D/g, o.wrapperEls); - - el.wrapInner( wrap ); - }); -}; - -$.fn.buttonMarkup.defaults = { - corners: true, - shadow: true, - iconshadow: true, - wrapperEls: "span" -}; - -var attachEvents = function() { - $(".ui-btn").live({ - mousedown: function() { - var theme = $(this).attr( "data-theme" ); - $(this).removeClass( "ui-btn-up-" + theme ).addClass( "ui-btn-down-" + theme ); - }, - mouseup: function() { - var theme = $(this).attr( "data-theme" ); - $(this).removeClass( "ui-btn-down-" + theme ).addClass( "ui-btn-up-" + theme ); - }, - "mouseover focus": function() { - var theme = $(this).attr( "data-theme" ); - $(this).removeClass( "ui-btn-up-" + theme ).addClass( "ui-btn-hover-" + theme ); - }, - "mouseout blur": function() { - var theme = $(this).attr( "data-theme" ); - $(this).removeClass( "ui-btn-hover-" + theme ).addClass( "ui-btn-up-" + theme ); - } - }); - - attachEvents = null; -}; - -})(jQuery); - - -/* -* jQuery Mobile Framework : "button" plugin - links that proxy to native input/buttons -* Copyright (c) jQuery Project -* Dual licensed under the MIT or GPL Version 2 licenses. -* http://jquery.org/license -*/ -(function($, undefined ) { -$.widget( "mobile.button", $.mobile.widget, { - options: { - theme: null, - icon: null, - iconpos: null, - inline: null, - corners: true, - shadow: true, - iconshadow: true - }, - _create: function(){ - var $el = this.element, - o = this.options, - type = $el.attr('type'); - $el - .addClass('ui-btn-hidden') - .attr('tabindex','-1'); - - //add ARIA role - this.button = $( "", { - "href": "#", - "role": "button", - "aria-label": $el.attr( "type" ) - } ) - .text( $el.text() || $el.val() ) - .insertBefore( $el ) - .click(function(){ - if(!o.disabled){ - if( type == "submit" ){ - $(this).closest('form').submit(); - } - else{ - $el.click(); - } - } - - return false; - }) - .buttonMarkup({ - theme: o.theme, - icon: o.icon, - iconpos: o.iconpos, - inline: o.inline, - corners: o.corners, - shadow: o.shadow, - iconshadow: o.iconshadow - }); - }, - - enable: function(){ - this.element.attr("disabled", false); - this.button.removeClass("ui-disabled").attr("aria-disabled", false); - return this._setOption("disabled", false); - }, - - disable: function(){ - this.element.attr("disabled", true); - this.button.addClass("ui-disabled").attr("aria-disabled", true); - return this._setOption("disabled", true); - } -}); -})( jQuery ); - -/* -* jQuery Mobile Framework : "slider" plugin -* Copyright (c) jQuery Project -* Dual licensed under the MIT or GPL Version 2 licenses. -* http://jquery.org/license -*/ -(function($, undefined ) { -$.widget( "mobile.slider", $.mobile.widget, { - options: { - theme: null, - trackTheme: null, - disabled: false - }, - _create: function(){ - var self = this, - - control = this.element, - - parentTheme = control.parents('[class*=ui-bar-],[class*=ui-body-]').eq(0), - - parentTheme = parentTheme.length ? parentTheme.attr('class').match(/ui-(bar|body)-([a-z])/)[2] : 'c', - - theme = this.options.theme ? this.options.theme : parentTheme, - - trackTheme = this.options.trackTheme ? this.options.trackTheme : parentTheme, - - cType = control[0].nodeName.toLowerCase(), - selectClass = (cType == 'select') ? 'ui-slider-switch' : '', - controlID = control.attr('id'), - labelID = controlID + '-label', - label = $('[for='+ controlID +']').attr('id',labelID), - val = (cType == 'input') ? parseFloat(control.val()) : control[0].selectedIndex, - min = (cType == 'input') ? parseFloat(control.attr('min')) : 0, - max = (cType == 'input') ? parseFloat(control.attr('max')) : control.find('option').length-1, - slider = $('
    '), - handle = $('
    ') - .appendTo(slider) - .buttonMarkup({corners: true, theme: theme, shadow: true}) - .attr({ - 'role': 'slider', - 'aria-valuemin': min, - 'aria-valuemax': max, - 'aria-valuenow': val, - 'aria-valuetext': val, - 'title': val, - 'aria-labelledby': labelID - }); - - $.extend(this, { - slider: slider, - handle: handle, - dragging: false, - beforeStart: null - }); - - if(cType == 'select'){ - slider.wrapInner('
    '); - var options = control.find('option'); - - control.find('option').each(function(i){ - var side = (i==0) ?'b':'a', - corners = (i==0) ? 'right' :'left', - theme = (i==0) ? ' ui-btn-down-' + trackTheme :' ui-btn-active'; - $('
    ').prependTo(slider); - $(''+$(this).text()+'').prependTo(handle); - }); - - } - - label.addClass('ui-slider'); - - control - .addClass((cType == 'input') ? 'ui-slider-input' : 'ui-slider-switch') - .keyup(function(){ - self.refresh( $(this).val() ); - }); - - $(document).bind($.support.touch ? "touchmove" : "mousemove", function(event){ - if ( self.dragging ) { - self.refresh( event ); - return false; - } - }); - - slider - .bind($.support.touch ? "touchstart" : "mousedown", function(event){ - self.dragging = true; - if ( cType === "select" ) { - self.beforeStart = control[0].selectedIndex; - } - self.refresh( event ); - return false; - }); - - slider - .add(document) - .bind($.support.touch ? "touchend" : "mouseup", function(){ - if ( self.dragging ) { - self.dragging = false; - if ( cType === "select" ) { - if ( self.beforeStart === control[0].selectedIndex ) { - //tap occurred, but value didn't change. flip it! - self.refresh( self.beforeStart === 0 ? 1 : 0 ); - } - var curval = (cType === "input") ? parseFloat(control.val()) : control[ 0 ].selectedIndex; - var snapped = Math.round( curval / (max - min) * 100 ); - handle - .addClass("ui-slider-handle-snapping") - .css("left", snapped + "%") - .animationComplete(function(){ - handle.removeClass("ui-slider-handle-snapping"); - }); - } - return false; - } - }); - - slider.insertAfter(control); - handle.bind('click', function(e){ return false; }); - this.refresh(); - }, - - refresh: function(val){ - if ( this.options.disabled ) { return; } - - var control = this.element, percent, - cType = control[0].nodeName.toLowerCase(), - min = (cType === "input") ? parseFloat(control.attr("min")) : 0, - max = (cType === "input") ? parseFloat(control.attr("max")) : control.find("option").length - 1; - - if ( typeof val === "object" ) { - var data = val.originalEvent.touches ? val.originalEvent.touches[ 0 ] : val, - // a slight tolerance helped get to the ends of the slider - tol = 8; - if ( !this.dragging - || data.pageX < this.slider.offset().left - tol - || data.pageX > this.slider.offset().left + this.slider.width() + tol ) { - return; - } - percent = Math.round( ((data.pageX - this.slider.offset().left) / this.slider.width() ) * 100 ); - } else { - if ( val == null ) { - val = (cType === "input") ? parseFloat(control.val()) : control[ 0 ].selectedIndex; - } - percent = (parseFloat(val) - min) / (max - min) * 100; - } - - if ( isNaN(percent) ) { return; } - if ( percent < 0 ) { percent = 0; } - if ( percent > 100 ) { percent = 100; } - - var newval = Math.round( (percent / 100) * (max - min) ) + min; - if ( newval < min ) { newval = min; } - if ( newval > max ) { newval = max; } - - //flip the stack of the bg colors - if ( percent > 60 && cType === "select" ) { - - } - this.handle.css("left", percent + "%"); - this.handle.attr({ - "aria-valuenow": (cType === "input") ? newval : control.find("option").eq(newval).attr("value"), - "aria-valuetext": (cType === "input") ? newval : control.find("option").eq(newval).text(), - title: newval - }); - - // add/remove classes for flip toggle switch - if ( cType === "select" ) { - if ( newval === 0 ) { - this.slider.addClass("ui-slider-switch-a") - .removeClass("ui-slider-switch-b"); - } else { - this.slider.addClass("ui-slider-switch-b") - .removeClass("ui-slider-switch-a"); - } - } - - // update control's value - if ( cType === "input" ) { - control.val(newval); - } else { - control[ 0 ].selectedIndex = newval; - } - control.trigger("change"); - }, - - enable: function(){ - this.element.attr("disabled", false); - this.slider.removeClass("ui-disabled").attr("aria-disabled", false); - return this._setOption("disabled", false); - }, - - disable: function(){ - this.element.attr("disabled", true); - this.slider.addClass("ui-disabled").attr("aria-disabled", true); - return this._setOption("disabled", true); - } -}); -})( jQuery ); - - - -/* -* jQuery Mobile Framework : "collapsible" plugin -* Copyright (c) jQuery Project -* Dual licensed under the MIT or GPL Version 2 licenses. -* http://jquery.org/license -*/ -(function($, undefined ) { -$.widget( "mobile.collapsible", $.mobile.widget, { - options: { - expandCueText: ' click to expand contents', - collapseCueText: ' click to collapse contents', - collapsed: false, - heading: '>:header,>legend', - theme: null, - iconTheme: 'd' - }, - _create: function(){ - - var $el = this.element, - o = this.options, - collapsibleContain = $el.addClass('ui-collapsible-contain'), - collapsibleHeading = $el.find(o.heading).eq(0), - collapsibleContent = collapsibleContain.wrapInner('
    ').find('.ui-collapsible-content'), - collapsibleParent = $el.closest('[data-role="collapsible-set"]').addClass('ui-collapsible-set'); - - //replace collapsibleHeading if it's a legend - if(collapsibleHeading.is('legend')){ - collapsibleHeading = $('
    '+ collapsibleHeading.html() +'
    ').insertBefore(collapsibleHeading); - collapsibleHeading.next().remove(); - } - - //drop heading in before content - collapsibleHeading.insertBefore(collapsibleContent); - - //modify markup & attributes - collapsibleHeading.addClass('ui-collapsible-heading') - .append('') - .wrapInner('') - .find('a:eq(0)') - .buttonMarkup({ - shadow: !!!collapsibleParent.length, - corners:false, - iconPos: 'left', - icon: 'plus', - theme: o.theme - }) - .find('.ui-icon') - .removeAttr('class') - .buttonMarkup({ - shadow: true, - corners:true, - iconPos: 'notext', - icon: 'plus', - theme: o.iconTheme - }); - - if( !collapsibleParent.length ){ - collapsibleHeading - .find('a:eq(0)') - .addClass('ui-corner-all') - .find('.ui-btn-inner') - .addClass('ui-corner-all'); - } - else { - if( collapsibleContain.data('collapsible-last') ){ - collapsibleHeading - .find('a:eq(0), .ui-btn-inner') - .addClass('ui-corner-bottom'); - } - } - - - //events - collapsibleContain - .bind('collapse', function(event){ - if( !event.isDefaultPrevented() ){ - event.preventDefault(); - collapsibleHeading - .addClass('ui-collapsible-heading-collapsed') - .find('.ui-collapsible-heading-status').text(o.expandCueText); - - collapsibleHeading.find('.ui-icon').removeClass('ui-icon-minus').addClass('ui-icon-plus'); - collapsibleContent.addClass('ui-collapsible-content-collapsed').attr('aria-hidden',true); - - if( collapsibleContain.data('collapsible-last') ){ - collapsibleHeading - .find('a:eq(0), .ui-btn-inner') - .addClass('ui-corner-bottom'); - } - } - - }) - .bind('expand', function(event){ - if( !event.isDefaultPrevented() ){ - event.preventDefault(); - collapsibleHeading - .removeClass('ui-collapsible-heading-collapsed') - .find('.ui-collapsible-heading-status').text(o.collapseCueText); - - collapsibleHeading.find('.ui-icon').removeClass('ui-icon-plus').addClass('ui-icon-minus'); - collapsibleContent.removeClass('ui-collapsible-content-collapsed').attr('aria-hidden',false); - - if( collapsibleContain.data('collapsible-last') ){ - collapsibleHeading - .find('a:eq(0), .ui-btn-inner') - .removeClass('ui-corner-bottom'); - } - - } - }) - .trigger(o.collapsed ? 'collapse' : 'expand'); - - - //close others in a set - if( collapsibleParent.length && !collapsibleParent.data("collapsiblebound") ){ - collapsibleParent - .data("collapsiblebound", true) - .bind("expand", function( event ){ - $(this).find( ".ui-collapsible-contain" ) - .not( $(event.target).closest( ".ui-collapsible-contain" ) ) - .not( "> .ui-collapsible-contain .ui-collapsible-contain" ) - .trigger( "collapse" ); - }) - var set = collapsibleParent.find('[data-role=collapsible]') - - set.first() - .find('a:eq(0)') - .addClass('ui-corner-top') - .find('.ui-btn-inner') - .addClass('ui-corner-top'); - - set.last().data('collapsible-last', true) - } - - collapsibleHeading.bind( $.support.touch ? "touchstart" : "click", function(){ - if( collapsibleHeading.is('.ui-collapsible-heading-collapsed') ){ - collapsibleContain.trigger('expand'); - } - else { - collapsibleContain.trigger('collapse'); - } - return false; - }); - - } -}); -})( jQuery ); - -/* -* jQuery Mobile Framework: "controlgroup" plugin - corner-rounding for groups of buttons, checks, radios, etc -* Copyright (c) jQuery Project -* Dual licensed under the MIT or GPL Version 2 licenses. -* http://jquery.org/license -*/ -(function($, undefined ) { -$.fn.controlgroup = function(options){ - - return $(this).each(function(){ - var o = $.extend({ - direction: $( this ).data( "type" ) || "vertical", - shadow: false - },options); - var groupheading = $(this).find('>legend'), - flCorners = o.direction == 'horizontal' ? ['ui-corner-left', 'ui-corner-right'] : ['ui-corner-top', 'ui-corner-bottom'], - type = $(this).find('input:eq(0)').attr('type'); - - //replace legend with more stylable replacement div - if( groupheading.length ){ - $(this).wrapInner('
    '); - $('
    '+ groupheading.html() +'
    ').insertBefore( $(this).children(0) ); - groupheading.remove(); - } - - $(this).addClass('ui-corner-all ui-controlgroup ui-controlgroup-'+o.direction); - - function flipClasses(els){ - els - .removeClass('ui-btn-corner-all ui-shadow') - .eq(0).addClass(flCorners[0]) - .end() - .filter(':last').addClass(flCorners[1]).addClass('ui-controlgroup-last'); - } - flipClasses($(this).find('.ui-btn')); - flipClasses($(this).find('.ui-btn-inner')); - if(o.shadow){ - $(this).addClass('ui-shadow'); - } - }); -}; -})(jQuery); - -/* -* jQuery Mobile Framework : "fieldcontain" plugin - simple class additions to make form row separators -* Copyright (c) jQuery Project -* Dual licensed under the MIT or GPL Version 2 licenses. -* http://jquery.org/license -*/ -(function($, undefined ) { -$.fn.fieldcontain = function(options){ - return $(this).addClass('ui-field-contain ui-body ui-br'); -}; -})(jQuery); - -/* -* jQuery Mobile Framework : "listview" plugin -* Copyright (c) jQuery Project -* Dual licensed under the MIT or GPL Version 2 licenses. -* http://jquery.org/license -*/ -(function($, undefined ) { - -$.widget( "mobile.listview", $.mobile.widget, { - options: { - theme: "c", - countTheme: "c", - headerTheme: "b", - dividerTheme: "b", - splitIcon: "arrow-r", - splitTheme: "b", - inset: false - }, - - _create: function() { - var $list = this.element, - o = this.options; - - // create listview markup - $list - .addClass( "ui-listview" ) - .attr( "role", "listbox" ) - - if ( o.inset ) { - $list.addClass( "ui-listview-inset ui-corner-all ui-shadow" ); - } - - $list.delegate( ".ui-li", "focusin", function() { - $( this ).attr( "tabindex", "0" ); - }); - - this._itemApply( $list, $list ); - - this.refresh( true ); - - //keyboard events for menu items - $list.keydown(function( e ) { - var target = $( e.target ), - li = target.closest( "li" ); - - // switch logic based on which key was pressed - switch ( e.keyCode ) { - // up or left arrow keys - case 38: - var prev = li.prev(); - - // if there's a previous option, focus it - if ( prev.length ) { - target - .blur() - .attr( "tabindex", "-1" ); - - prev.find( "a" ).first().focus(); - } - - return false; - break; - - // down or right arrow keys - case 40: - var next = li.next(); - - // if there's a next option, focus it - if ( next.length ) { - target - .blur() - .attr( "tabindex", "-1" ); - - next.find( "a" ).first().focus(); - } - - return false; - break; - - case 39: - var a = li.find( "a.ui-li-link-alt" ); - - if ( a.length ) { - target.blur(); - a.first().focus(); - } - - return false; - break; - - case 37: - var a = li.find( "a.ui-link-inherit" ); - - if ( a.length ) { - target.blur(); - a.first().focus(); - } - - return false; - break; - - // if enter or space is pressed, trigger click - case 13: - case 32: - target.trigger( "click" ); - - return false; - break; - } - }); - - // tapping the whole LI triggers click on the first link - $list.delegate( "li", "click", function(event) { - if ( !$( event.target ).closest( "a" ).length ) { - $( this ).find( "a" ).first().trigger( "click" ); - return false; - } - }); - }, - - _itemApply: function( $list, item ) { - // TODO class has to be defined in markup - item.find( ".ui-li-count" ) - .addClass( "ui-btn-up-" + ($list.data( "counttheme" ) || this.options.countTheme) + " ui-btn-corner-all" ); - - item.find( "h1, h2, h3, h4, h5, h6" ).addClass( "ui-li-heading" ); - - item.find( "p, dl" ).addClass( "ui-li-desc" ); - - item.find( "img" ).addClass( "ui-li-thumb" ).each(function() { - $( this ).closest( "li" ) - .addClass( $(this).is( ".ui-li-icon" ) ? "ui-li-has-icon" : "ui-li-has-thumb" ); - }); - - var aside = item.find( ".ui-li-aside" ); - - if ( aside.length ) { - aside.each(function(i, el) { - $(el).prependTo( $(el).parent() ); //shift aside to front for css float - }); - } - - if ( $.support.cssPseudoElement || !$.nodeName( item[0], "ol" ) ) { - return; - } - }, - - _removeCorners: function(li){ - li - .add( li.find(".ui-btn-inner, .ui-li-link-alt, .ui-li-thumb") ) - .removeClass( "ui-corner-top ui-corner-bottom ui-corner-br ui-corner-bl ui-corner-tr ui-corner-tl" ); - }, - - refresh: function( create ) { - this._createSubPages(); - - var o = this.options, - $list = this.element, - self = this, - dividertheme = $list.data( "dividertheme" ) || o.dividerTheme, - li = $list.children( "li" ), - counter = $.support.cssPseudoElement || !$.nodeName( $list[0], "ol" ) ? 0 : 1; - - if ( counter ) { - $list.find( ".ui-li-dec" ).remove(); - } - - li.attr({ "role": "option", "tabindex": "-1" }); - - li.first().attr( "tabindex", "0" ); - - li.each(function( pos ) { - var item = $( this ), - itemClass = "ui-li"; - - // If we're creating the element, we update it regardless - if ( !create && item.hasClass( "ui-li" ) ) { - return; - } - - var a = item.find( "a" ); - - if ( a.length ) { - item - .buttonMarkup({ - wrapperEls: "div", - shadow: false, - corners: false, - iconpos: "right", - icon: a.length > 1 ? false : item.data("icon") || "arrow-r", - theme: o.theme - }); - - a.first().addClass( "ui-link-inherit" ); - - if ( a.length > 1 ) { - itemClass += " ui-li-has-alt"; - - var last = a.last(), - splittheme = $list.data( "splittheme" ) || last.data( "theme" ) || o.splitTheme; - - last - .attr( "title", last.text() ) - .addClass( "ui-li-link-alt" ) - .empty() - .buttonMarkup({ - shadow: false, - corners: false, - theme: o.theme, - icon: false, - iconpos: false - }) - .find( ".ui-btn-inner" ) - .append( $( "" ).buttonMarkup({ - shadow: true, - corners: true, - theme: splittheme, - iconpos: "notext", - icon: $list.data( "spliticon" ) || last.data( "icon" ) || o.splitIcon - } ) ); - } - - } else if ( item.data( "role" ) === "list-divider" ) { - itemClass += " ui-li-divider ui-btn ui-bar-" + dividertheme; - item.attr( "role", "heading" ); - - //reset counter when a divider heading is encountered - if ( counter ) { - counter = 1; - } - - } else { - itemClass += " ui-li-static ui-btn-up-" + o.theme; - } - - - if( o.inset ){ - if ( pos === 0 ) { - itemClass += " ui-corner-top"; - - item - .add( item.find( ".ui-btn-inner" ) ) - .find( ".ui-li-link-alt" ) - .addClass( "ui-corner-tr" ) - .end() - .find( ".ui-li-thumb" ) - .addClass( "ui-corner-tl" ); - - self._removeCorners( item.next() ); - - } else if ( pos === li.length - 1 ) { - itemClass += " ui-corner-bottom"; - - item - .add( item.find( ".ui-btn-inner" ) ) - .find( ".ui-li-link-alt" ) - .addClass( "ui-corner-br" ) - .end() - .find( ".ui-li-thumb" ) - .addClass( "ui-corner-bl" ); - - self._removeCorners( item.prev() ); - } - } - - - if ( counter && itemClass.indexOf( "ui-li-divider" ) < 0 ) { - item - .find( ".ui-link-inherit" ).first() - .addClass( "ui-li-jsnumbering" ) - .prepend( "" + (counter++) + ". " ); - } - - item.addClass( itemClass ); - - if ( !create ) { - self._itemApply( $list, item ); - } - }); - }, - - //create a string for ID/subpage url creation - _idStringEscape: function( str ){ - return str.replace(/[^a-zA-Z0-9]/g, '-'); - }, - - _createSubPages: function() { - var parentList = this.element, - parentPage = parentList.closest( ".ui-page" ), - parentId = parentPage.attr( "id" ), - o = this.options, - self = this, - persistentFooterID = parentPage.find( "[data-role='footer']" ).data( "id" ); - - $( parentList.find( "ul, ol" ).toArray().reverse() ).each(function( i ) { - var list = $( this ), - parent = list.parent(), - title = parent.contents()[ 0 ].nodeValue.split("\n")[0], - id = parentId + "&" + $.mobile.subPageUrlKey + "=" + self._idStringEscape(title + " " + i), - theme = list.data( "theme" ) || o.theme, - countTheme = list.data( "counttheme" ) || parentList.data( "counttheme" ) || o.countTheme, - newPage = list.wrap( "
    " ) - .parent() - .before( "
    " + title + "
    " ) - .after( persistentFooterID ? $( "
    ", { "data-role": "footer", "data-id": persistentFooterID, "class": "ui-footer-duplicate" } ) : "" ) - .parent() - .attr({ - id: id, - "data-theme": theme, - "data-count-theme": countTheme - }) - .appendTo( $.mobile.pageContainer ); - - - - newPage.page(); - - parent.html( "" + title + "" ); - }).listview(); - } -}); - -})( jQuery ); - - -/* -* jQuery Mobile Framework : "listview" filter extension -* Copyright (c) jQuery Project -* Dual licensed under the MIT or GPL Version 2 licenses. -* http://jquery.org/license -*/ -(function($, undefined ) { - -$.mobile.listview.prototype.options.filter = false; - -$( "[data-role='listview']" ).live( "listviewcreate", function() { - var list = $( this ), - listview = list.data( "listview" ); - if ( !listview.options.filter ) { - return; - } - - var wrapper = $( "
    ", { "class": "ui-listview-filter ui-bar-c", "role": "search" } ), - - search = $( "", { - placeholder: "Filter results...", - "data-type": "search" - }) - .bind( "keyup change", function() { - var val = this.value.toLowerCase();; - list.children().show(); - if ( val ) { - list.children().filter(function() { - return $( this ).text().toLowerCase().indexOf( val ) === -1; - }).hide(); - } - - //listview._numberItems(); - }) - .appendTo( wrapper ) - .textinput(); - - wrapper.insertBefore( list ); -}); - -})( jQuery ); - - -/* -* jQuery Mobile Framework : "dialog" plugin. -* 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 -*/ -(function($, undefined ) { -$.widget( "mobile.dialog", $.mobile.widget, { - options: {}, - _create: function(){ - var self = this, - $el = self.element, - $prevPage = $.mobile.activePage, - $closeBtn = $('Close'); - - $el.delegate("a, form", "click submit", function(e){ - if( e.type == "click" && ( $(e.target).closest('[data-back]')[0] || this==$closeBtn[0] ) ){ - self.close(); - return false; - } - //otherwise, assume we're headed somewhere new. set activepage to dialog so the transition will work - $.mobile.activePage = self.element; - }); - - this.element - .bind("pageshow",function(){ - return false; - }) - //add ARIA role - .attr("role","dialog") - .addClass('ui-page ui-dialog ui-body-a') - .find('[data-role=header]') - .addClass('ui-corner-top ui-overlay-shadow') - .prepend( $closeBtn ) - .end() - .find('.ui-content:not([class*="ui-body-"])') - .addClass('ui-body-c') - .end() - .find('.ui-content,[data-role=footer]') - .last() - .addClass('ui-corner-bottom ui-overlay-shadow'); - - $(window).bind('hashchange',function(){ - if( $el.is('.ui-page-active') ){ - self.close(); - $el.bind('pagehide',function(){ - $.mobile.updateHash( $prevPage.attr('id'), true); - }); - } - }); - - }, - - close: function(){ - $.mobile.changePage([this.element, $.mobile.activePage], undefined, true, true ); - } -}); -})( jQuery ); - -/* -* jQuery Mobile Framework : "navbar" plugin -* Copyright (c) jQuery Project -* Dual licensed under the MIT or GPL Version 2 licenses. -* http://jquery.org/license -*/ -(function($, undefined ) { -$.widget( "mobile.navbar", $.mobile.widget, { - options: { - iconpos: 'top', - grid: null - }, - _create: function(){ - var $navbar = this.element, - $navbtns = $navbar.find("a"), - iconpos = $navbtns.filter('[data-icon]').length ? this.options.iconpos : undefined; - - $navbar - .addClass('ui-navbar') - .attr("role","navigation") - .find("ul") - .grid({grid: this.options.grid }); - - if( !iconpos ){ - $navbar.addClass("ui-navbar-noicons"); - } - - $navbtns - .buttonMarkup({ - corners: false, - shadow: false, - iconpos: iconpos - }); - - $navbar.delegate("a", "click",function(event){ - $navbtns.removeClass("ui-btn-active"); - }); - } -}); -})( jQuery ); - -/* -* jQuery Mobile Framework : plugin for creating CSS grids -* Copyright (c) jQuery Project -* Dual licensed under the MIT or GPL Version 2 licenses. -* http://jquery.org/license -*/ -(function($, undefined ) { -$.fn.grid = function(options){ - return $(this).each(function(){ - var o = $.extend({ - grid: null - },options); - - - var $kids = $(this).children(), - gridCols = {a: 2, b:3, c:4, d:5}, - grid = o.grid, - iterator; - - if( !grid ){ - if( $kids.length <= 5 ){ - for(var letter in gridCols){ - if(gridCols[letter] == $kids.length){ grid = letter; } - } - } - else{ - grid = 'a'; - } - } - iterator = gridCols[grid]; - - $(this).addClass('ui-grid-' + grid); - - $kids.filter(':nth-child(' + iterator + 'n+1)').addClass('ui-block-a'); - $kids.filter(':nth-child(' + iterator + 'n+2)').addClass('ui-block-b'); - - if(iterator > 2){ - $kids.filter(':nth-child(3n+3)').addClass('ui-block-c'); - } - if(iterator> 3){ - $kids.filter(':nth-child(4n+4)').addClass('ui-block-d'); - } - if(iterator > 4){ - $kids.filter(':nth-child(5n+5)').addClass('ui-block-e'); - } - - }); -}; -})(jQuery); - - --- /dev/null +++ b/busui/js/jQuery.ui.datepicker.js @@ -1,1 +1,98 @@ - +/*! + * jQuery UI 1.8.5 + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI + */ +(function(c,j){function k(a){return!c(a).parents().andSelf().filter(function(){return c.curCSS(this,"visibility")==="hidden"||c.expr.filters.hidden(this)}).length}c.ui=c.ui||{};if(!c.ui.version){c.extend(c.ui,{version:"1.8.5",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106, +NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});c.fn.extend({_focus:c.fn.focus,focus:function(a,b){return typeof a==="number"?this.each(function(){var d=this;setTimeout(function(){c(d).focus();b&&b.call(d)},a)}):this._focus.apply(this,arguments)},scrollParent:function(){var a;a=c.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(c.curCSS(this, +"position",1))&&/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!a.length?c(document):a},zIndex:function(a){if(a!==j)return this.css("zIndex",a);if(this.length){a=c(this[0]);for(var b;a.length&&a[0]!==document;){b=a.css("position"); +if(b==="absolute"||b==="relative"||b==="fixed"){b=parseInt(a.css("zIndex"));if(!isNaN(b)&&b!=0)return b}a=a.parent()}}return 0},disableSelection:function(){return this.bind("mousedown.ui-disableSelection selectstart.ui-disableSelection",function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});c.each(["Width","Height"],function(a,b){function d(f,g,l,m){c.each(e,function(){g-=parseFloat(c.curCSS(f,"padding"+this,true))||0;if(l)g-=parseFloat(c.curCSS(f, +"border"+this+"Width",true))||0;if(m)g-=parseFloat(c.curCSS(f,"margin"+this,true))||0});return g}var e=b==="Width"?["Left","Right"]:["Top","Bottom"],h=b.toLowerCase(),i={innerWidth:c.fn.innerWidth,innerHeight:c.fn.innerHeight,outerWidth:c.fn.outerWidth,outerHeight:c.fn.outerHeight};c.fn["inner"+b]=function(f){if(f===j)return i["inner"+b].call(this);return this.each(function(){c.style(this,h,d(this,f)+"px")})};c.fn["outer"+b]=function(f,g){if(typeof f!=="number")return i["outer"+b].call(this,f);return this.each(function(){c.style(this, +h,d(this,f,true,g)+"px")})}});c.extend(c.expr[":"],{data:function(a,b,d){return!!c.data(a,d[3])},focusable:function(a){var b=a.nodeName.toLowerCase(),d=c.attr(a,"tabindex");if("area"===b){b=a.parentNode;d=b.name;if(!a.href||!d||b.nodeName.toLowerCase()!=="map")return false;a=c("img[usemap=#"+d+"]")[0];return!!a&&k(a)}return(/input|select|textarea|button|object/.test(b)?!a.disabled:"a"==b?a.href||!isNaN(d):!isNaN(d))&&k(a)},tabbable:function(a){var b=c.attr(a,"tabindex");return(isNaN(b)||b>=0)&&c(a).is(":focusable")}}); +c(function(){var a=document.createElement("div"),b=document.body;c.extend(a.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});c.support.minHeight=b.appendChild(a).offsetHeight===100;b.removeChild(a).style.display="none"});c.extend(c.ui,{plugin:{add:function(a,b,d){a=c.ui[a].prototype;for(var e in d){a.plugins[e]=a.plugins[e]||[];a.plugins[e].push([b,d[e]])}},call:function(a,b,d){if((b=a.plugins[b])&&a.element[0].parentNode)for(var e=0;e0)return true;a[b]=1;d=a[b]>0;a[b]=0;return d},isOverAxis:function(a,b,d){return a>b&&a
    ')}function E(a,b){d.extend(a, +b);for(var c in b)if(b[c]==null||b[c]==G)a[c]=b[c];return a}d.extend(d.ui,{datepicker:{version:"1.8.5"}});var y=(new Date).getTime();d.extend(L.prototype,{markerClassName:"hasDatepicker",log:function(){this.debug&&console.log.apply("",arguments)},_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(a){E(this._defaults,a||{});return this},_attachDatepicker:function(a,b){var c=null;for(var e in this._defaults){var f=a.getAttribute("date:"+e);if(f){c=c||{};try{c[e]=eval(f)}catch(h){c[e]= +f}}}e=a.nodeName.toLowerCase();f=e=="div"||e=="span";if(!a.id){this.uuid+=1;a.id="dp"+this.uuid}var i=this._newInst(d(a),f);i.settings=d.extend({},b||{},c||{});if(e=="input")this._connectDatepicker(a,i);else f&&this._inlineDatepicker(a,i)},_newInst:function(a,b){return{id:a[0].id.replace(/([^A-Za-z0-9_])/g,"\\\\$1"),input:a,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:b,dpDiv:!b?this.dpDiv:d('
    ')}}, +_connectDatepicker:function(a,b){var c=d(a);b.append=d([]);b.trigger=d([]);if(!c.hasClass(this.markerClassName)){this._attachments(c,b);c.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp).bind("setData.datepicker",function(e,f,h){b.settings[f]=h}).bind("getData.datepicker",function(e,f){return this._get(b,f)});this._autoSize(b);d.data(a,"datepicker",b)}},_attachments:function(a,b){var c=this._get(b,"appendText"),e=this._get(b,"isRTL");b.append&& +b.append.remove();if(c){b.append=d(''+c+"");a[e?"before":"after"](b.append)}a.unbind("focus",this._showDatepicker);b.trigger&&b.trigger.remove();c=this._get(b,"showOn");if(c=="focus"||c=="both")a.focus(this._showDatepicker);if(c=="button"||c=="both"){c=this._get(b,"buttonText");var f=this._get(b,"buttonImage");b.trigger=d(this._get(b,"buttonImageOnly")?d("").addClass(this._triggerClass).attr({src:f,alt:c,title:c}):d('').addClass(this._triggerClass).html(f== +""?c:d("").attr({src:f,alt:c,title:c})));a[e?"before":"after"](b.trigger);b.trigger.click(function(){d.datepicker._datepickerShowing&&d.datepicker._lastInput==a[0]?d.datepicker._hideDatepicker():d.datepicker._showDatepicker(a[0]);return false})}},_autoSize:function(a){if(this._get(a,"autoSize")&&!a.inline){var b=new Date(2009,11,20),c=this._get(a,"dateFormat");if(c.match(/[DM]/)){var e=function(f){for(var h=0,i=0,g=0;gh){h=f[g].length;i=g}return i};b.setMonth(e(this._get(a, +c.match(/MM/)?"monthNames":"monthNamesShort")));b.setDate(e(this._get(a,c.match(/DD/)?"dayNames":"dayNamesShort"))+20-b.getDay())}a.input.attr("size",this._formatDate(a,b).length)}},_inlineDatepicker:function(a,b){var c=d(a);if(!c.hasClass(this.markerClassName)){c.addClass(this.markerClassName).append(b.dpDiv).bind("setData.datepicker",function(e,f,h){b.settings[f]=h}).bind("getData.datepicker",function(e,f){return this._get(b,f)});d.data(a,"datepicker",b);this._setDate(b,this._getDefaultDate(b), +true);this._updateDatepicker(b);this._updateAlternate(b)}},_dialogDatepicker:function(a,b,c,e,f){a=this._dialogInst;if(!a){this.uuid+=1;this._dialogInput=d('');this._dialogInput.keydown(this._doKeyDown);d("body").append(this._dialogInput);a=this._dialogInst=this._newInst(this._dialogInput,false);a.settings={};d.data(this._dialogInput[0],"datepicker",a)}E(a.settings,e||{});b=b&&b.constructor== +Date?this._formatDate(a,b):b;this._dialogInput.val(b);this._pos=f?f.length?f:[f.pageX,f.pageY]:null;if(!this._pos)this._pos=[document.documentElement.clientWidth/2-100+(document.documentElement.scrollLeft||document.body.scrollLeft),document.documentElement.clientHeight/2-150+(document.documentElement.scrollTop||document.body.scrollTop)];this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px");a.settings.onSelect=c;this._inDialog=true;this.dpDiv.addClass(this._dialogClass);this._showDatepicker(this._dialogInput[0]); +d.blockUI&&d.blockUI(this.dpDiv);d.data(this._dialogInput[0],"datepicker",a);return this},_destroyDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();d.removeData(a,"datepicker");if(e=="input"){c.append.remove();c.trigger.remove();b.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)}else if(e=="div"||e=="span")b.removeClass(this.markerClassName).empty()}}, +_enableDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();if(e=="input"){a.disabled=false;c.trigger.filter("button").each(function(){this.disabled=false}).end().filter("img").css({opacity:"1.0",cursor:""})}else if(e=="div"||e=="span")b.children("."+this._inlineClass).children().removeClass("ui-state-disabled");this._disabledInputs=d.map(this._disabledInputs,function(f){return f==a?null:f})}},_disableDatepicker:function(a){var b= +d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();if(e=="input"){a.disabled=true;c.trigger.filter("button").each(function(){this.disabled=true}).end().filter("img").css({opacity:"0.5",cursor:"default"})}else if(e=="div"||e=="span")b.children("."+this._inlineClass).children().addClass("ui-state-disabled");this._disabledInputs=d.map(this._disabledInputs,function(f){return f==a?null:f});this._disabledInputs[this._disabledInputs.length]=a}},_isDisabledDatepicker:function(a){if(!a)return false; +for(var b=0;b-1}},_doKeyUp:function(a){a=d.datepicker._getInst(a.target);if(a.input.val()!=a.lastVal)try{if(d.datepicker.parseDate(d.datepicker._get(a,"dateFormat"),a.input?a.input.val():null,d.datepicker._getFormatConfig(a))){d.datepicker._setDateFromField(a);d.datepicker._updateAlternate(a);d.datepicker._updateDatepicker(a)}}catch(b){d.datepicker.log(b)}return true},_showDatepicker:function(a){a=a.target|| +a;if(a.nodeName.toLowerCase()!="input")a=d("input",a.parentNode)[0];if(!(d.datepicker._isDisabledDatepicker(a)||d.datepicker._lastInput==a)){var b=d.datepicker._getInst(a);d.datepicker._curInst&&d.datepicker._curInst!=b&&d.datepicker._curInst.dpDiv.stop(true,true);var c=d.datepicker._get(b,"beforeShow");E(b.settings,c?c.apply(a,[a,b]):{});b.lastVal=null;d.datepicker._lastInput=a;d.datepicker._setDateFromField(b);if(d.datepicker._inDialog)a.value="";if(!d.datepicker._pos){d.datepicker._pos=d.datepicker._findPos(a); +d.datepicker._pos[1]+=a.offsetHeight}var e=false;d(a).parents().each(function(){e|=d(this).css("position")=="fixed";return!e});if(e&&d.browser.opera){d.datepicker._pos[0]-=document.documentElement.scrollLeft;d.datepicker._pos[1]-=document.documentElement.scrollTop}c={left:d.datepicker._pos[0],top:d.datepicker._pos[1]};d.datepicker._pos=null;b.dpDiv.css({position:"absolute",display:"block",top:"-1000px"});d.datepicker._updateDatepicker(b);c=d.datepicker._checkOffset(b,c,e);b.dpDiv.css({position:d.datepicker._inDialog&& +d.blockUI?"static":e?"fixed":"absolute",display:"none",left:c.left+"px",top:c.top+"px"});if(!b.inline){c=d.datepicker._get(b,"showAnim");var f=d.datepicker._get(b,"duration"),h=function(){d.datepicker._datepickerShowing=true;var i=d.datepicker._getBorders(b.dpDiv);b.dpDiv.find("iframe.ui-datepicker-cover").css({left:-i[0],top:-i[1],width:b.dpDiv.outerWidth(),height:b.dpDiv.outerHeight()})};b.dpDiv.zIndex(d(a).zIndex()+1);d.effects&&d.effects[c]?b.dpDiv.show(c,d.datepicker._get(b,"showOptions"),f, +h):b.dpDiv[c||"show"](c?f:null,h);if(!c||!f)h();b.input.is(":visible")&&!b.input.is(":disabled")&&b.input.focus();d.datepicker._curInst=b}}},_updateDatepicker:function(a){var b=this,c=d.datepicker._getBorders(a.dpDiv);a.dpDiv.empty().append(this._generateHTML(a)).find("iframe.ui-datepicker-cover").css({left:-c[0],top:-c[1],width:a.dpDiv.outerWidth(),height:a.dpDiv.outerHeight()}).end().find("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a").bind("mouseout",function(){d(this).removeClass("ui-state-hover"); +this.className.indexOf("ui-datepicker-prev")!=-1&&d(this).removeClass("ui-datepicker-prev-hover");this.className.indexOf("ui-datepicker-next")!=-1&&d(this).removeClass("ui-datepicker-next-hover")}).bind("mouseover",function(){if(!b._isDisabledDatepicker(a.inline?a.dpDiv.parent()[0]:a.input[0])){d(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");d(this).addClass("ui-state-hover");this.className.indexOf("ui-datepicker-prev")!=-1&&d(this).addClass("ui-datepicker-prev-hover"); +this.className.indexOf("ui-datepicker-next")!=-1&&d(this).addClass("ui-datepicker-next-hover")}}).end().find("."+this._dayOverClass+" a").trigger("mouseover").end();c=this._getNumberOfMonths(a);var e=c[1];e>1?a.dpDiv.addClass("ui-datepicker-multi-"+e).css("width",17*e+"em"):a.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("");a.dpDiv[(c[0]!=1||c[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi");a.dpDiv[(this._get(a,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl"); +a==d.datepicker._curInst&&d.datepicker._datepickerShowing&&a.input&&a.input.is(":visible")&&!a.input.is(":disabled")&&a.input.focus()},_getBorders:function(a){var b=function(c){return{thin:1,medium:2,thick:3}[c]||c};return[parseFloat(b(a.css("border-left-width"))),parseFloat(b(a.css("border-top-width")))]},_checkOffset:function(a,b,c){var e=a.dpDiv.outerWidth(),f=a.dpDiv.outerHeight(),h=a.input?a.input.outerWidth():0,i=a.input?a.input.outerHeight():0,g=document.documentElement.clientWidth+d(document).scrollLeft(), +k=document.documentElement.clientHeight+d(document).scrollTop();b.left-=this._get(a,"isRTL")?e-h:0;b.left-=c&&b.left==a.input.offset().left?d(document).scrollLeft():0;b.top-=c&&b.top==a.input.offset().top+i?d(document).scrollTop():0;b.left-=Math.min(b.left,b.left+e>g&&g>e?Math.abs(b.left+e-g):0);b.top-=Math.min(b.top,b.top+f>k&&k>f?Math.abs(f+i):0);return b},_findPos:function(a){for(var b=this._get(this._getInst(a),"isRTL");a&&(a.type=="hidden"||a.nodeType!=1);)a=a[b?"previousSibling":"nextSibling"]; +a=d(a).offset();return[a.left,a.top]},_hideDatepicker:function(a){var b=this._curInst;if(!(!b||a&&b!=d.data(a,"datepicker")))if(this._datepickerShowing){a=this._get(b,"showAnim");var c=this._get(b,"duration"),e=function(){d.datepicker._tidyDialog(b);this._curInst=null};d.effects&&d.effects[a]?b.dpDiv.hide(a,d.datepicker._get(b,"showOptions"),c,e):b.dpDiv[a=="slideDown"?"slideUp":a=="fadeIn"?"fadeOut":"hide"](a?c:null,e);a||e();if(a=this._get(b,"onClose"))a.apply(b.input?b.input[0]:null,[b.input?b.input.val(): +"",b]);this._datepickerShowing=false;this._lastInput=null;if(this._inDialog){this._dialogInput.css({position:"absolute",left:"0",top:"-100px"});if(d.blockUI){d.unblockUI();d("body").append(this.dpDiv)}}this._inDialog=false}},_tidyDialog:function(a){a.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},_checkExternalClick:function(a){if(d.datepicker._curInst){a=d(a.target);a[0].id!=d.datepicker._mainDivId&&a.parents("#"+d.datepicker._mainDivId).length==0&&!a.hasClass(d.datepicker.markerClassName)&& +!a.hasClass(d.datepicker._triggerClass)&&d.datepicker._datepickerShowing&&!(d.datepicker._inDialog&&d.blockUI)&&d.datepicker._hideDatepicker()}},_adjustDate:function(a,b,c){a=d(a);var e=this._getInst(a[0]);if(!this._isDisabledDatepicker(a[0])){this._adjustInstDate(e,b+(c=="M"?this._get(e,"showCurrentAtPos"):0),c);this._updateDatepicker(e)}},_gotoToday:function(a){a=d(a);var b=this._getInst(a[0]);if(this._get(b,"gotoCurrent")&&b.currentDay){b.selectedDay=b.currentDay;b.drawMonth=b.selectedMonth=b.currentMonth; +b.drawYear=b.selectedYear=b.currentYear}else{var c=new Date;b.selectedDay=c.getDate();b.drawMonth=b.selectedMonth=c.getMonth();b.drawYear=b.selectedYear=c.getFullYear()}this._notifyChange(b);this._adjustDate(a)},_selectMonthYear:function(a,b,c){a=d(a);var e=this._getInst(a[0]);e._selectingMonthYear=false;e["selected"+(c=="M"?"Month":"Year")]=e["draw"+(c=="M"?"Month":"Year")]=parseInt(b.options[b.selectedIndex].value,10);this._notifyChange(e);this._adjustDate(a)},_clickMonthYear:function(a){var b= +this._getInst(d(a)[0]);b.input&&b._selectingMonthYear&&setTimeout(function(){b.input.focus()},0);b._selectingMonthYear=!b._selectingMonthYear},_selectDay:function(a,b,c,e){var f=d(a);if(!(d(e).hasClass(this._unselectableClass)||this._isDisabledDatepicker(f[0]))){f=this._getInst(f[0]);f.selectedDay=f.currentDay=d("a",e).html();f.selectedMonth=f.currentMonth=b;f.selectedYear=f.currentYear=c;this._selectDate(a,this._formatDate(f,f.currentDay,f.currentMonth,f.currentYear))}},_clearDate:function(a){a= +d(a);this._getInst(a[0]);this._selectDate(a,"")},_selectDate:function(a,b){a=this._getInst(d(a)[0]);b=b!=null?b:this._formatDate(a);a.input&&a.input.val(b);this._updateAlternate(a);var c=this._get(a,"onSelect");if(c)c.apply(a.input?a.input[0]:null,[b,a]);else a.input&&a.input.trigger("change");if(a.inline)this._updateDatepicker(a);else{this._hideDatepicker();this._lastInput=a.input[0];typeof a.input[0]!="object"&&a.input.focus();this._lastInput=null}},_updateAlternate:function(a){var b=this._get(a, +"altField");if(b){var c=this._get(a,"altFormat")||this._get(a,"dateFormat"),e=this._getDate(a),f=this.formatDate(c,e,this._getFormatConfig(a));d(b).each(function(){d(this).val(f)})}},noWeekends:function(a){a=a.getDay();return[a>0&&a<6,""]},iso8601Week:function(a){a=new Date(a.getTime());a.setDate(a.getDate()+4-(a.getDay()||7));var b=a.getTime();a.setMonth(0);a.setDate(1);return Math.floor(Math.round((b-a)/864E5)/7)+1},parseDate:function(a,b,c){if(a==null||b==null)throw"Invalid arguments";b=typeof b== +"object"?b.toString():b+"";if(b=="")return null;for(var e=(c?c.shortYearCutoff:null)||this._defaults.shortYearCutoff,f=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,h=(c?c.dayNames:null)||this._defaults.dayNames,i=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort,g=(c?c.monthNames:null)||this._defaults.monthNames,k=c=-1,l=-1,u=-1,j=false,o=function(p){(p=z+1 +-1){k=1;l=u;do{e=this._getDaysInMonth(c,k-1);if(l<=e)break;k++;l-=e}while(1)}v=this._daylightSavingAdjust(new Date(c,k-1,l));if(v.getFullYear()!=c||v.getMonth()+1!=k||v.getDate()!=l)throw"Invalid date";return v},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925))*24* +60*60*1E7,formatDate:function(a,b,c){if(!b)return"";var e=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,f=(c?c.dayNames:null)||this._defaults.dayNames,h=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort;c=(c?c.monthNames:null)||this._defaults.monthNames;var i=function(o){(o=j+112?a.getHours()+2:0);return a},_setDate:function(a,b,c){var e=!b,f=a.selectedMonth,h=a.selectedYear;b=this._restrictMinMax(a,this._determineDate(a,b,new Date));a.selectedDay=a.currentDay=b.getDate();a.drawMonth=a.selectedMonth=a.currentMonth=b.getMonth();a.drawYear=a.selectedYear=a.currentYear=b.getFullYear();if((f!=a.selectedMonth||h!=a.selectedYear)&&!c)this._notifyChange(a);this._adjustInstDate(a);if(a.input)a.input.val(e? +"":this._formatDate(a))},_getDate:function(a){return!a.currentYear||a.input&&a.input.val()==""?null:this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay))},_generateHTML:function(a){var b=new Date;b=this._daylightSavingAdjust(new Date(b.getFullYear(),b.getMonth(),b.getDate()));var c=this._get(a,"isRTL"),e=this._get(a,"showButtonPanel"),f=this._get(a,"hideIfNoPrevNext"),h=this._get(a,"navigationAsDateFormat"),i=this._getNumberOfMonths(a),g=this._get(a,"showCurrentAtPos"),k= +this._get(a,"stepMonths"),l=i[0]!=1||i[1]!=1,u=this._daylightSavingAdjust(!a.currentDay?new Date(9999,9,9):new Date(a.currentYear,a.currentMonth,a.currentDay)),j=this._getMinMaxDate(a,"min"),o=this._getMinMaxDate(a,"max");g=a.drawMonth-g;var m=a.drawYear;if(g<0){g+=12;m--}if(o){var n=this._daylightSavingAdjust(new Date(o.getFullYear(),o.getMonth()-i[0]*i[1]+1,o.getDate()));for(n=j&&nn;){g--;if(g<0){g=11;m--}}}a.drawMonth=g;a.drawYear=m;n=this._get(a, +"prevText");n=!h?n:this.formatDate(n,this._daylightSavingAdjust(new Date(m,g-k,1)),this._getFormatConfig(a));n=this._canAdjustMonth(a,-1,m,g)?''+n+"":f?"":''+ +n+"";var r=this._get(a,"nextText");r=!h?r:this.formatDate(r,this._daylightSavingAdjust(new Date(m,g+k,1)),this._getFormatConfig(a));f=this._canAdjustMonth(a,+1,m,g)?''+r+"":f?"":''+r+"";k=this._get(a,"currentText");r=this._get(a,"gotoCurrent")&&a.currentDay?u:b;k=!h?k:this.formatDate(k,r,this._getFormatConfig(a));h=!a.inline?'":"";e=e?'
    '+(c?h:"")+(this._isInRange(a,r)?'":"")+(c?"":h)+"
    ":"";h=parseInt(this._get(a,"firstDay"),10);h=isNaN(h)?0:h;k=this._get(a,"showWeek");r=this._get(a,"dayNames");this._get(a,"dayNamesShort");var s=this._get(a,"dayNamesMin"),z=this._get(a,"monthNames"),v=this._get(a,"monthNamesShort"),p=this._get(a,"beforeShowDay"),w=this._get(a,"showOtherMonths"),H=this._get(a,"selectOtherMonths");this._get(a,"calculateWeek");for(var M=this._getDefaultDate(a),I="",C=0;C1)switch(D){case 0:x+=" ui-datepicker-group-first";t=" ui-corner-"+(c?"right":"left");break;case i[1]-1:x+=" ui-datepicker-group-last";t=" ui-corner-"+(c?"left":"right");break;default:x+=" ui-datepicker-group-middle";t="";break}x+='">'}x+='
    '+(/all|left/.test(t)&&C==0?c? +f:n:"")+(/all|right/.test(t)&&C==0?c?n:f:"")+this._generateMonthYearHeader(a,g,m,j,o,C>0||D>0,z,v)+'
    ';var A=k?'":"";for(t=0;t<7;t++){var q=(t+h)%7;A+="=5?' class="ui-datepicker-week-end"':"")+'>'+s[q]+""}x+=A+"";A=this._getDaysInMonth(m,g);if(m==a.selectedYear&&g==a.selectedMonth)a.selectedDay=Math.min(a.selectedDay, +A);t=(this._getFirstDayOfMonth(m,g)-h+7)%7;A=l?6:Math.ceil((t+A)/7);q=this._daylightSavingAdjust(new Date(m,g,1-t));for(var O=0;O";var P=!k?"":'";for(t=0;t<7;t++){var F=p?p.apply(a.input?a.input[0]:null,[q]):[true,""],B=q.getMonth()!=g,K=B&&!H||!F[0]||j&&qo;P+='";q.setDate(q.getDate()+1);q=this._daylightSavingAdjust(q)}x+=P+""}g++;if(g>11){g=0;m++}x+="
    '+this._get(a,"weekHeader")+"
    '+this._get(a,"calculateWeek")(q)+""+(B&&!w?" ":K?''+q.getDate()+ +"":''+q.getDate()+"")+"
    "+(l?"
"+(i[0]>0&&D==i[1]-1?'
':""):"");N+=x}I+=N}I+=e+(d.browser.msie&&parseInt(d.browser.version,10)<7&&!a.inline?'': +"");a._keyEvent=false;return I},_generateMonthYearHeader:function(a,b,c,e,f,h,i,g){var k=this._get(a,"changeMonth"),l=this._get(a,"changeYear"),u=this._get(a,"showMonthAfterYear"),j='
',o="";if(h||!k)o+=''+i[b]+"";else{i=e&&e.getFullYear()==c;var m=f&&f.getFullYear()==c;o+='"}u||(j+=o+(h||!(k&&l)?" ":""));if(h||!l)j+=''+c+"";else{g=this._get(a,"yearRange").split(":");var r=(new Date).getFullYear();i=function(s){s=s.match(/c[+-].*/)?c+parseInt(s.substring(1),10):s.match(/[+-].*/)?r+parseInt(s,10):parseInt(s,10);return isNaN(s)?r:s};b=i(g[0]);g=Math.max(b, +i(g[1]||""));b=e?Math.max(b,e.getFullYear()):b;g=f?Math.min(g,f.getFullYear()):g;for(j+='"}j+=this._get(a,"yearSuffix");if(u)j+=(h||!(k&&l)?" ":"")+o;j+="
";return j},_adjustInstDate:function(a,b,c){var e= +a.drawYear+(c=="Y"?b:0),f=a.drawMonth+(c=="M"?b:0);b=Math.min(a.selectedDay,this._getDaysInMonth(e,f))+(c=="D"?b:0);e=this._restrictMinMax(a,this._daylightSavingAdjust(new Date(e,f,b)));a.selectedDay=e.getDate();a.drawMonth=a.selectedMonth=e.getMonth();a.drawYear=a.selectedYear=e.getFullYear();if(c=="M"||c=="Y")this._notifyChange(a)},_restrictMinMax:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,"max");b=c&&ba?a:b},_notifyChange:function(a){var b=this._get(a, +"onChangeMonthYear");if(b)b.apply(a.input?a.input[0]:null,[a.selectedYear,a.selectedMonth+1,a])},_getNumberOfMonths:function(a){a=this._get(a,"numberOfMonths");return a==null?[1,1]:typeof a=="number"?[1,a]:a},_getMinMaxDate:function(a,b){return this._determineDate(a,this._get(a,b+"Date"),null)},_getDaysInMonth:function(a,b){return 32-(new Date(a,b,32)).getDate()},_getFirstDayOfMonth:function(a,b){return(new Date(a,b,1)).getDay()},_canAdjustMonth:function(a,b,c,e){var f=this._getNumberOfMonths(a); +c=this._daylightSavingAdjust(new Date(c,e+(b<0?b:f[0]*f[1]),1));b<0&&c.setDate(this._getDaysInMonth(c.getFullYear(),c.getMonth()));return this._isInRange(a,c)},_isInRange:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,"max");return(!c||b.getTime()>=c.getTime())&&(!a||b.getTime()<=a.getTime())},_getFormatConfig:function(a){var b=this._get(a,"shortYearCutoff");b=typeof b!="string"?b:(new Date).getFullYear()%100+parseInt(b,10);return{shortYearCutoff:b,dayNamesShort:this._get(a, +"dayNamesShort"),dayNames:this._get(a,"dayNames"),monthNamesShort:this._get(a,"monthNamesShort"),monthNames:this._get(a,"monthNames")}},_formatDate:function(a,b,c,e){if(!b){a.currentDay=a.selectedDay;a.currentMonth=a.selectedMonth;a.currentYear=a.selectedYear}b=b?typeof b=="object"?b:this._daylightSavingAdjust(new Date(e,c,b)):this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay));return this.formatDate(this._get(a,"dateFormat"),b,this._getFormatConfig(a))}});d.fn.datepicker= +function(a){if(!d.datepicker.initialized){d(document).mousedown(d.datepicker._checkExternalClick).find("body").append(d.datepicker.dpDiv);d.datepicker.initialized=true}var b=Array.prototype.slice.call(arguments,1);if(typeof a=="string"&&(a=="isDisabled"||a=="getDate"||a=="widget"))return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this[0]].concat(b));if(a=="option"&&arguments.length==2&&typeof arguments[1]=="string")return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this[0]].concat(b)); +return this.each(function(){typeof a=="string"?d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this].concat(b)):d.datepicker._attachDatepicker(this,a)})};d.datepicker=new L;d.datepicker.initialized=false;d.datepicker.uuid=(new Date).getTime();d.datepicker.version="1.8.5";window["DP_jQuery_"+y]=d})(jQuery); +; --- /dev/null +++ b/busui/js/jquery-1.5.js @@ -1,1 +1,8177 @@ - +/*! + * jQuery JavaScript Library v1.5 + * http://jquery.com/ + * + * Copyright 2011, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Mon Jan 31 08:31:29 2011 -0500 + */ +(function( window, undefined ) { + +// Use the correct document accordingly with window argument (sandbox) +var document = window.document; +var jQuery = (function() { + +// Define a local copy of jQuery +var jQuery = function( selector, context ) { + // The jQuery object is actually just the init constructor 'enhanced' + return new jQuery.fn.init( selector, context, rootjQuery ); + }, + + // Map over jQuery in case of overwrite + _jQuery = window.jQuery, + + // Map over the $ in case of overwrite + _$ = window.$, + + // A central reference to the root jQuery(document) + rootjQuery, + + // A simple way to check for HTML strings or ID strings + // (both of which we optimize for) + quickExpr = /^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]+)$)/, + + // Check if a string has a non-whitespace character in it + rnotwhite = /\S/, + + // Used for trimming whitespace + trimLeft = /^\s+/, + trimRight = /\s+$/, + + // Check for digits + rdigit = /\d/, + + // Match a standalone tag + rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/, + + // JSON RegExp + rvalidchars = /^[\],:{}\s]*$/, + rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, + rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, + rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g, + + // Useragent RegExp + rwebkit = /(webkit)[ \/]([\w.]+)/, + ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/, + rmsie = /(msie) ([\w.]+)/, + rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/, + + // Keep a UserAgent string for use with jQuery.browser + userAgent = navigator.userAgent, + + // For matching the engine and version of the browser + browserMatch, + + // Has the ready events already been bound? + readyBound = false, + + // The deferred used on DOM ready + readyList, + + // Promise methods + promiseMethods = "then done fail isResolved isRejected promise".split( " " ), + + // The ready event handler + DOMContentLoaded, + + // Save a reference to some core methods + toString = Object.prototype.toString, + hasOwn = Object.prototype.hasOwnProperty, + push = Array.prototype.push, + slice = Array.prototype.slice, + trim = String.prototype.trim, + indexOf = Array.prototype.indexOf, + + // [[Class]] -> type pairs + class2type = {}; + +jQuery.fn = jQuery.prototype = { + constructor: jQuery, + init: function( selector, context, rootjQuery ) { + var match, elem, ret, doc; + + // Handle $(""), $(null), or $(undefined) + if ( !selector ) { + return this; + } + + // Handle $(DOMElement) + if ( selector.nodeType ) { + this.context = this[0] = selector; + this.length = 1; + return this; + } + + // The body element only exists once, optimize finding it + if ( selector === "body" && !context && document.body ) { + this.context = document; + this[0] = document.body; + this.selector = "body"; + this.length = 1; + return this; + } + + // Handle HTML strings + if ( typeof selector === "string" ) { + // Are we dealing with HTML string or an ID? + match = quickExpr.exec( selector ); + + // Verify a match, and that no context was specified for #id + if ( match && (match[1] || !context) ) { + + // HANDLE: $(html) -> $(array) + if ( match[1] ) { + context = context instanceof jQuery ? context[0] : context; + doc = (context ? context.ownerDocument || context : document); + + // If a single string is passed in and it's a single tag + // just do a createElement and skip the rest + ret = rsingleTag.exec( selector ); + + if ( ret ) { + if ( jQuery.isPlainObject( context ) ) { + selector = [ document.createElement( ret[1] ) ]; + jQuery.fn.attr.call( selector, context, true ); + + } else { + selector = [ doc.createElement( ret[1] ) ]; + } + + } else { + ret = jQuery.buildFragment( [ match[1] ], [ doc ] ); + selector = (ret.cacheable ? jQuery.clone(ret.fragment) : ret.fragment).childNodes; + } + + return jQuery.merge( this, selector ); + + // HANDLE: $("#id") + } else { + elem = document.getElementById( match[2] ); + + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + // Handle the case where IE and Opera return items + // by name instead of ID + if ( elem.id !== match[2] ) { + return rootjQuery.find( selector ); + } + + // Otherwise, we inject the element directly into the jQuery object + this.length = 1; + this[0] = elem; + } + + this.context = document; + this.selector = selector; + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return (context || rootjQuery).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( jQuery.isFunction( selector ) ) { + return rootjQuery.ready( selector ); + } + + if (selector.selector !== undefined) { + this.selector = selector.selector; + this.context = selector.context; + } + + return jQuery.makeArray( selector, this ); + }, + + // Start with an empty selector + selector: "", + + // The current version of jQuery being used + jquery: "1.5", + + // The default length of a jQuery object is 0 + length: 0, + + // The number of elements contained in the matched element set + size: function() { + return this.length; + }, + + toArray: function() { + return slice.call( this, 0 ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + return num == null ? + + // Return a 'clean' array + this.toArray() : + + // Return just the object + ( num < 0 ? this[ this.length + num ] : this[ num ] ); + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems, name, selector ) { + // Build a new jQuery matched element set + var ret = this.constructor(); + + if ( jQuery.isArray( elems ) ) { + push.apply( ret, elems ); + + } else { + jQuery.merge( ret, elems ); + } + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + ret.context = this.context; + + if ( name === "find" ) { + ret.selector = this.selector + (this.selector ? " " : "") + selector; + } else if ( name ) { + ret.selector = this.selector + "." + name + "(" + selector + ")"; + } + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + // (You can seed the arguments with an array of args, but this is + // only used internally.) + each: function( callback, args ) { + return jQuery.each( this, callback, args ); + }, + + ready: function( fn ) { + // Attach the listeners + jQuery.bindReady(); + + // Add the callback + readyList.done( fn ); + + return this; + }, + + eq: function( i ) { + return i === -1 ? + this.slice( i ) : + this.slice( i, +i + 1 ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ), + "slice", slice.call(arguments).join(",") ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map(this, function( elem, i ) { + return callback.call( elem, i, elem ); + })); + }, + + end: function() { + return this.prevObject || this.constructor(null); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: [].sort, + splice: [].splice +}; + +// Give the init function the jQuery prototype for later instantiation +jQuery.fn.init.prototype = jQuery.fn; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[0] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + target = arguments[1] || {}; + // skip the boolean and the target + i = 2; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !jQuery.isFunction(target) ) { + target = {}; + } + + // extend jQuery itself if only one argument is passed + if ( length === i ) { + target = this; + --i; + } + + for ( ; i < length; i++ ) { + // Only deal with non-null/undefined values + if ( (options = arguments[ i ]) != null ) { + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) { + if ( copyIsArray ) { + copyIsArray = false; + clone = src && jQuery.isArray(src) ? src : []; + + } else { + clone = src && jQuery.isPlainObject(src) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend({ + noConflict: function( deep ) { + window.$ = _$; + + if ( deep ) { + window.jQuery = _jQuery; + } + + return jQuery; + }, + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Handle when the DOM is ready + ready: function( wait ) { + // A third-party is pushing the ready event forwards + if ( wait === true ) { + jQuery.readyWait--; + } + + // Make sure that the DOM is not already loaded + if ( !jQuery.readyWait || (wait !== true && !jQuery.isReady) ) { + // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). + if ( !document.body ) { + return setTimeout( jQuery.ready, 1 ); + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + + // Trigger any bound ready events + if ( jQuery.fn.trigger ) { + jQuery( document ).trigger( "ready" ).unbind( "ready" ); + } + } + }, + + bindReady: function() { + if ( readyBound ) { + return; + } + + readyBound = true; + + // Catch cases where $(document).ready() is called after the + // browser event has already occurred. + if ( document.readyState === "complete" ) { + // Handle it asynchronously to allow scripts the opportunity to delay ready + return setTimeout( jQuery.ready, 1 ); + } + + // Mozilla, Opera and webkit nightlies currently support this event + if ( document.addEventListener ) { + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", jQuery.ready, false ); + + // If IE event model is used + } else if ( document.attachEvent ) { + // ensure firing before onload, + // maybe late but safe also for iframes + document.attachEvent("onreadystatechange", DOMContentLoaded); + + // A fallback to window.onload, that will always work + window.attachEvent( "onload", jQuery.ready ); + + // If IE and not a frame + // continually check to see if the document is ready + var toplevel = false; + + try { + toplevel = window.frameElement == null; + } catch(e) {} + + if ( document.documentElement.doScroll && toplevel ) { + doScrollCheck(); + } + } + }, + + // See test/unit/core.js for details concerning isFunction. + // Since version 1.3, DOM methods and functions like alert + // aren't supported. They return false on IE (#2968). + isFunction: function( obj ) { + return jQuery.type(obj) === "function"; + }, + + isArray: Array.isArray || function( obj ) { + return jQuery.type(obj) === "array"; + }, + + // A crude way of determining if an object is a window + isWindow: function( obj ) { + return obj && typeof obj === "object" && "setInterval" in obj; + }, + + isNaN: function( obj ) { + return obj == null || !rdigit.test( obj ) || isNaN( obj ); + }, + + type: function( obj ) { + return obj == null ? + String( obj ) : + class2type[ toString.call(obj) ] || "object"; + }, + + isPlainObject: function( obj ) { + // Must be an Object. + // Because of IE, we also have to check the presence of the constructor property. + // Make sure that DOM nodes and window objects don't pass through, as well + if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { + return false; + } + + // Not own constructor property must be Object + if ( obj.constructor && + !hasOwn.call(obj, "constructor") && + !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) { + return false; + } + + // Own properties are enumerated firstly, so to speed up, + // if last one is own, then all properties are own. + + var key; + for ( key in obj ) {} + + return key === undefined || hasOwn.call( obj, key ); + }, + + isEmptyObject: function( obj ) { + for ( var name in obj ) { + return false; + } + return true; + }, + + error: function( msg ) { + throw msg; + }, + + parseJSON: function( data ) { + if ( typeof data !== "string" || !data ) { + return null; + } + + // Make sure leading/trailing whitespace is removed (IE can't handle it) + data = jQuery.trim( data ); + + // Make sure the incoming data is actual JSON + // Logic borrowed from http://json.org/json2.js + if ( rvalidchars.test(data.replace(rvalidescape, "@") + .replace(rvalidtokens, "]") + .replace(rvalidbraces, "")) ) { + + // Try to use the native JSON parser first + return window.JSON && window.JSON.parse ? + window.JSON.parse( data ) : + (new Function("return " + data))(); + + } else { + jQuery.error( "Invalid JSON: " + data ); + } + }, + + // Cross-browser xml parsing + // (xml & tmp used internally) + parseXML: function( data , xml , tmp ) { + + if ( window.DOMParser ) { // Standard + tmp = new DOMParser(); + xml = tmp.parseFromString( data , "text/xml" ); + } else { // IE + xml = new ActiveXObject( "Microsoft.XMLDOM" ); + xml.async = "false"; + xml.loadXML( data ); + } + + tmp = xml.documentElement; + + if ( ! tmp || ! tmp.nodeName || tmp.nodeName === "parsererror" ) { + jQuery.error( "Invalid XML: " + data ); + } + + return xml; + }, + + noop: function() {}, + + // Evalulates a script in a global context + globalEval: function( data ) { + if ( data && rnotwhite.test(data) ) { + // Inspired by code by Andrea Giammarchi + // http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html + var head = document.getElementsByTagName("head")[0] || document.documentElement, + script = document.createElement("script"); + + script.type = "text/javascript"; + + if ( jQuery.support.scriptEval() ) { + script.appendChild( document.createTextNode( data ) ); + } else { + script.text = data; + } + + // Use insertBefore instead of appendChild to circumvent an IE6 bug. + // This arises when a base node is used (#2709). + head.insertBefore( script, head.firstChild ); + head.removeChild( script ); + } + }, + + nodeName: function( elem, name ) { + return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase(); + }, + + // args is for internal usage only + each: function( object, callback, args ) { + var name, i = 0, + length = object.length, + isObj = length === undefined || jQuery.isFunction(object); + + if ( args ) { + if ( isObj ) { + for ( name in object ) { + if ( callback.apply( object[ name ], args ) === false ) { + break; + } + } + } else { + for ( ; i < length; ) { + if ( callback.apply( object[ i++ ], args ) === false ) { + break; + } + } + } + + // A special, fast, case for the most common use of each + } else { + if ( isObj ) { + for ( name in object ) { + if ( callback.call( object[ name ], name, object[ name ] ) === false ) { + break; + } + } + } else { + for ( var value = object[0]; + i < length && callback.call( value, i, value ) !== false; value = object[++i] ) {} + } + } + + return object; + }, + + // Use native String.trim function wherever possible + trim: trim ? + function( text ) { + return text == null ? + "" : + trim.call( text ); + } : + + // Otherwise use our own trimming functionality + function( text ) { + return text == null ? + "" : + text.toString().replace( trimLeft, "" ).replace( trimRight, "" ); + }, + + // results is for internal usage only + makeArray: function( array, results ) { + var ret = results || []; + + if ( array != null ) { + // The window, strings (and functions) also have 'length' + // The extra typeof function check is to prevent crashes + // in Safari 2 (See: #3039) + // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930 + var type = jQuery.type(array); + + if ( array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( array ) ) { + push.call( ret, array ); + } else { + jQuery.merge( ret, array ); + } + } + + return ret; + }, + + inArray: function( elem, array ) { + if ( array.indexOf ) { + return array.indexOf( elem ); + } + + for ( var i = 0, length = array.length; i < length; i++ ) { + if ( array[ i ] === elem ) { + return i; + } + } + + return -1; + }, + + merge: function( first, second ) { + var i = first.length, + j = 0; + + if ( typeof second.length === "number" ) { + for ( var l = second.length; j < l; j++ ) { + first[ i++ ] = second[ j ]; + } + + } else { + while ( second[j] !== undefined ) { + first[ i++ ] = second[ j++ ]; + } + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, inv ) { + var ret = [], retVal; + inv = !!inv; + + // Go through the array, only saving the items + // that pass the validator function + for ( var i = 0, length = elems.length; i < length; i++ ) { + retVal = !!callback( elems[ i ], i ); + if ( inv !== retVal ) { + ret.push( elems[ i ] ); + } + } + + return ret; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var ret = [], value; + + // Go through the array, translating each of the items to their + // new value (or values). + for ( var i = 0, length = elems.length; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret[ ret.length ] = value; + } + } + + // Flatten any nested arrays + return ret.concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + proxy: function( fn, proxy, thisObject ) { + if ( arguments.length === 2 ) { + if ( typeof proxy === "string" ) { + thisObject = fn; + fn = thisObject[ proxy ]; + proxy = undefined; + + } else if ( proxy && !jQuery.isFunction( proxy ) ) { + thisObject = proxy; + proxy = undefined; + } + } + + if ( !proxy && fn ) { + proxy = function() { + return fn.apply( thisObject || this, arguments ); + }; + } + + // Set the guid of unique handler to the same of original handler, so it can be removed + if ( fn ) { + proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++; + } + + // So proxy can be declared as an argument + return proxy; + }, + + // Mutifunctional method to get and set values to a collection + // The value/s can be optionally by executed if its a function + access: function( elems, key, value, exec, fn, pass ) { + var length = elems.length; + + // Setting many attributes + if ( typeof key === "object" ) { + for ( var k in key ) { + jQuery.access( elems, k, key[k], exec, fn, value ); + } + return elems; + } + + // Setting one attribute + if ( value !== undefined ) { + // Optionally, function values get executed if exec is true + exec = !pass && exec && jQuery.isFunction(value); + + for ( var i = 0; i < length; i++ ) { + fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass ); + } + + return elems; + } + + // Getting an attribute + return length ? fn( elems[0], key ) : undefined; + }, + + now: function() { + return (new Date()).getTime(); + }, + + // Create a simple deferred (one callbacks list) + _Deferred: function() { + var // callbacks list + callbacks = [], + // stored [ context , args ] + fired, + // to avoid firing when already doing so + firing, + // flag to know if the deferred has been cancelled + cancelled, + // the deferred itself + deferred = { + + // done( f1, f2, ...) + done: function() { + if ( !cancelled ) { + var args = arguments, + i, + length, + elem, + type, + _fired; + if ( fired ) { + _fired = fired; + fired = 0; + } + for ( i = 0, length = args.length; i < length; i++ ) { + elem = args[ i ]; + type = jQuery.type( elem ); + if ( type === "array" ) { + deferred.done.apply( deferred, elem ); + } else if ( type === "function" ) { + callbacks.push( elem ); + } + } + if ( _fired ) { + deferred.resolveWith( _fired[ 0 ], _fired[ 1 ] ); + } + } + return this; + }, + + // resolve with given context and args + resolveWith: function( context, args ) { + if ( !cancelled && !fired && !firing ) { + firing = 1; + try { + while( callbacks[ 0 ] ) { + callbacks.shift().apply( context, args ); + } + } + finally { + fired = [ context, args ]; + firing = 0; + } + } + return this; + }, + + // resolve with this as context and given arguments + resolve: function() { + deferred.resolveWith( jQuery.isFunction( this.promise ) ? this.promise() : this, arguments ); + return this; + }, + + // Has this deferred been resolved? + isResolved: function() { + return !!( firing || fired ); + }, + + // Cancel + cancel: function() { + cancelled = 1; + callbacks = []; + return this; + } + }; + + return deferred; + }, + + // Full fledged deferred (two callbacks list) + Deferred: function( func ) { + var deferred = jQuery._Deferred(), + failDeferred = jQuery._Deferred(), + promise; + // Add errorDeferred methods, then and promise + jQuery.extend( deferred, { + then: function( doneCallbacks, failCallbacks ) { + deferred.done( doneCallbacks ).fail( failCallbacks ); + return this; + }, + fail: failDeferred.done, + rejectWith: failDeferred.resolveWith, + reject: failDeferred.resolve, + isRejected: failDeferred.isResolved, + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj , i /* internal */ ) { + if ( obj == null ) { + if ( promise ) { + return promise; + } + promise = obj = {}; + } + i = promiseMethods.length; + while( i-- ) { + obj[ promiseMethods[ i ] ] = deferred[ promiseMethods[ i ] ]; + } + return obj; + } + } ); + // Make sure only one callback list will be used + deferred.then( failDeferred.cancel, deferred.cancel ); + // Unexpose cancel + delete deferred.cancel; + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + return deferred; + }, + + // Deferred helper + when: function( object ) { + var args = arguments, + length = args.length, + deferred = length <= 1 && object && jQuery.isFunction( object.promise ) ? + object : + jQuery.Deferred(), + promise = deferred.promise(), + resolveArray; + + if ( length > 1 ) { + resolveArray = new Array( length ); + jQuery.each( args, function( index, element ) { + jQuery.when( element ).then( function( value ) { + resolveArray[ index ] = arguments.length > 1 ? slice.call( arguments, 0 ) : value; + if( ! --length ) { + deferred.resolveWith( promise, resolveArray ); + } + }, deferred.reject ); + } ); + } else if ( deferred !== object ) { + deferred.resolve( object ); + } + return promise; + }, + + // Use of jQuery.browser is frowned upon. + // More details: http://docs.jquery.com/Utilities/jQuery.browser + uaMatch: function( ua ) { + ua = ua.toLowerCase(); + + var match = rwebkit.exec( ua ) || + ropera.exec( ua ) || + rmsie.exec( ua ) || + ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) || + []; + + return { browser: match[1] || "", version: match[2] || "0" }; + }, + + sub: function() { + function jQuerySubclass( selector, context ) { + return new jQuerySubclass.fn.init( selector, context ); + } + jQuery.extend( true, jQuerySubclass, this ); + jQuerySubclass.superclass = this; + jQuerySubclass.fn = jQuerySubclass.prototype = this(); + jQuerySubclass.fn.constructor = jQuerySubclass; + jQuerySubclass.subclass = this.subclass; + jQuerySubclass.fn.init = function init( selector, context ) { + if ( context && context instanceof jQuery && !(context instanceof jQuerySubclass) ) { + context = jQuerySubclass(context); + } + + return jQuery.fn.init.call( this, selector, context, rootjQuerySubclass ); + }; + jQuerySubclass.fn.init.prototype = jQuerySubclass.fn; + var rootjQuerySubclass = jQuerySubclass(document); + return jQuerySubclass; + }, + + browser: {} +}); + +// Create readyList deferred +readyList = jQuery._Deferred(); + +// Populate the class2type map +jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +}); + +browserMatch = jQuery.uaMatch( userAgent ); +if ( browserMatch.browser ) { + jQuery.browser[ browserMatch.browser ] = true; + jQuery.browser.version = browserMatch.version; +} + +// Deprecated, use jQuery.browser.webkit instead +if ( jQuery.browser.webkit ) { + jQuery.browser.safari = true; +} + +if ( indexOf ) { + jQuery.inArray = function( elem, array ) { + return indexOf.call( array, elem ); + }; +} + +// IE doesn't match non-breaking spaces with \s +if ( rnotwhite.test( "\xA0" ) ) { + trimLeft = /^[\s\xA0]+/; + trimRight = /[\s\xA0]+$/; +} + +// All jQuery objects should point back to these +rootjQuery = jQuery(document); + +// Cleanup functions for the document ready method +if ( document.addEventListener ) { + DOMContentLoaded = function() { + document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false ); + jQuery.ready(); + }; + +} else if ( document.attachEvent ) { + DOMContentLoaded = function() { + // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). + if ( document.readyState === "complete" ) { + document.detachEvent( "onreadystatechange", DOMContentLoaded ); + jQuery.ready(); + } + }; +} + +// The DOM ready check for Internet Explorer +function doScrollCheck() { + if ( jQuery.isReady ) { + return; + } + + try { + // If IE is used, use the trick by Diego Perini + // http://javascript.nwbox.com/IEContentLoaded/ + document.documentElement.doScroll("left"); + } catch(e) { + setTimeout( doScrollCheck, 1 ); + return; + } + + // and execute any waiting functions + jQuery.ready(); +} + +// Expose jQuery to the global object +return (window.jQuery = window.$ = jQuery); + +})(); + + +(function() { + + jQuery.support = {}; + + var div = document.createElement("div"); + + div.style.display = "none"; + div.innerHTML = "
a"; + + var all = div.getElementsByTagName("*"), + a = div.getElementsByTagName("a")[0], + select = document.createElement("select"), + opt = select.appendChild( document.createElement("option") ); + + // Can't get basic test support + if ( !all || !all.length || !a ) { + return; + } + + jQuery.support = { + // IE strips leading whitespace when .innerHTML is used + leadingWhitespace: div.firstChild.nodeType === 3, + + // Make sure that tbody elements aren't automatically inserted + // IE will insert them into empty tables + tbody: !div.getElementsByTagName("tbody").length, + + // Make sure that link elements get serialized correctly by innerHTML + // This requires a wrapper element in IE + htmlSerialize: !!div.getElementsByTagName("link").length, + + // Get the style information from getAttribute + // (IE uses .cssText insted) + style: /red/.test( a.getAttribute("style") ), + + // Make sure that URLs aren't manipulated + // (IE normalizes it by default) + hrefNormalized: a.getAttribute("href") === "/a", + + // Make sure that element opacity exists + // (IE uses filter instead) + // Use a regex to work around a WebKit issue. See #5145 + opacity: /^0.55$/.test( a.style.opacity ), + + // Verify style float existence + // (IE uses styleFloat instead of cssFloat) + cssFloat: !!a.style.cssFloat, + + // Make sure that if no value is specified for a checkbox + // that it defaults to "on". + // (WebKit defaults to "" instead) + checkOn: div.getElementsByTagName("input")[0].value === "on", + + // Make sure that a selected-by-default option has a working selected property. + // (WebKit defaults to false instead of true, IE too, if it's in an optgroup) + optSelected: opt.selected, + + // Will be defined later + deleteExpando: true, + optDisabled: false, + checkClone: false, + _scriptEval: null, + noCloneEvent: true, + boxModel: null, + inlineBlockNeedsLayout: false, + shrinkWrapBlocks: false, + reliableHiddenOffsets: true + }; + + // Make sure that the options inside disabled selects aren't marked as disabled + // (WebKit marks them as diabled) + select.disabled = true; + jQuery.support.optDisabled = !opt.disabled; + + jQuery.support.scriptEval = function() { + if ( jQuery.support._scriptEval === null ) { + var root = document.documentElement, + script = document.createElement("script"), + id = "script" + jQuery.now(); + + script.type = "text/javascript"; + try { + script.appendChild( document.createTextNode( "window." + id + "=1;" ) ); + } catch(e) {} + + root.insertBefore( script, root.firstChild ); + + // Make sure that the execution of code works by injecting a script + // tag with appendChild/createTextNode + // (IE doesn't support this, fails, and uses .text instead) + if ( window[ id ] ) { + jQuery.support._scriptEval = true; + delete window[ id ]; + } else { + jQuery.support._scriptEval = false; + } + + root.removeChild( script ); + // release memory in IE + root = script = id = null; + } + + return jQuery.support._scriptEval; + }; + + // Test to see if it's possible to delete an expando from an element + // Fails in Internet Explorer + try { + delete div.test; + + } catch(e) { + jQuery.support.deleteExpando = false; + } + + if ( div.attachEvent && div.fireEvent ) { + div.attachEvent("onclick", function click() { + // Cloning a node shouldn't copy over any + // bound event handlers (IE does this) + jQuery.support.noCloneEvent = false; + div.detachEvent("onclick", click); + }); + div.cloneNode(true).fireEvent("onclick"); + } + + div = document.createElement("div"); + div.innerHTML = ""; + + var fragment = document.createDocumentFragment(); + fragment.appendChild( div.firstChild ); + + // WebKit doesn't clone checked state correctly in fragments + jQuery.support.checkClone = fragment.cloneNode(true).cloneNode(true).lastChild.checked; + + // Figure out if the W3C box model works as expected + // document.body must exist before we can do this + jQuery(function() { + var div = document.createElement("div"), + body = document.getElementsByTagName("body")[0]; + + // Frameset documents with no body should not run this code + if ( !body ) { + return; + } + + div.style.width = div.style.paddingLeft = "1px"; + body.appendChild( div ); + jQuery.boxModel = jQuery.support.boxModel = div.offsetWidth === 2; + + if ( "zoom" in div.style ) { + // Check if natively block-level elements act like inline-block + // elements when setting their display to 'inline' and giving + // them layout + // (IE < 8 does this) + div.style.display = "inline"; + div.style.zoom = 1; + jQuery.support.inlineBlockNeedsLayout = div.offsetWidth === 2; + + // Check if elements with layout shrink-wrap their children + // (IE 6 does this) + div.style.display = ""; + div.innerHTML = "
"; + jQuery.support.shrinkWrapBlocks = div.offsetWidth !== 2; + } + + div.innerHTML = "
t
"; + var tds = div.getElementsByTagName("td"); + + // Check if table cells still have offsetWidth/Height when they are set + // to display:none and there are still other visible table cells in a + // table row; if so, offsetWidth/Height are not reliable for use when + // determining if an element has been hidden directly using + // display:none (it is still safe to use offsets if a parent element is + // hidden; don safety goggles and see bug #4512 for more information). + // (only IE 8 fails this test) + jQuery.support.reliableHiddenOffsets = tds[0].offsetHeight === 0; + + tds[0].style.display = ""; + tds[1].style.display = "none"; + + // Check if empty table cells still have offsetWidth/Height + // (IE < 8 fail this test) + jQuery.support.reliableHiddenOffsets = jQuery.support.reliableHiddenOffsets && tds[0].offsetHeight === 0; + div.innerHTML = ""; + + body.removeChild( div ).style.display = "none"; + div = tds = null; + }); + + // Technique from Juriy Zaytsev + // http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/ + var eventSupported = function( eventName ) { + var el = document.createElement("div"); + eventName = "on" + eventName; + + // We only care about the case where non-standard event systems + // are used, namely in IE. Short-circuiting here helps us to + // avoid an eval call (in setAttribute) which can cause CSP + // to go haywire. See: https://developer.mozilla.org/en/Security/CSP + if ( !el.attachEvent ) { + return true; + } + + var isSupported = (eventName in el); + if ( !isSupported ) { + el.setAttribute(eventName, "return;"); + isSupported = typeof el[eventName] === "function"; + } + el = null; + + return isSupported; + }; + + jQuery.support.submitBubbles = eventSupported("submit"); + jQuery.support.changeBubbles = eventSupported("change"); + + // release memory in IE + div = all = a = null; +})(); + + + +var rbrace = /^(?:\{.*\}|\[.*\])$/; + +jQuery.extend({ + cache: {}, + + // Please use with caution + uuid: 0, + + // Unique for each copy of jQuery on the page + // Non-digits removed to match rinlinejQuery + expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ), + + // The following elements throw uncatchable exceptions if you + // attempt to add expando properties to them. + noData: { + "embed": true, + // Ban all objects except for Flash (which handle expandos) + "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000", + "applet": true + }, + + hasData: function( elem ) { + elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ]; + + return !!elem && !jQuery.isEmptyObject(elem); + }, + + data: function( elem, name, data, pvt /* Internal Use Only */ ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var internalKey = jQuery.expando, getByName = typeof name === "string", thisCache, + + // We have to handle DOM nodes and JS objects differently because IE6-7 + // can't GC object references properly across the DOM-JS boundary + isNode = elem.nodeType, + + // Only DOM nodes need the global jQuery cache; JS object data is + // attached directly to the object so GC can occur automatically + cache = isNode ? jQuery.cache : elem, + + // Only defining an ID for JS objects if its cache already exists allows + // the code to shortcut on the same path as a DOM node with no cache + id = isNode ? elem[ jQuery.expando ] : elem[ jQuery.expando ] && jQuery.expando; + + // Avoid doing any more work than we need to when trying to get data on an + // object that has no data at all + if ( (!id || (pvt && id && !cache[ id ][ internalKey ])) && getByName && data === undefined ) { + return; + } + + if ( !id ) { + // Only DOM nodes need a new unique ID for each element since their data + // ends up in the global cache + if ( isNode ) { + elem[ jQuery.expando ] = id = ++jQuery.uuid; + } else { + id = jQuery.expando; + } + } + + if ( !cache[ id ] ) { + cache[ id ] = {}; + } + + // An object can be passed to jQuery.data instead of a key/value pair; this gets + // shallow copied over onto the existing cache + if ( typeof name === "object" ) { + if ( pvt ) { + cache[ id ][ internalKey ] = jQuery.extend(cache[ id ][ internalKey ], name); + } else { + cache[ id ] = jQuery.extend(cache[ id ], name); + } + } + + thisCache = cache[ id ]; + + // Internal jQuery data is stored in a separate object inside the object's data + // cache in order to avoid key collisions between internal data and user-defined + // data + if ( pvt ) { + if ( !thisCache[ internalKey ] ) { + thisCache[ internalKey ] = {}; + } + + thisCache = thisCache[ internalKey ]; + } + + if ( data !== undefined ) { + thisCache[ name ] = data; + } + + // TODO: This is a hack for 1.5 ONLY. It will be removed in 1.6. Users should + // not attempt to inspect the internal events object using jQuery.data, as this + // internal data object is undocumented and subject to change. + if ( name === "events" && !thisCache[name] ) { + return thisCache[ internalKey ] && thisCache[ internalKey ].events; + } + + return getByName ? thisCache[ name ] : thisCache; + }, + + removeData: function( elem, name, pvt /* Internal Use Only */ ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var internalKey = jQuery.expando, isNode = elem.nodeType, + + // See jQuery.data for more information + cache = isNode ? jQuery.cache : elem, + + // See jQuery.data for more information + id = isNode ? elem[ jQuery.expando ] : jQuery.expando; + + // If there is already no cache entry for this object, there is no + // purpose in continuing + if ( !cache[ id ] ) { + return; + } + + if ( name ) { + var thisCache = pvt ? cache[ id ][ internalKey ] : cache[ id ]; + + if ( thisCache ) { + delete thisCache[ name ]; + + // If there is no data left in the cache, we want to continue + // and let the cache object itself get destroyed + if ( !jQuery.isEmptyObject(thisCache) ) { + return; + } + } + } + + // See jQuery.data for more information + if ( pvt ) { + delete cache[ id ][ internalKey ]; + + // Don't destroy the parent cache unless the internal data object + // had been the only thing left in it + if ( !jQuery.isEmptyObject(cache[ id ]) ) { + return; + } + } + + var internalCache = cache[ id ][ internalKey ]; + + // Browsers that fail expando deletion also refuse to delete expandos on + // the window, but it will allow it on all other JS objects; other browsers + // don't care + if ( jQuery.support.deleteExpando || cache != window ) { + delete cache[ id ]; + } else { + cache[ id ] = null; + } + + // We destroyed the entire user cache at once because it's faster than + // iterating through each key, but we need to continue to persist internal + // data if it existed + if ( internalCache ) { + cache[ id ] = {}; + cache[ id ][ internalKey ] = internalCache; + + // Otherwise, we need to eliminate the expando on the node to avoid + // false lookups in the cache for entries that no longer exist + } else if ( isNode ) { + // IE does not allow us to delete expando properties from nodes, + // nor does it have a removeAttribute function on Document nodes; + // we must handle all of these cases + if ( jQuery.support.deleteExpando ) { + delete elem[ jQuery.expando ]; + } else if ( elem.removeAttribute ) { + elem.removeAttribute( jQuery.expando ); + } else { + elem[ jQuery.expando ] = null; + } + } + }, + + // For internal use only. + _data: function( elem, name, data ) { + return jQuery.data( elem, name, data, true ); + }, + + // A method for determining if a DOM node can handle the data expando + acceptData: function( elem ) { + if ( elem.nodeName ) { + var match = jQuery.noData[ elem.nodeName.toLowerCase() ]; + + if ( match ) { + return !(match === true || elem.getAttribute("classid") !== match); + } + } + + return true; + } +}); + +jQuery.fn.extend({ + data: function( key, value ) { + var data = null; + + if ( typeof key === "undefined" ) { + if ( this.length ) { + data = jQuery.data( this[0] ); + + if ( this[0].nodeType === 1 ) { + var attr = this[0].attributes, name; + for ( var i = 0, l = attr.length; i < l; i++ ) { + name = attr[i].name; + + if ( name.indexOf( "data-" ) === 0 ) { + name = name.substr( 5 ); + dataAttr( this[0], name, data[ name ] ); + } + } + } + } + + return data; + + } else if ( typeof key === "object" ) { + return this.each(function() { + jQuery.data( this, key ); + }); + } + + var parts = key.split("."); + parts[1] = parts[1] ? "." + parts[1] : ""; + + if ( value === undefined ) { + data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]); + + // Try to fetch any internally stored data first + if ( data === undefined && this.length ) { + data = jQuery.data( this[0], key ); + data = dataAttr( this[0], key, data ); + } + + return data === undefined && parts[1] ? + this.data( parts[0] ) : + data; + + } else { + return this.each(function() { + var $this = jQuery( this ), + args = [ parts[0], value ]; + + $this.triggerHandler( "setData" + parts[1] + "!", args ); + jQuery.data( this, key, value ); + $this.triggerHandler( "changeData" + parts[1] + "!", args ); + }); + } + }, + + removeData: function( key ) { + return this.each(function() { + jQuery.removeData( this, key ); + }); + } +}); + +function dataAttr( elem, key, data ) { + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + data = elem.getAttribute( "data-" + key ); + + if ( typeof data === "string" ) { + try { + data = data === "true" ? true : + data === "false" ? false : + data === "null" ? null : + !jQuery.isNaN( data ) ? parseFloat( data ) : + rbrace.test( data ) ? jQuery.parseJSON( data ) : + data; + } catch( e ) {} + + // Make sure we set the data so it isn't changed later + jQuery.data( elem, key, data ); + + } else { + data = undefined; + } + } + + return data; +} + + + + +jQuery.extend({ + queue: function( elem, type, data ) { + if ( !elem ) { + return; + } + + type = (type || "fx") + "queue"; + var q = jQuery._data( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( !data ) { + return q || []; + } + + if ( !q || jQuery.isArray(data) ) { + q = jQuery._data( elem, type, jQuery.makeArray(data) ); + + } else { + q.push( data ); + } + + return q; + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + fn = queue.shift(); + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + } + + if ( fn ) { + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift("inprogress"); + } + + fn.call(elem, function() { + jQuery.dequeue(elem, type); + }); + } + + if ( !queue.length ) { + jQuery.removeData( elem, type + "queue", true ); + } + } +}); + +jQuery.fn.extend({ + queue: function( type, data ) { + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + } + + if ( data === undefined ) { + return jQuery.queue( this[0], type ); + } + return this.each(function( i ) { + var queue = jQuery.queue( this, type, data ); + + if ( type === "fx" && queue[0] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + }); + }, + dequeue: function( type ) { + return this.each(function() { + jQuery.dequeue( this, type ); + }); + }, + + // Based off of the plugin by Clint Helfers, with permission. + // http://blindsignals.com/index.php/2009/07/jquery-delay/ + delay: function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[time] || time : time; + type = type || "fx"; + + return this.queue( type, function() { + var elem = this; + setTimeout(function() { + jQuery.dequeue( elem, type ); + }, time ); + }); + }, + + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + } +}); + + + + +var rclass = /[\n\t\r]/g, + rspaces = /\s+/, + rreturn = /\r/g, + rspecialurl = /^(?:href|src|style)$/, + rtype = /^(?:button|input)$/i, + rfocusable = /^(?:button|input|object|select|textarea)$/i, + rclickable = /^a(?:rea)?$/i, + rradiocheck = /^(?:radio|checkbox)$/i; + +jQuery.props = { + "for": "htmlFor", + "class": "className", + readonly: "readOnly", + maxlength: "maxLength", + cellspacing: "cellSpacing", + rowspan: "rowSpan", + colspan: "colSpan", + tabindex: "tabIndex", + usemap: "useMap", + frameborder: "frameBorder" +}; + +jQuery.fn.extend({ + attr: function( name, value ) { + return jQuery.access( this, name, value, true, jQuery.attr ); + }, + + removeAttr: function( name, fn ) { + return this.each(function(){ + jQuery.attr( this, name, "" ); + if ( this.nodeType === 1 ) { + this.removeAttribute( name ); + } + }); + }, + + addClass: function( value ) { + if ( jQuery.isFunction(value) ) { + return this.each(function(i) { + var self = jQuery(this); + self.addClass( value.call(this, i, self.attr("class")) ); + }); + } + + if ( value && typeof value === "string" ) { + var classNames = (value || "").split( rspaces ); + + for ( var i = 0, l = this.length; i < l; i++ ) { + var elem = this[i]; + + if ( elem.nodeType === 1 ) { + if ( !elem.className ) { + elem.className = value; + + } else { + var className = " " + elem.className + " ", + setClass = elem.className; + + for ( var c = 0, cl = classNames.length; c < cl; c++ ) { + if ( className.indexOf( " " + classNames[c] + " " ) < 0 ) { + setClass += " " + classNames[c]; + } + } + elem.className = jQuery.trim( setClass ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + if ( jQuery.isFunction(value) ) { + return this.each(function(i) { + var self = jQuery(this); + self.removeClass( value.call(this, i, self.attr("class")) ); + }); + } + + if ( (value && typeof value === "string") || value === undefined ) { + var classNames = (value || "").split( rspaces ); + + for ( var i = 0, l = this.length; i < l; i++ ) { + var elem = this[i]; + + if ( elem.nodeType === 1 && elem.className ) { + if ( value ) { + var className = (" " + elem.className + " ").replace(rclass, " "); + for ( var c = 0, cl = classNames.length; c < cl; c++ ) { + className = className.replace(" " + classNames[c] + " ", " "); + } + elem.className = jQuery.trim( className ); + + } else { + elem.className = ""; + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, + isBool = typeof stateVal === "boolean"; + + if ( jQuery.isFunction( value ) ) { + return this.each(function(i) { + var self = jQuery(this); + self.toggleClass( value.call(this, i, self.attr("class"), stateVal), stateVal ); + }); + } + + return this.each(function() { + if ( type === "string" ) { + // toggle individual class names + var className, + i = 0, + self = jQuery( this ), + state = stateVal, + classNames = value.split( rspaces ); + + while ( (className = classNames[ i++ ]) ) { + // check each className given, space seperated list + state = isBool ? state : !self.hasClass( className ); + self[ state ? "addClass" : "removeClass" ]( className ); + } + + } else if ( type === "undefined" || type === "boolean" ) { + if ( this.className ) { + // store className if set + jQuery._data( this, "__className__", this.className ); + } + + // toggle whole className + this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || ""; + } + }); + }, + + hasClass: function( selector ) { + var className = " " + selector + " "; + for ( var i = 0, l = this.length; i < l; i++ ) { + if ( (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) { + return true; + } + } + + return false; + }, + + val: function( value ) { + if ( !arguments.length ) { + var elem = this[0]; + + if ( elem ) { + if ( jQuery.nodeName( elem, "option" ) ) { + // attributes.value is undefined in Blackberry 4.7 but + // uses .value. See #6932 + var val = elem.attributes.value; + return !val || val.specified ? elem.value : elem.text; + } + + // We need to handle select boxes special + if ( jQuery.nodeName( elem, "select" ) ) { + var index = elem.selectedIndex, + values = [], + options = elem.options, + one = elem.type === "select-one"; + + // Nothing was selected + if ( index < 0 ) { + return null; + } + + // Loop through all the selected options + for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) { + var option = options[ i ]; + + // Don't return options that are disabled or in a disabled optgroup + if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) && + (!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) { + + // Get the specific value for the option + value = jQuery(option).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + } + + // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified + if ( rradiocheck.test( elem.type ) && !jQuery.support.checkOn ) { + return elem.getAttribute("value") === null ? "on" : elem.value; + } + + // Everything else, we just grab the value + return (elem.value || "").replace(rreturn, ""); + + } + + return undefined; + } + + var isFunction = jQuery.isFunction(value); + + return this.each(function(i) { + var self = jQuery(this), val = value; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( isFunction ) { + val = value.call(this, i, self.val()); + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + } else if ( typeof val === "number" ) { + val += ""; + } else if ( jQuery.isArray(val) ) { + val = jQuery.map(val, function (value) { + return value == null ? "" : value + ""; + }); + } + + if ( jQuery.isArray(val) && rradiocheck.test( this.type ) ) { + this.checked = jQuery.inArray( self.val(), val ) >= 0; + + } else if ( jQuery.nodeName( this, "select" ) ) { + var values = jQuery.makeArray(val); + + jQuery( "option", this ).each(function() { + this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0; + }); + + if ( !values.length ) { + this.selectedIndex = -1; + } + + } else { + this.value = val; + } + }); + } +}); + +jQuery.extend({ + attrFn: { + val: true, + css: true, + html: true, + text: true, + data: true, + width: true, + height: true, + offset: true + }, + + attr: function( elem, name, value, pass ) { + // don't get/set attributes on text, comment and attribute nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || elem.nodeType === 2 ) { + return undefined; + } + + if ( pass && name in jQuery.attrFn ) { + return jQuery(elem)[name](value); + } + + var notxml = elem.nodeType !== 1 || !jQuery.isXMLDoc( elem ), + // Whether we are setting (or getting) + set = value !== undefined; + + // Try to normalize/fix the name + name = notxml && jQuery.props[ name ] || name; + + // Only do all the following if this is a node (faster for style) + if ( elem.nodeType === 1 ) { + // These attributes require special treatment + var special = rspecialurl.test( name ); + + // Safari mis-reports the default selected property of an option + // Accessing the parent's selectedIndex property fixes it + if ( name === "selected" && !jQuery.support.optSelected ) { + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + // Make sure that it also works with optgroups, see #5701 + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + + // If applicable, access the attribute via the DOM 0 way + // 'in' checks fail in Blackberry 4.7 #6931 + if ( (name in elem || elem[ name ] !== undefined) && notxml && !special ) { + if ( set ) { + // We can't allow the type property to be changed (since it causes problems in IE) + if ( name === "type" && rtype.test( elem.nodeName ) && elem.parentNode ) { + jQuery.error( "type property can't be changed" ); + } + + if ( value === null ) { + if ( elem.nodeType === 1 ) { + elem.removeAttribute( name ); + } + + } else { + elem[ name ] = value; + } + } + + // browsers index elements by id/name on forms, give priority to attributes. + if ( jQuery.nodeName( elem, "form" ) && elem.getAttributeNode(name) ) { + return elem.getAttributeNode( name ).nodeValue; + } + + // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set + // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + if ( name === "tabIndex" ) { + var attributeNode = elem.getAttributeNode( "tabIndex" ); + + return attributeNode && attributeNode.specified ? + attributeNode.value : + rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ? + 0 : + undefined; + } + + return elem[ name ]; + } + + if ( !jQuery.support.style && notxml && name === "style" ) { + if ( set ) { + elem.style.cssText = "" + value; + } + + return elem.style.cssText; + } + + if ( set ) { + // convert the value to a string (all browsers do this but IE) see #1070 + elem.setAttribute( name, "" + value ); + } + + // Ensure that missing attributes return undefined + // Blackberry 4.7 returns "" from getAttribute #6938 + if ( !elem.attributes[ name ] && (elem.hasAttribute && !elem.hasAttribute( name )) ) { + return undefined; + } + + var attr = !jQuery.support.hrefNormalized && notxml && special ? + // Some attributes require a special call on IE + elem.getAttribute( name, 2 ) : + elem.getAttribute( name ); + + // Non-existent attributes return null, we normalize to undefined + return attr === null ? undefined : attr; + } + // Handle everything which isn't a DOM element node + if ( set ) { + elem[ name ] = value; + } + return elem[ name ]; + } +}); + + + + +var rnamespaces = /\.(.*)$/, + rformElems = /^(?:textarea|input|select)$/i, + rperiod = /\./g, + rspace = / /g, + rescape = /[^\w\s.|`]/g, + fcleanup = function( nm ) { + return nm.replace(rescape, "\\$&"); + }, + eventKey = "events"; + +/* + * A number of helper functions used for managing events. + * Many of the ideas behind this code originated from + * Dean Edwards' addEvent library. + */ +jQuery.event = { + + // Bind an event to an element + // Original by Dean Edwards + add: function( elem, types, handler, data ) { + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // For whatever reason, IE has trouble passing the window object + // around, causing it to be cloned in the process + if ( jQuery.isWindow( elem ) && ( elem !== window && !elem.frameElement ) ) { + elem = window; + } + + if ( handler === false ) { + handler = returnFalse; + } else if ( !handler ) { + // Fixes bug #7229. Fix recommended by jdalton + return; + } + + var handleObjIn, handleObj; + + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + } + + // Make sure that the function being executed has a unique ID + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure + var elemData = jQuery._data( elem ); + + // If no elemData is found then we must be trying to bind to one of the + // banned noData elements + if ( !elemData ) { + return; + } + + var events = elemData[ eventKey ], + eventHandle = elemData.handle; + + if ( typeof events === "function" ) { + // On plain objects events is a fn that holds the the data + // which prevents this data from being JSON serialized + // the function does not need to be called, it just contains the data + eventHandle = events.handle; + events = events.events; + + } else if ( !events ) { + if ( !elem.nodeType ) { + // On plain objects, create a fn that acts as the holder + // of the values to avoid JSON serialization of event data + elemData[ eventKey ] = elemData = function(){}; + } + + elemData.events = events = {}; + } + + if ( !eventHandle ) { + elemData.handle = eventHandle = function() { + // Handle the second event of a trigger and when + // an event is called after a page has unloaded + return typeof jQuery !== "undefined" && !jQuery.event.triggered ? + jQuery.event.handle.apply( eventHandle.elem, arguments ) : + undefined; + }; + } + + // Add elem as a property of the handle function + // This is to prevent a memory leak with non-native events in IE. + eventHandle.elem = elem; + + // Handle multiple events separated by a space + // jQuery(...).bind("mouseover mouseout", fn); + types = types.split(" "); + + var type, i = 0, namespaces; + + while ( (type = types[ i++ ]) ) { + handleObj = handleObjIn ? + jQuery.extend({}, handleObjIn) : + { handler: handler, data: data }; + + // Namespaced event handlers + if ( type.indexOf(".") > -1 ) { + namespaces = type.split("."); + type = namespaces.shift(); + handleObj.namespace = namespaces.slice(0).sort().join("."); + + } else { + namespaces = []; + handleObj.namespace = ""; + } + + handleObj.type = type; + if ( !handleObj.guid ) { + handleObj.guid = handler.guid; + } + + // Get the current list of functions bound to this event + var handlers = events[ type ], + special = jQuery.event.special[ type ] || {}; + + // Init the event handler queue + if ( !handlers ) { + handlers = events[ type ] = []; + + // Check for a special event handler + // Only use addEventListener/attachEvent if the special + // events handler returns false + if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + // Bind the global event handler to the element + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle, false ); + + } else if ( elem.attachEvent ) { + elem.attachEvent( "on" + type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add the function to the element's handler list + handlers.push( handleObj ); + + // Keep track of which events have been used, for global triggering + jQuery.event.global[ type ] = true; + } + + // Nullify elem to prevent memory leaks in IE + elem = null; + }, + + global: {}, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, pos ) { + // don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + if ( handler === false ) { + handler = returnFalse; + } + + var ret, type, fn, j, i = 0, all, namespaces, namespace, special, eventType, handleObj, origType, + elemData = jQuery.hasData( elem ) && jQuery._data( elem ), + events = elemData && elemData[ eventKey ]; + + if ( !elemData || !events ) { + return; + } + + if ( typeof events === "function" ) { + elemData = events; + events = events.events; + } + + // types is actually an event object here + if ( types && types.type ) { + handler = types.handler; + types = types.type; + } + + // Unbind all events for the element + if ( !types || typeof types === "string" && types.charAt(0) === "." ) { + types = types || ""; + + for ( type in events ) { + jQuery.event.remove( elem, type + types ); + } + + return; + } + + // Handle multiple events separated by a space + // jQuery(...).unbind("mouseover mouseout", fn); + types = types.split(" "); + + while ( (type = types[ i++ ]) ) { + origType = type; + handleObj = null; + all = type.indexOf(".") < 0; + namespaces = []; + + if ( !all ) { + // Namespaced event handlers + namespaces = type.split("."); + type = namespaces.shift(); + + namespace = new RegExp("(^|\\.)" + + jQuery.map( namespaces.slice(0).sort(), fcleanup ).join("\\.(?:.*\\.)?") + "(\\.|$)"); + } + + eventType = events[ type ]; + + if ( !eventType ) { + continue; + } + + if ( !handler ) { + for ( j = 0; j < eventType.length; j++ ) { + handleObj = eventType[ j ]; + + if ( all || namespace.test( handleObj.namespace ) ) { + jQuery.event.remove( elem, origType, handleObj.handler, j ); + eventType.splice( j--, 1 ); + } + } + + continue; + } + + special = jQuery.event.special[ type ] || {}; + + for ( j = pos || 0; j < eventType.length; j++ ) { + handleObj = eventType[ j ]; + + if ( handler.guid === handleObj.guid ) { + // remove the given handler for the given type + if ( all || namespace.test( handleObj.namespace ) ) { + if ( pos == null ) { + eventType.splice( j--, 1 ); + } + + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + + if ( pos != null ) { + break; + } + } + } + + // remove generic event handler if no more handlers exist + if ( eventType.length === 0 || pos != null && eventType.length === 1 ) { + if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) { + jQuery.removeEvent( elem, type, elemData.handle ); + } + + ret = null; + delete events[ type ]; + } + } + + // Remove the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + var handle = elemData.handle; + if ( handle ) { + handle.elem = null; + } + + delete elemData.events; + delete elemData.handle; + + if ( typeof elemData === "function" ) { + jQuery.removeData( elem, eventKey, true ); + + } else if ( jQuery.isEmptyObject( elemData ) ) { + jQuery.removeData( elem, undefined, true ); + } + } + }, + + // bubbling is internal + trigger: function( event, data, elem /*, bubbling */ ) { + // Event object or event type + var type = event.type || event, + bubbling = arguments[3]; + + if ( !bubbling ) { + event = typeof event === "object" ? + // jQuery.Event object + event[ jQuery.expando ] ? event : + // Object literal + jQuery.extend( jQuery.Event(type), event ) : + // Just the event type (string) + jQuery.Event(type); + + if ( type.indexOf("!") >= 0 ) { + event.type = type = type.slice(0, -1); + event.exclusive = true; + } + + // Handle a global trigger + if ( !elem ) { + // Don't bubble custom events when global (to avoid too much overhead) + event.stopPropagation(); + + // Only trigger if we've ever bound an event for it + if ( jQuery.event.global[ type ] ) { + // XXX This code smells terrible. event.js should not be directly + // inspecting the data cache + jQuery.each( jQuery.cache, function() { + // internalKey variable is just used to make it easier to find + // and potentially change this stuff later; currently it just + // points to jQuery.expando + var internalKey = jQuery.expando, + internalCache = this[ internalKey ]; + if ( internalCache && internalCache.events && internalCache.events[type] ) { + jQuery.event.trigger( event, data, internalCache.handle.elem ); + } + }); + } + } + + // Handle triggering a single element + + // don't do events on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) { + return undefined; + } + + // Clean up in case it is reused + event.result = undefined; + event.target = elem; + + // Clone the incoming data, if any + data = jQuery.makeArray( data ); + data.unshift( event ); + } + + event.currentTarget = elem; + + // Trigger the event, it is assumed that "handle" is a function + var handle = elem.nodeType ? + jQuery._data( elem, "handle" ) : + (jQuery._data( elem, eventKey ) || {}).handle; + + if ( handle ) { + handle.apply( elem, data ); + } + + var parent = elem.parentNode || elem.ownerDocument; + + // Trigger an inline bound script + try { + if ( !(elem && elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()]) ) { + if ( elem[ "on" + type ] && elem[ "on" + type ].apply( elem, data ) === false ) { + event.result = false; + event.preventDefault(); + } + } + + // prevent IE from throwing an error for some elements with some event types, see #3533 + } catch (inlineError) {} + + if ( !event.isPropagationStopped() && parent ) { + jQuery.event.trigger( event, data, parent, true ); + + } else if ( !event.isDefaultPrevented() ) { + var old, + target = event.target, + targetType = type.replace( rnamespaces, "" ), + isClick = jQuery.nodeName( target, "a" ) && targetType === "click", + special = jQuery.event.special[ targetType ] || {}; + + if ( (!special._default || special._default.call( elem, event ) === false) && + !isClick && !(target && target.nodeName && jQuery.noData[target.nodeName.toLowerCase()]) ) { + + try { + if ( target[ targetType ] ) { + // Make sure that we don't accidentally re-trigger the onFOO events + old = target[ "on" + targetType ]; + + if ( old ) { + target[ "on" + targetType ] = null; + } + + jQuery.event.triggered = true; + target[ targetType ](); + } + + // prevent IE from throwing an error for some elements with some event types, see #3533 + } catch (triggerError) {} + + if ( old ) { + target[ "on" + targetType ] = old; + } + + jQuery.event.triggered = false; + } + } + }, + + handle: function( event ) { + var all, handlers, namespaces, namespace_re, events, + namespace_sort = [], + args = jQuery.makeArray( arguments ); + + event = args[0] = jQuery.event.fix( event || window.event ); + event.currentTarget = this; + + // Namespaced event handlers + all = event.type.indexOf(".") < 0 && !event.exclusive; + + if ( !all ) { + namespaces = event.type.split("."); + event.type = namespaces.shift(); + namespace_sort = namespaces.slice(0).sort(); + namespace_re = new RegExp("(^|\\.)" + namespace_sort.join("\\.(?:.*\\.)?") + "(\\.|$)"); + } + + event.namespace = event.namespace || namespace_sort.join("."); + + events = jQuery._data(this, eventKey); + + if ( typeof events === "function" ) { + events = events.events; + } + + handlers = (events || {})[ event.type ]; + + if ( events && handlers ) { + // Clone the handlers to prevent manipulation + handlers = handlers.slice(0); + + for ( var j = 0, l = handlers.length; j < l; j++ ) { + var handleObj = handlers[ j ]; + + // Filter the functions by class + if ( all || namespace_re.test( handleObj.namespace ) ) { + // Pass in a reference to the handler function itself + // So that we can later remove it + event.handler = handleObj.handler; + event.data = handleObj.data; + event.handleObj = handleObj; + + var ret = handleObj.handler.apply( this, args ); + + if ( ret !== undefined ) { + event.result = ret; + if ( ret === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + + if ( event.isImmediatePropagationStopped() ) { + break; + } + } + } + } + + return event.result; + }, + + props: "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "), + + fix: function( event ) { + if ( event[ jQuery.expando ] ) { + return event; + } + + // store a copy of the original event object + // and "clone" to set read-only properties + var originalEvent = event; + event = jQuery.Event( originalEvent ); + + for ( var i = this.props.length, prop; i; ) { + prop = this.props[ --i ]; + event[ prop ] = originalEvent[ prop ]; + } + + // Fix target property, if necessary + if ( !event.target ) { + // Fixes #1925 where srcElement might not be defined either + event.target = event.srcElement || document; + } + + // check if target is a textnode (safari) + if ( event.target.nodeType === 3 ) { + event.target = event.target.parentNode; + } + + // Add relatedTarget, if necessary + if ( !event.relatedTarget && event.fromElement ) { + event.relatedTarget = event.fromElement === event.target ? event.toElement : event.fromElement; + } + + // Calculate pageX/Y if missing and clientX/Y available + if ( event.pageX == null && event.clientX != null ) { + var doc = document.documentElement, + body = document.body; + + event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0); + event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0); + } + + // Add which for key events + if ( event.which == null && (event.charCode != null || event.keyCode != null) ) { + event.which = event.charCode != null ? event.charCode : event.keyCode; + } + + // Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs) + if ( !event.metaKey && event.ctrlKey ) { + event.metaKey = event.ctrlKey; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + // Note: button is not normalized, so don't use it + if ( !event.which && event.button !== undefined ) { + event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) )); + } + + return event; + }, + + // Deprecated, use jQuery.guid instead + guid: 1E8, + + // Deprecated, use jQuery.proxy instead + proxy: jQuery.proxy, + + special: { + ready: { + // Make sure the ready event is setup + setup: jQuery.bindReady, + teardown: jQuery.noop + }, + + live: { + add: function( handleObj ) { + jQuery.event.add( this, + liveConvert( handleObj.origType, handleObj.selector ), + jQuery.extend({}, handleObj, {handler: liveHandler, guid: handleObj.handler.guid}) ); + }, + + remove: function( handleObj ) { + jQuery.event.remove( this, liveConvert( handleObj.origType, handleObj.selector ), handleObj ); + } + }, + + beforeunload: { + setup: function( data, namespaces, eventHandle ) { + // We only want to do this special case on windows + if ( jQuery.isWindow( this ) ) { + this.onbeforeunload = eventHandle; + } + }, + + teardown: function( namespaces, eventHandle ) { + if ( this.onbeforeunload === eventHandle ) { + this.onbeforeunload = null; + } + } + } + } +}; + +jQuery.removeEvent = document.removeEventListener ? + function( elem, type, handle ) { + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle, false ); + } + } : + function( elem, type, handle ) { + if ( elem.detachEvent ) { + elem.detachEvent( "on" + type, handle ); + } + }; + +jQuery.Event = function( src ) { + // Allow instantiation without the 'new' keyword + if ( !this.preventDefault ) { + return new jQuery.Event( src ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = (src.defaultPrevented || src.returnValue === false || + src.getPreventDefault && src.getPreventDefault()) ? returnTrue : returnFalse; + + // Event type + } else { + this.type = src; + } + + // timeStamp is buggy for some events on Firefox(#3843) + // So we won't rely on the native value + this.timeStamp = jQuery.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +function returnFalse() { + return false; +} +function returnTrue() { + return true; +} + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + preventDefault: function() { + this.isDefaultPrevented = returnTrue; + + var e = this.originalEvent; + if ( !e ) { + return; + } + + // if preventDefault exists run it on the original event + if ( e.preventDefault ) { + e.preventDefault(); + + // otherwise set the returnValue property of the original event to false (IE) + } else { + e.returnValue = false; + } + }, + stopPropagation: function() { + this.isPropagationStopped = returnTrue; + + var e = this.originalEvent; + if ( !e ) { + return; + } + // if stopPropagation exists run it on the original event + if ( e.stopPropagation ) { + e.stopPropagation(); + } + // otherwise set the cancelBubble property of the original event to true (IE) + e.cancelBubble = true; + }, + stopImmediatePropagation: function() { + this.isImmediatePropagationStopped = returnTrue; + this.stopPropagation(); + }, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse +}; + +// Checks if an event happened on an element within another element +// Used in jQuery.event.special.mouseenter and mouseleave handlers +var withinElement = function( event ) { + // Check if mouse(over|out) are still within the same parent element + var parent = event.relatedTarget; + + // Firefox sometimes assigns relatedTarget a XUL element + // which we cannot access the parentNode property of + try { + // Traverse up the tree + while ( parent && parent !== this ) { + parent = parent.parentNode; + } + + if ( parent !== this ) { + // set the correct event type + event.type = event.data; + + // handle event if we actually just moused on to a non sub-element + jQuery.event.handle.apply( this, arguments ); + } + + // assuming we've left the element since we most likely mousedover a xul element + } catch(e) { } +}, + +// In case of event delegation, we only need to rename the event.type, +// liveHandler will take care of the rest. +delegate = function( event ) { + event.type = event.data; + jQuery.event.handle.apply( this, arguments ); +}; + +// Create mouseenter and mouseleave events +jQuery.each({ + mouseenter: "mouseover", + mouseleave: "mouseout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + setup: function( data ) { + jQuery.event.add( this, fix, data && data.selector ? delegate : withinElement, orig ); + }, + teardown: function( data ) { + jQuery.event.remove( this, fix, data && data.selector ? delegate : withinElement ); + } + }; +}); + +// submit delegation +if ( !jQuery.support.submitBubbles ) { + + jQuery.event.special.submit = { + setup: function( data, namespaces ) { + if ( this.nodeName && this.nodeName.toLowerCase() !== "form" ) { + jQuery.event.add(this, "click.specialSubmit", function( e ) { + var elem = e.target, + type = elem.type; + + if ( (type === "submit" || type === "image") && jQuery( elem ).closest("form").length ) { + e.liveFired = undefined; + return trigger( "submit", this, arguments ); + } + }); + + jQuery.event.add(this, "keypress.specialSubmit", function( e ) { + var elem = e.target, + type = elem.type; + + if ( (type === "text" || type === "password") && jQuery( elem ).closest("form").length && e.keyCode === 13 ) { + e.liveFired = undefined; + return trigger( "submit", this, arguments ); + } + }); + + } else { + return false; + } + }, + + teardown: function( namespaces ) { + jQuery.event.remove( this, ".specialSubmit" ); + } + }; + +} + +// change delegation, happens here so we have bind. +if ( !jQuery.support.changeBubbles ) { + + var changeFilters, + + getVal = function( elem ) { + var type = elem.type, val = elem.value; + + if ( type === "radio" || type === "checkbox" ) { + val = elem.checked; + + } else if ( type === "select-multiple" ) { + val = elem.selectedIndex > -1 ? + jQuery.map( elem.options, function( elem ) { + return elem.selected; + }).join("-") : + ""; + + } else if ( elem.nodeName.toLowerCase() === "select" ) { + val = elem.selectedIndex; + } + + return val; + }, + + testChange = function testChange( e ) { + var elem = e.target, data, val; + + if ( !rformElems.test( elem.nodeName ) || elem.readOnly ) { + return; + } + + data = jQuery._data( elem, "_change_data" ); + val = getVal(elem); + + // the current data will be also retrieved by beforeactivate + if ( e.type !== "focusout" || elem.type !== "radio" ) { + jQuery._data( elem, "_change_data", val ); + } + + if ( data === undefined || val === data ) { + return; + } + + if ( data != null || val ) { + e.type = "change"; + e.liveFired = undefined; + return jQuery.event.trigger( e, arguments[1], elem ); + } + }; + + jQuery.event.special.change = { + filters: { + focusout: testChange, + + beforedeactivate: testChange, + + click: function( e ) { + var elem = e.target, type = elem.type; + + if ( type === "radio" || type === "checkbox" || elem.nodeName.toLowerCase() === "select" ) { + return testChange.call( this, e ); + } + }, + + // Change has to be called before submit + // Keydown will be called before keypress, which is used in submit-event delegation + keydown: function( e ) { + var elem = e.target, type = elem.type; + + if ( (e.keyCode === 13 && elem.nodeName.toLowerCase() !== "textarea") || + (e.keyCode === 32 && (type === "checkbox" || type === "radio")) || + type === "select-multiple" ) { + return testChange.call( this, e ); + } + }, + + // Beforeactivate happens also before the previous element is blurred + // with this event you can't trigger a change event, but you can store + // information + beforeactivate: function( e ) { + var elem = e.target; + jQuery._data( elem, "_change_data", getVal(elem) ); + } + }, + + setup: function( data, namespaces ) { + if ( this.type === "file" ) { + return false; + } + + for ( var type in changeFilters ) { + jQuery.event.add( this, type + ".specialChange", changeFilters[type] ); + } + + return rformElems.test( this.nodeName ); + }, + + teardown: function( namespaces ) { + jQuery.event.remove( this, ".specialChange" ); + + return rformElems.test( this.nodeName ); + } + }; + + changeFilters = jQuery.event.special.change.filters; + + // Handle when the input is .focus()'d + changeFilters.focus = changeFilters.beforeactivate; +} + +function trigger( type, elem, args ) { + args[0].type = type; + return jQuery.event.handle.apply( elem, args ); +} + +// Create "bubbling" focus and blur events +if ( document.addEventListener ) { + jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { + jQuery.event.special[ fix ] = { + setup: function() { + this.addEventListener( orig, handler, true ); + }, + teardown: function() { + this.removeEventListener( orig, handler, true ); + } + }; + + function handler( e ) { + e = jQuery.event.fix( e ); + e.type = fix; + return jQuery.event.handle.call( this, e ); + } + }); +} + +jQuery.each(["bind", "one"], function( i, name ) { + jQuery.fn[ name ] = function( type, data, fn ) { + // Handle object literals + if ( typeof type === "object" ) { + for ( var key in type ) { + this[ name ](key, data, type[key], fn); + } + return this; + } + + if ( jQuery.isFunction( data ) || data === false ) { + fn = data; + data = undefined; + } + + var handler = name === "one" ? jQuery.proxy( fn, function( event ) { + jQuery( this ).unbind( event, handler ); + return fn.apply( this, arguments ); + }) : fn; + + if ( type === "unload" && name !== "one" ) { + this.one( type, data, fn ); + + } else { + for ( var i = 0, l = this.length; i < l; i++ ) { + jQuery.event.add( this[i], type, handler, data ); + } + } + + return this; + }; +}); + +jQuery.fn.extend({ + unbind: function( type, fn ) { + // Handle object literals + if ( typeof type === "object" && !type.preventDefault ) { + for ( var key in type ) { + this.unbind(key, type[key]); + } + + } else { + for ( var i = 0, l = this.length; i < l; i++ ) { + jQuery.event.remove( this[i], type, fn ); + } + } + + return this; + }, + + delegate: function( selector, types, data, fn ) { + return this.live( types, data, fn, selector ); + }, + + undelegate: function( selector, types, fn ) { + if ( arguments.length === 0 ) { + return this.unbind( "live" ); + + } else { + return this.die( types, null, fn, selector ); + } + }, + + trigger: function( type, data ) { + return this.each(function() { + jQuery.event.trigger( type, data, this ); + }); + }, + + triggerHandler: function( type, data ) { + if ( this[0] ) { + var event = jQuery.Event( type ); + event.preventDefault(); + event.stopPropagation(); + jQuery.event.trigger( event, data, this[0] ); + return event.result; + } + }, + + toggle: function( fn ) { + // Save reference to arguments for access in closure + var args = arguments, + i = 1; + + // link all the functions, so any of them can unbind this click handler + while ( i < args.length ) { + jQuery.proxy( fn, args[ i++ ] ); + } + + return this.click( jQuery.proxy( fn, function( event ) { + // Figure out which function to execute + var lastToggle = ( jQuery._data( this, "lastToggle" + fn.guid ) || 0 ) % i; + jQuery._data( this, "lastToggle" + fn.guid, lastToggle + 1 ); + + // Make sure that clicks stop + event.preventDefault(); + + // and execute the function + return args[ lastToggle ].apply( this, arguments ) || false; + })); + }, + + hover: function( fnOver, fnOut ) { + return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); + } +}); + +var liveMap = { + focus: "focusin", + blur: "focusout", + mouseenter: "mouseover", + mouseleave: "mouseout" +}; + +jQuery.each(["live", "die"], function( i, name ) { + jQuery.fn[ name ] = function( types, data, fn, origSelector /* Internal Use Only */ ) { + var type, i = 0, match, namespaces, preType, + selector = origSelector || this.selector, + context = origSelector ? this : jQuery( this.context ); + + if ( typeof types === "object" && !types.preventDefault ) { + for ( var key in types ) { + context[ name ]( key, data, types[key], selector ); + } + + return this; + } + + if ( jQuery.isFunction( data ) ) { + fn = data; + data = undefined; + } + + types = (types || "").split(" "); + + while ( (type = types[ i++ ]) != null ) { + match = rnamespaces.exec( type ); + namespaces = ""; + + if ( match ) { + namespaces = match[0]; + type = type.replace( rnamespaces, "" ); + } + + if ( type === "hover" ) { + types.push( "mouseenter" + namespaces, "mouseleave" + namespaces ); + continue; + } + + preType = type; + + if ( type === "focus" || type === "blur" ) { + types.push( liveMap[ type ] + namespaces ); + type = type + namespaces; + + } else { + type = (liveMap[ type ] || type) + namespaces; + } + + if ( name === "live" ) { + // bind live handler + for ( var j = 0, l = context.length; j < l; j++ ) { + jQuery.event.add( context[j], "live." + liveConvert( type, selector ), + { data: data, selector: selector, handler: fn, origType: type, origHandler: fn, preType: preType } ); + } + + } else { + // unbind live handler + context.unbind( "live." + liveConvert( type, selector ), fn ); + } + } + + return this; + }; +}); + +function liveHandler( event ) { + var stop, maxLevel, related, match, handleObj, elem, j, i, l, data, close, namespace, ret, + elems = [], + selectors = [], + events = jQuery._data( this, eventKey ); + + if ( typeof events === "function" ) { + events = events.events; + } + + // Make sure we avoid non-left-click bubbling in Firefox (#3861) and disabled elements in IE (#6911) + if ( event.liveFired === this || !events || !events.live || event.target.disabled || event.button && event.type === "click" ) { + return; + } + + if ( event.namespace ) { + namespace = new RegExp("(^|\\.)" + event.namespace.split(".").join("\\.(?:.*\\.)?") + "(\\.|$)"); + } + + event.liveFired = this; + + var live = events.live.slice(0); + + for ( j = 0; j < live.length; j++ ) { + handleObj = live[j]; + + if ( handleObj.origType.replace( rnamespaces, "" ) === event.type ) { + selectors.push( handleObj.selector ); + + } else { + live.splice( j--, 1 ); + } + } + + match = jQuery( event.target ).closest( selectors, event.currentTarget ); + + for ( i = 0, l = match.length; i < l; i++ ) { + close = match[i]; + + for ( j = 0; j < live.length; j++ ) { + handleObj = live[j]; + + if ( close.selector === handleObj.selector && (!namespace || namespace.test( handleObj.namespace )) ) { + elem = close.elem; + related = null; + + // Those two events require additional checking + if ( handleObj.preType === "mouseenter" || handleObj.preType === "mouseleave" ) { + event.type = handleObj.preType; + related = jQuery( event.relatedTarget ).closest( handleObj.selector )[0]; + } + + if ( !related || related !== elem ) { + elems.push({ elem: elem, handleObj: handleObj, level: close.level }); + } + } + } + } + + for ( i = 0, l = elems.length; i < l; i++ ) { + match = elems[i]; + + if ( maxLevel && match.level > maxLevel ) { + break; + } + + event.currentTarget = match.elem; + event.data = match.handleObj.data; + event.handleObj = match.handleObj; + + ret = match.handleObj.origHandler.apply( match.elem, arguments ); + + if ( ret === false || event.isPropagationStopped() ) { + maxLevel = match.level; + + if ( ret === false ) { + stop = false; + } + if ( event.isImmediatePropagationStopped() ) { + break; + } + } + } + + return stop; +} + +function liveConvert( type, selector ) { + return (type && type !== "*" ? type + "." : "") + selector.replace(rperiod, "`").replace(rspace, "&"); +} + +jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " + + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + + "change select submit keydown keypress keyup error").split(" "), function( i, name ) { + + // Handle event binding + jQuery.fn[ name ] = function( data, fn ) { + if ( fn == null ) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.bind( name, data, fn ) : + this.trigger( name ); + }; + + if ( jQuery.attrFn ) { + jQuery.attrFn[ name ] = true; + } +}); + + +/*! + * Sizzle CSS Selector Engine + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * More information: http://sizzlejs.com/ + */ +(function(){ + +var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, + done = 0, + toString = Object.prototype.toString, + hasDuplicate = false, + baseHasDuplicate = true; + +// Here we check if the JavaScript engine is using some sort of +// optimization where it does not always call our comparision +// function. If that is the case, discard the hasDuplicate value. +// Thus far that includes Google Chrome. +[0, 0].sort(function() { + baseHasDuplicate = false; + return 0; +}); + +var Sizzle = function( selector, context, results, seed ) { + results = results || []; + context = context || document; + + var origContext = context; + + if ( context.nodeType !== 1 && context.nodeType !== 9 ) { + return []; + } + + if ( !selector || typeof selector !== "string" ) { + return results; + } + + var m, set, checkSet, extra, ret, cur, pop, i, + prune = true, + contextXML = Sizzle.isXML( context ), + parts = [], + soFar = selector; + + // Reset the position of the chunker regexp (start from head) + do { + chunker.exec( "" ); + m = chunker.exec( soFar ); + + if ( m ) { + soFar = m[3]; + + parts.push( m[1] ); + + if ( m[2] ) { + extra = m[3]; + break; + } + } + } while ( m ); + + if ( parts.length > 1 && origPOS.exec( selector ) ) { + + if ( parts.length === 2 && Expr.relative[ parts[0] ] ) { + set = posProcess( parts[0] + parts[1], context ); + + } else { + set = Expr.relative[ parts[0] ] ? + [ context ] : + Sizzle( parts.shift(), context ); + + while ( parts.length ) { + selector = parts.shift(); + + if ( Expr.relative[ selector ] ) { + selector += parts.shift(); + } + + set = posProcess( selector, set ); + } + } + + } else { + // Take a shortcut and set the context if the root selector is an ID + // (but not if it'll be faster if the inner selector is an ID) + if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML && + Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) { + + ret = Sizzle.find( parts.shift(), context, contextXML ); + context = ret.expr ? + Sizzle.filter( ret.expr, ret.set )[0] : + ret.set[0]; + } + + if ( context ) { + ret = seed ? + { expr: parts.pop(), set: makeArray(seed) } : + Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML ); + + set = ret.expr ? + Sizzle.filter( ret.expr, ret.set ) : + ret.set; + + if ( parts.length > 0 ) { + checkSet = makeArray( set ); + + } else { + prune = false; + } + + while ( parts.length ) { + cur = parts.pop(); + pop = cur; + + if ( !Expr.relative[ cur ] ) { + cur = ""; + } else { + pop = parts.pop(); + } + + if ( pop == null ) { + pop = context; + } + + Expr.relative[ cur ]( checkSet, pop, contextXML ); + } + + } else { + checkSet = parts = []; + } + } + + if ( !checkSet ) { + checkSet = set; + } + + if ( !checkSet ) { + Sizzle.error( cur || selector ); + } + + if ( toString.call(checkSet) === "[object Array]" ) { + if ( !prune ) { + results.push.apply( results, checkSet ); + + } else if ( context && context.nodeType === 1 ) { + for ( i = 0; checkSet[i] != null; i++ ) { + if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) { + results.push( set[i] ); + } + } + + } else { + for ( i = 0; checkSet[i] != null; i++ ) { + if ( checkSet[i] && checkSet[i].nodeType === 1 ) { + results.push( set[i] ); + } + } + } + + } else { + makeArray( checkSet, results ); + } + + if ( extra ) { + Sizzle( extra, origContext, results, seed ); + Sizzle.uniqueSort( results ); + } + + return results; +}; + +Sizzle.uniqueSort = function( results ) { + if ( sortOrder ) { + hasDuplicate = baseHasDuplicate; + results.sort( sortOrder ); + + if ( hasDuplicate ) { + for ( var i = 1; i < results.length; i++ ) { + if ( results[i] === results[ i - 1 ] ) { + results.splice( i--, 1 ); + } + } + } + } + + return results; +}; + +Sizzle.matches = function( expr, set ) { + return Sizzle( expr, null, null, set ); +}; + +Sizzle.matchesSelector = function( node, expr ) { + return Sizzle( expr, null, null, [node] ).length > 0; +}; + +Sizzle.find = function( expr, context, isXML ) { + var set; + + if ( !expr ) { + return []; + } + + for ( var i = 0, l = Expr.order.length; i < l; i++ ) { + var match, + type = Expr.order[i]; + + if ( (match = Expr.leftMatch[ type ].exec( expr )) ) { + var left = match[1]; + match.splice( 1, 1 ); + + if ( left.substr( left.length - 1 ) !== "\\" ) { + match[1] = (match[1] || "").replace(/\\/g, ""); + set = Expr.find[ type ]( match, context, isXML ); + + if ( set != null ) { + expr = expr.replace( Expr.match[ type ], "" ); + break; + } + } + } + } + + if ( !set ) { + set = typeof context.getElementsByTagName !== "undefined" ? + context.getElementsByTagName( "*" ) : + []; + } + + return { set: set, expr: expr }; +}; + +Sizzle.filter = function( expr, set, inplace, not ) { + var match, anyFound, + old = expr, + result = [], + curLoop = set, + isXMLFilter = set && set[0] && Sizzle.isXML( set[0] ); + + while ( expr && set.length ) { + for ( var type in Expr.filter ) { + if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) { + var found, item, + filter = Expr.filter[ type ], + left = match[1]; + + anyFound = false; + + match.splice(1,1); + + if ( left.substr( left.length - 1 ) === "\\" ) { + continue; + } + + if ( curLoop === result ) { + result = []; + } + + if ( Expr.preFilter[ type ] ) { + match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter ); + + if ( !match ) { + anyFound = found = true; + + } else if ( match === true ) { + continue; + } + } + + if ( match ) { + for ( var i = 0; (item = curLoop[i]) != null; i++ ) { + if ( item ) { + found = filter( item, match, i, curLoop ); + var pass = not ^ !!found; + + if ( inplace && found != null ) { + if ( pass ) { + anyFound = true; + + } else { + curLoop[i] = false; + } + + } else if ( pass ) { + result.push( item ); + anyFound = true; + } + } + } + } + + if ( found !== undefined ) { + if ( !inplace ) { + curLoop = result; + } + + expr = expr.replace( Expr.match[ type ], "" ); + + if ( !anyFound ) { + return []; + } + + break; + } + } + } + + // Improper expression + if ( expr === old ) { + if ( anyFound == null ) { + Sizzle.error( expr ); + + } else { + break; + } + } + + old = expr; + } + + return curLoop; +}; + +Sizzle.error = function( msg ) { + throw "Syntax error, unrecognized expression: " + msg; +}; + +var Expr = Sizzle.selectors = { + order: [ "ID", "NAME", "TAG" ], + + match: { + ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/, + CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/, + NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/, + ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/, + TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/, + CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/, + POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/, + PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/ + }, + + leftMatch: {}, + + attrMap: { + "class": "className", + "for": "htmlFor" + }, + + attrHandle: { + href: function( elem ) { + return elem.getAttribute( "href" ); + } + }, + + relative: { + "+": function(checkSet, part){ + var isPartStr = typeof part === "string", + isTag = isPartStr && !/\W/.test( part ), + isPartStrNotTag = isPartStr && !isTag; + + if ( isTag ) { + part = part.toLowerCase(); + } + + for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) { + if ( (elem = checkSet[i]) ) { + while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {} + + checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ? + elem || false : + elem === part; + } + } + + if ( isPartStrNotTag ) { + Sizzle.filter( part, checkSet, true ); + } + }, + + ">": function( checkSet, part ) { + var elem, + isPartStr = typeof part === "string", + i = 0, + l = checkSet.length; + + if ( isPartStr && !/\W/.test( part ) ) { + part = part.toLowerCase(); + + for ( ; i < l; i++ ) { + elem = checkSet[i]; + + if ( elem ) { + var parent = elem.parentNode; + checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false; + } + } + + } else { + for ( ; i < l; i++ ) { + elem = checkSet[i]; + + if ( elem ) { + checkSet[i] = isPartStr ? + elem.parentNode : + elem.parentNode === part; + } + } + + if ( isPartStr ) { + Sizzle.filter( part, checkSet, true ); + } + } + }, + + "": function(checkSet, part, isXML){ + var nodeCheck, + doneName = done++, + checkFn = dirCheck; + + if ( typeof part === "string" && !/\W/.test(part) ) { + part = part.toLowerCase(); + nodeCheck = part; + checkFn = dirNodeCheck; + } + + checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML ); + }, + + "~": function( checkSet, part, isXML ) { + var nodeCheck, + doneName = done++, + checkFn = dirCheck; + + if ( typeof part === "string" && !/\W/.test( part ) ) { + part = part.toLowerCase(); + nodeCheck = part; + checkFn = dirNodeCheck; + } + + checkFn( "previousSibling", part, doneName, checkSet, nodeCheck, isXML ); + } + }, + + find: { + ID: function( match, context, isXML ) { + if ( typeof context.getElementById !== "undefined" && !isXML ) { + var m = context.getElementById(match[1]); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + return m && m.parentNode ? [m] : []; + } + }, + + NAME: function( match, context ) { + if ( typeof context.getElementsByName !== "undefined" ) { + var ret = [], + results = context.getElementsByName( match[1] ); + + for ( var i = 0, l = results.length; i < l; i++ ) { + if ( results[i].getAttribute("name") === match[1] ) { + ret.push( results[i] ); + } + } + + return ret.length === 0 ? null : ret; + } + }, + + TAG: function( match, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( match[1] ); + } + } + }, + preFilter: { + CLASS: function( match, curLoop, inplace, result, not, isXML ) { + match = " " + match[1].replace(/\\/g, "") + " "; + + if ( isXML ) { + return match; + } + + for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) { + if ( elem ) { + if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n\r]/g, " ").indexOf(match) >= 0) ) { + if ( !inplace ) { + result.push( elem ); + } + + } else if ( inplace ) { + curLoop[i] = false; + } + } + } + + return false; + }, + + ID: function( match ) { + return match[1].replace(/\\/g, ""); + }, + + TAG: function( match, curLoop ) { + return match[1].toLowerCase(); + }, + + CHILD: function( match ) { + if ( match[1] === "nth" ) { + if ( !match[2] ) { + Sizzle.error( match[0] ); + } + + match[2] = match[2].replace(/^\+|\s*/g, ''); + + // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6' + var test = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec( + match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" || + !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]); + + // calculate the numbers (first)n+(last) including if they are negative + match[2] = (test[1] + (test[2] || 1)) - 0; + match[3] = test[3] - 0; + } + else if ( match[2] ) { + Sizzle.error( match[0] ); + } + + // TODO: Move to normal caching system + match[0] = done++; + + return match; + }, + + ATTR: function( match, curLoop, inplace, result, not, isXML ) { + var name = match[1] = match[1].replace(/\\/g, ""); + + if ( !isXML && Expr.attrMap[name] ) { + match[1] = Expr.attrMap[name]; + } + + // Handle if an un-quoted value was used + match[4] = ( match[4] || match[5] || "" ).replace(/\\/g, ""); + + if ( match[2] === "~=" ) { + match[4] = " " + match[4] + " "; + } + + return match; + }, + + PSEUDO: function( match, curLoop, inplace, result, not ) { + if ( match[1] === "not" ) { + // If we're dealing with a complex expression, or a simple one + if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) { + match[3] = Sizzle(match[3], null, null, curLoop); + + } else { + var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not); + + if ( !inplace ) { + result.push.apply( result, ret ); + } + + return false; + } + + } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) { + return true; + } + + return match; + }, + + POS: function( match ) { + match.unshift( true ); + + return match; + } + }, + + filters: { + enabled: function( elem ) { + return elem.disabled === false && elem.type !== "hidden"; + }, + + disabled: function( elem ) { + return elem.disabled === true; + }, + + checked: function( elem ) { + return elem.checked === true; + }, + + selected: function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + elem.parentNode.selectedIndex; + + return elem.selected === true; + }, + + parent: function( elem ) { + return !!elem.firstChild; + }, + + empty: function( elem ) { + return !elem.firstChild; + }, + + has: function( elem, i, match ) { + return !!Sizzle( match[3], elem ).length; + }, + + header: function( elem ) { + return (/h\d/i).test( elem.nodeName ); + }, + + text: function( elem ) { + return "text" === elem.type; + }, + radio: function( elem ) { + return "radio" === elem.type; + }, + + checkbox: function( elem ) { + return "checkbox" === elem.type; + }, + + file: function( elem ) { + return "file" === elem.type; + }, + password: function( elem ) { + return "password" === elem.type; + }, + + submit: function( elem ) { + return "submit" === elem.type; + }, + + image: function( elem ) { + return "image" === elem.type; + }, + + reset: function( elem ) { + return "reset" === elem.type; + }, + + button: function( elem ) { + return "button" === elem.type || elem.nodeName.toLowerCase() === "button"; + }, + + input: function( elem ) { + return (/input|select|textarea|button/i).test( elem.nodeName ); + } + }, + setFilters: { + first: function( elem, i ) { + return i === 0; + }, + + last: function( elem, i, match, array ) { + return i === array.length - 1; + }, + + even: function( elem, i ) { + return i % 2 === 0; + }, + + odd: function( elem, i ) { + return i % 2 === 1; + }, + + lt: function( elem, i, match ) { + return i < match[3] - 0; + }, + + gt: function( elem, i, match ) { + return i > match[3] - 0; + }, + + nth: function( elem, i, match ) { + return match[3] - 0 === i; + }, + + eq: function( elem, i, match ) { + return match[3] - 0 === i; + } + }, + filter: { + PSEUDO: function( elem, match, i, array ) { + var name = match[1], + filter = Expr.filters[ name ]; + + if ( filter ) { + return filter( elem, i, match, array ); + + } else if ( name === "contains" ) { + return (elem.textContent || elem.innerText || Sizzle.getText([ elem ]) || "").indexOf(match[3]) >= 0; + + } else if ( name === "not" ) { + var not = match[3]; + + for ( var j = 0, l = not.length; j < l; j++ ) { + if ( not[j] === elem ) { + return false; + } + } + + return true; + + } else { + Sizzle.error( name ); + } + }, + + CHILD: function( elem, match ) { + var type = match[1], + node = elem; + + switch ( type ) { + case "only": + case "first": + while ( (node = node.previousSibling) ) { + if ( node.nodeType === 1 ) { + return false; + } + } + + if ( type === "first" ) { + return true; + } + + node = elem; + + case "last": + while ( (node = node.nextSibling) ) { + if ( node.nodeType === 1 ) { + return false; + } + } + + return true; + + case "nth": + var first = match[2], + last = match[3]; + + if ( first === 1 && last === 0 ) { + return true; + } + + var doneName = match[0], + parent = elem.parentNode; + + if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) { + var count = 0; + + for ( node = parent.firstChild; node; node = node.nextSibling ) { + if ( node.nodeType === 1 ) { + node.nodeIndex = ++count; + } + } + + parent.sizcache = doneName; + } + + var diff = elem.nodeIndex - last; + + if ( first === 0 ) { + return diff === 0; + + } else { + return ( diff % first === 0 && diff / first >= 0 ); + } + } + }, + + ID: function( elem, match ) { + return elem.nodeType === 1 && elem.getAttribute("id") === match; + }, + + TAG: function( elem, match ) { + return (match === "*" && elem.nodeType === 1) || elem.nodeName.toLowerCase() === match; + }, + + CLASS: function( elem, match ) { + return (" " + (elem.className || elem.getAttribute("class")) + " ") + .indexOf( match ) > -1; + }, + + ATTR: function( elem, match ) { + var name = match[1], + result = Expr.attrHandle[ name ] ? + Expr.attrHandle[ name ]( elem ) : + elem[ name ] != null ? + elem[ name ] : + elem.getAttribute( name ), + value = result + "", + type = match[2], + check = match[4]; + + return result == null ? + type === "!=" : + type === "=" ? + value === check : + type === "*=" ? + value.indexOf(check) >= 0 : + type === "~=" ? + (" " + value + " ").indexOf(check) >= 0 : + !check ? + value && result !== false : + type === "!=" ? + value !== check : + type === "^=" ? + value.indexOf(check) === 0 : + type === "$=" ? + value.substr(value.length - check.length) === check : + type === "|=" ? + value === check || value.substr(0, check.length + 1) === check + "-" : + false; + }, + + POS: function( elem, match, i, array ) { + var name = match[2], + filter = Expr.setFilters[ name ]; + + if ( filter ) { + return filter( elem, i, match, array ); + } + } + } +}; + +var origPOS = Expr.match.POS, + fescape = function(all, num){ + return "\\" + (num - 0 + 1); + }; + +for ( var type in Expr.match ) { + Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) ); + Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) ); +} + +var makeArray = function( array, results ) { + array = Array.prototype.slice.call( array, 0 ); + + if ( results ) { + results.push.apply( results, array ); + return results; + } + + return array; +}; + +// Perform a simple check to determine if the browser is capable of +// converting a NodeList to an array using builtin methods. +// Also verifies that the returned array holds DOM nodes +// (which is not the case in the Blackberry browser) +try { + Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType; + +// Provide a fallback method if it does not work +} catch( e ) { + makeArray = function( array, results ) { + var i = 0, + ret = results || []; + + if ( toString.call(array) === "[object Array]" ) { + Array.prototype.push.apply( ret, array ); + + } else { + if ( typeof array.length === "number" ) { + for ( var l = array.length; i < l; i++ ) { + ret.push( array[i] ); + } + + } else { + for ( ; array[i]; i++ ) { + ret.push( array[i] ); + } + } + } + + return ret; + }; +} + +var sortOrder, siblingCheck; + +if ( document.documentElement.compareDocumentPosition ) { + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) { + return a.compareDocumentPosition ? -1 : 1; + } + + return a.compareDocumentPosition(b) & 4 ? -1 : 1; + }; + +} else { + sortOrder = function( a, b ) { + var al, bl, + ap = [], + bp = [], + aup = a.parentNode, + bup = b.parentNode, + cur = aup; + + // The nodes are identical, we can exit early + if ( a === b ) { + hasDuplicate = true; + return 0; + + // If the nodes are siblings (or identical) we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + + // If no parents were found then the nodes are disconnected + } else if ( !aup ) { + return -1; + + } else if ( !bup ) { + return 1; + } + + // Otherwise they're somewhere else in the tree so we need + // to build up a full list of the parentNodes for comparison + while ( cur ) { + ap.unshift( cur ); + cur = cur.parentNode; + } + + cur = bup; + + while ( cur ) { + bp.unshift( cur ); + cur = cur.parentNode; + } + + al = ap.length; + bl = bp.length; + + // Start walking down the tree looking for a discrepancy + for ( var i = 0; i < al && i < bl; i++ ) { + if ( ap[i] !== bp[i] ) { + return siblingCheck( ap[i], bp[i] ); + } + } + + // We ended someplace up the tree so do a sibling check + return i === al ? + siblingCheck( a, bp[i], -1 ) : + siblingCheck( ap[i], b, 1 ); + }; + + siblingCheck = function( a, b, ret ) { + if ( a === b ) { + return ret; + } + + var cur = a.nextSibling; + + while ( cur ) { + if ( cur === b ) { + return -1; + } + + cur = cur.nextSibling; + } + + return 1; + }; +} + +// Utility function for retreiving the text value of an array of DOM nodes +Sizzle.getText = function( elems ) { + var ret = "", elem; + + for ( var i = 0; elems[i]; i++ ) { + elem = elems[i]; + + // Get the text from text nodes and CDATA nodes + if ( elem.nodeType === 3 || elem.nodeType === 4 ) { + ret += elem.nodeValue; + + // Traverse everything else, except comment nodes + } else if ( elem.nodeType !== 8 ) { + ret += Sizzle.getText( elem.childNodes ); + } + } + + return ret; +}; + +// Check to see if the browser returns elements by name when +// querying by getElementById (and provide a workaround) +(function(){ + // We're going to inject a fake input element with a specified name + var form = document.createElement("div"), + id = "script" + (new Date()).getTime(), + root = document.documentElement; + + form.innerHTML = ""; + + // Inject it into the root element, check its status, and remove it quickly + root.insertBefore( form, root.firstChild ); + + // The workaround has to do additional checks after a getElementById + // Which slows things down for other browsers (hence the branching) + if ( document.getElementById( id ) ) { + Expr.find.ID = function( match, context, isXML ) { + if ( typeof context.getElementById !== "undefined" && !isXML ) { + var m = context.getElementById(match[1]); + + return m ? + m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? + [m] : + undefined : + []; + } + }; + + Expr.filter.ID = function( elem, match ) { + var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id"); + + return elem.nodeType === 1 && node && node.nodeValue === match; + }; + } + + root.removeChild( form ); + + // release memory in IE + root = form = null; +})(); + +(function(){ + // Check to see if the browser returns only elements + // when doing getElementsByTagName("*") + + // Create a fake element + var div = document.createElement("div"); + div.appendChild( document.createComment("") ); + + // Make sure no comments are found + if ( div.getElementsByTagName("*").length > 0 ) { + Expr.find.TAG = function( match, context ) { + var results = context.getElementsByTagName( match[1] ); + + // Filter out possible comments + if ( match[1] === "*" ) { + var tmp = []; + + for ( var i = 0; results[i]; i++ ) { + if ( results[i].nodeType === 1 ) { + tmp.push( results[i] ); + } + } + + results = tmp; + } + + return results; + }; + } + + // Check to see if an attribute returns normalized href attributes + div.innerHTML = ""; + + if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" && + div.firstChild.getAttribute("href") !== "#" ) { + + Expr.attrHandle.href = function( elem ) { + return elem.getAttribute( "href", 2 ); + }; + } + + // release memory in IE + div = null; +})(); + +if ( document.querySelectorAll ) { + (function(){ + var oldSizzle = Sizzle, + div = document.createElement("div"), + id = "__sizzle__"; + + div.innerHTML = "

"; + + // Safari can't handle uppercase or unicode characters when + // in quirks mode. + if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) { + return; + } + + Sizzle = function( query, context, extra, seed ) { + context = context || document; + + // Only use querySelectorAll on non-XML documents + // (ID selectors don't work in non-HTML documents) + if ( !seed && !Sizzle.isXML(context) ) { + // See if we find a selector to speed up + var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec( query ); + + if ( match && (context.nodeType === 1 || context.nodeType === 9) ) { + // Speed-up: Sizzle("TAG") + if ( match[1] ) { + return makeArray( context.getElementsByTagName( query ), extra ); + + // Speed-up: Sizzle(".CLASS") + } else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) { + return makeArray( context.getElementsByClassName( match[2] ), extra ); + } + } + + if ( context.nodeType === 9 ) { + // Speed-up: Sizzle("body") + // The body element only exists once, optimize finding it + if ( query === "body" && context.body ) { + return makeArray( [ context.body ], extra ); + + // Speed-up: Sizzle("#ID") + } else if ( match && match[3] ) { + var elem = context.getElementById( match[3] ); + + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + // Handle the case where IE and Opera return items + // by name instead of ID + if ( elem.id === match[3] ) { + return makeArray( [ elem ], extra ); + } + + } else { + return makeArray( [], extra ); + } + } + + try { + return makeArray( context.querySelectorAll(query), extra ); + } catch(qsaError) {} + + // qSA works strangely on Element-rooted queries + // We can work around this by specifying an extra ID on the root + // and working up from there (Thanks to Andrew Dupont for the technique) + // IE 8 doesn't work on object elements + } else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { + var old = context.getAttribute( "id" ), + nid = old || id, + hasParent = context.parentNode, + relativeHierarchySelector = /^\s*[+~]/.test( query ); + + if ( !old ) { + context.setAttribute( "id", nid ); + } else { + nid = nid.replace( /'/g, "\\$&" ); + } + if ( relativeHierarchySelector && hasParent ) { + context = context.parentNode; + } + + try { + if ( !relativeHierarchySelector || hasParent ) { + return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra ); + } + + } catch(pseudoError) { + } finally { + if ( !old ) { + context.removeAttribute( "id" ); + } + } + } + } + + return oldSizzle(query, context, extra, seed); + }; + + for ( var prop in oldSizzle ) { + Sizzle[ prop ] = oldSizzle[ prop ]; + } + + // release memory in IE + div = null; + })(); +} + +(function(){ + var html = document.documentElement, + matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector, + pseudoWorks = false; + + try { + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( document.documentElement, "[test!='']:sizzle" ); + + } catch( pseudoError ) { + pseudoWorks = true; + } + + if ( matches ) { + Sizzle.matchesSelector = function( node, expr ) { + // Make sure that attribute selectors are quoted + expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']"); + + if ( !Sizzle.isXML( node ) ) { + try { + if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) { + return matches.call( node, expr ); + } + } catch(e) {} + } + + return Sizzle(expr, null, null, [node]).length > 0; + }; + } +})(); + +(function(){ + var div = document.createElement("div"); + + div.innerHTML = "
"; + + // Opera can't find a second classname (in 9.6) + // Also, make sure that getElementsByClassName actually exists + if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) { + return; + } + + // Safari caches class attributes, doesn't catch changes (in 3.2) + div.lastChild.className = "e"; + + if ( div.getElementsByClassName("e").length === 1 ) { + return; + } + + Expr.order.splice(1, 0, "CLASS"); + Expr.find.CLASS = function( match, context, isXML ) { + if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) { + return context.getElementsByClassName(match[1]); + } + }; + + // release memory in IE + div = null; +})(); + +function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { + for ( var i = 0, l = checkSet.length; i < l; i++ ) { + var elem = checkSet[i]; + + if ( elem ) { + var match = false; + + elem = elem[dir]; + + while ( elem ) { + if ( elem.sizcache === doneName ) { + match = checkSet[elem.sizset]; + break; + } + + if ( elem.nodeType === 1 && !isXML ){ + elem.sizcache = doneName; + elem.sizset = i; + } + + if ( elem.nodeName.toLowerCase() === cur ) { + match = elem; + break; + } + + elem = elem[dir]; + } + + checkSet[i] = match; + } + } +} + +function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { + for ( var i = 0, l = checkSet.length; i < l; i++ ) { + var elem = checkSet[i]; + + if ( elem ) { + var match = false; + + elem = elem[dir]; + + while ( elem ) { + if ( elem.sizcache === doneName ) { + match = checkSet[elem.sizset]; + break; + } + + if ( elem.nodeType === 1 ) { + if ( !isXML ) { + elem.sizcache = doneName; + elem.sizset = i; + } + + if ( typeof cur !== "string" ) { + if ( elem === cur ) { + match = true; + break; + } + + } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) { + match = elem; + break; + } + } + + elem = elem[dir]; + } + + checkSet[i] = match; + } + } +} + +if ( document.documentElement.contains ) { + Sizzle.contains = function( a, b ) { + return a !== b && (a.contains ? a.contains(b) : true); + }; + +} else if ( document.documentElement.compareDocumentPosition ) { + Sizzle.contains = function( a, b ) { + return !!(a.compareDocumentPosition(b) & 16); + }; + +} else { + Sizzle.contains = function() { + return false; + }; +} + +Sizzle.isXML = function( elem ) { + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement; + + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +var posProcess = function( selector, context ) { + var match, + tmpSet = [], + later = "", + root = context.nodeType ? [context] : context; + + // Position selectors must be done after the filter + // And so must :not(positional) so we move all PSEUDOs to the end + while ( (match = Expr.match.PSEUDO.exec( selector )) ) { + later += match[0]; + selector = selector.replace( Expr.match.PSEUDO, "" ); + } + + selector = Expr.relative[selector] ? selector + "*" : selector; + + for ( var i = 0, l = root.length; i < l; i++ ) { + Sizzle( selector, root[i], tmpSet ); + } + + return Sizzle.filter( later, tmpSet ); +}; + +// EXPOSE +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; +jQuery.expr[":"] = jQuery.expr.filters; +jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; + + +})(); + + +var runtil = /Until$/, + rparentsprev = /^(?:parents|prevUntil|prevAll)/, + // Note: This RegExp should be improved, or likely pulled from Sizzle + rmultiselector = /,/, + isSimple = /^.[^:#\[\.,]*$/, + slice = Array.prototype.slice, + POS = jQuery.expr.match.POS, + // methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend({ + find: function( selector ) { + var ret = this.pushStack( "", "find", selector ), + length = 0; + + for ( var i = 0, l = this.length; i < l; i++ ) { + length = ret.length; + jQuery.find( selector, this[i], ret ); + + if ( i > 0 ) { + // Make sure that the results are unique + for ( var n = length; n < ret.length; n++ ) { + for ( var r = 0; r < length; r++ ) { + if ( ret[r] === ret[n] ) { + ret.splice(n--, 1); + break; + } + } + } + } + } + + return ret; + }, + + has: function( target ) { + var targets = jQuery( target ); + return this.filter(function() { + for ( var i = 0, l = targets.length; i < l; i++ ) { + if ( jQuery.contains( this, targets[i] ) ) { + return true; + } + } + }); + }, + + not: function( selector ) { + return this.pushStack( winnow(this, selector, false), "not", selector); + }, + + filter: function( selector ) { + return this.pushStack( winnow(this, selector, true), "filter", selector ); + }, + + is: function( selector ) { + return !!selector && jQuery.filter( selector, this ).length > 0; + }, + + closest: function( selectors, context ) { + var ret = [], i, l, cur = this[0]; + + if ( jQuery.isArray( selectors ) ) { + var match, selector, + matches = {}, + level = 1; + + if ( cur && selectors.length ) { + for ( i = 0, l = selectors.length; i < l; i++ ) { + selector = selectors[i]; + + if ( !matches[selector] ) { + matches[selector] = jQuery.expr.match.POS.test( selector ) ? + jQuery( selector, context || this.context ) : + selector; + } + } + + while ( cur && cur.ownerDocument && cur !== context ) { + for ( selector in matches ) { + match = matches[selector]; + + if ( match.jquery ? match.index(cur) > -1 : jQuery(cur).is(match) ) { + ret.push({ selector: selector, elem: cur, level: level }); + } + } + + cur = cur.parentNode; + level++; + } + } + + return ret; + } + + var pos = POS.test( selectors ) ? + jQuery( selectors, context || this.context ) : null; + + for ( i = 0, l = this.length; i < l; i++ ) { + cur = this[i]; + + while ( cur ) { + if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) { + ret.push( cur ); + break; + + } else { + cur = cur.parentNode; + if ( !cur || !cur.ownerDocument || cur === context ) { + break; + } + } + } + } + + ret = ret.length > 1 ? jQuery.unique(ret) : ret; + + return this.pushStack( ret, "closest", selectors ); + }, + + // Determine the position of an element within + // the matched set of elements + index: function( elem ) { + if ( !elem || typeof elem === "string" ) { + return jQuery.inArray( this[0], + // If it receives a string, the selector is used + // If it receives nothing, the siblings are used + elem ? jQuery( elem ) : this.parent().children() ); + } + // Locate the position of the desired element + return jQuery.inArray( + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[0] : elem, this ); + }, + + add: function( selector, context ) { + var set = typeof selector === "string" ? + jQuery( selector, context ) : + jQuery.makeArray( selector ), + all = jQuery.merge( this.get(), set ); + + return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ? + all : + jQuery.unique( all ) ); + }, + + andSelf: function() { + return this.add( this.prevObject ); + } +}); + +// A painfully simple check to see if an element is disconnected +// from a document (should be improved, where feasible). +function isDisconnected( node ) { + return !node || !node.parentNode || node.parentNode.nodeType === 11; +} + +jQuery.each({ + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return jQuery.dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return jQuery.dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return jQuery.nth( elem, 2, "nextSibling" ); + }, + prev: function( elem ) { + return jQuery.nth( elem, 2, "previousSibling" ); + }, + nextAll: function( elem ) { + return jQuery.dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return jQuery.dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return jQuery.dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return jQuery.dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return jQuery.sibling( elem.parentNode.firstChild, elem ); + }, + children: function( elem ) { + return jQuery.sibling( elem.firstChild ); + }, + contents: function( elem ) { + return jQuery.nodeName( elem, "iframe" ) ? + elem.contentDocument || elem.contentWindow.document : + jQuery.makeArray( elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var ret = jQuery.map( this, fn, until ), + // The variable 'args' was introduced in + // https://github.com/jquery/jquery/commit/52a0238 + // to work around a bug in Chrome 10 (Dev) and should be removed when the bug is fixed. + // http://code.google.com/p/v8/issues/detail?id=1050 + args = slice.call(arguments); + + if ( !runtil.test( name ) ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + ret = jQuery.filter( selector, ret ); + } + + ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret; + + if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) { + ret = ret.reverse(); + } + + return this.pushStack( ret, name, args.join(",") ); + }; +}); + +jQuery.extend({ + filter: function( expr, elems, not ) { + if ( not ) { + expr = ":not(" + expr + ")"; + } + + return elems.length === 1 ? + jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] : + jQuery.find.matches(expr, elems); + }, + + dir: function( elem, dir, until ) { + var matched = [], + cur = elem[ dir ]; + + while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) { + if ( cur.nodeType === 1 ) { + matched.push( cur ); + } + cur = cur[dir]; + } + return matched; + }, + + nth: function( cur, result, dir, elem ) { + result = result || 1; + var num = 0; + + for ( ; cur; cur = cur[dir] ) { + if ( cur.nodeType === 1 && ++num === result ) { + break; + } + } + + return cur; + }, + + sibling: function( n, elem ) { + var r = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + r.push( n ); + } + } + + return r; + } +}); + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, keep ) { + if ( jQuery.isFunction( qualifier ) ) { + return jQuery.grep(elements, function( elem, i ) { + var retVal = !!qualifier.call( elem, i, elem ); + return retVal === keep; + }); + + } else if ( qualifier.nodeType ) { + return jQuery.grep(elements, function( elem, i ) { + return (elem === qualifier) === keep; + }); + + } else if ( typeof qualifier === "string" ) { + var filtered = jQuery.grep(elements, function( elem ) { + return elem.nodeType === 1; + }); + + if ( isSimple.test( qualifier ) ) { + return jQuery.filter(qualifier, filtered, !keep); + } else { + qualifier = jQuery.filter( qualifier, filtered ); + } + } + + return jQuery.grep(elements, function( elem, i ) { + return (jQuery.inArray( elem, qualifier ) >= 0) === keep; + }); +} + + + + +var rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g, + rleadingWhitespace = /^\s+/, + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig, + rtagName = /<([\w:]+)/, + rtbody = /", "" ], + legend: [ 1, "
", "
" ], + thead: [ 1, "", "
" ], + tr: [ 2, "", "
" ], + td: [ 3, "", "
" ], + col: [ 2, "", "
" ], + area: [ 1, "", "" ], + _default: [ 0, "", "" ] + }; + +wrapMap.optgroup = wrapMap.option; +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +// IE can't serialize and "; echo '
    '; -$url = $APIurl."/json/timingpoints"; -if ($_REQUEST['allstops']) $url = $APIurl."/json/stops"; -if ($_REQUEST['lat'] && $_REQUEST['lon']) $url = $APIurl."/json/neareststops?lat={$_REQUEST['lat']}&lon={$_REQUEST['lon']}&limit=15"; $contents = json_decode(getPage($url)); debug(print_r($contents,true)); foreach ($contents as $key => $row) { @@ -39,10 +70,10 @@ echo ""; $firstletter = substr($row[1],0,1); } - echo '
  • '.$row[1].'
  • '; + echo '
  • '.bracketsMeanNewLine($row[1]).'
  • '; } echo '
'; - +} include_footer(); ?> --- a/busui/trip.php +++ b/busui/trip.php @@ -1,11 +1,12 @@ route_short_name . ' '. $trips[1]->route_long_name); +timePlaceSettings(); echo '
    '; @@ -30,7 +32,9 @@ foreach ($stops as $key => $row) { echo '
  • '; -echo '

    '.$row[1].'

    '; +echo '

    '.bracketsMeanNewLine($row[1]); +if ($row[0] == $stopid) echo "
    Current Location"; +echo '

    '; echo '

    '.midnight_seconds_to_time($times[$key]).'

    '; echo '
  • '; } --- a/busui/tripPlanner.php +++ b/busui/tripPlanner.php @@ -1,13 +1,16 @@ $errorMessage"; + global $date,$time,$from,$to; + echo "$errorMessage"; echo '
    @@ -85,23 +88,26 @@ } if ($_REQUEST['time']) { - $toPlace = (startsWith($_REQUEST['to'], "-") ? $_REQUEST['to'] : geocode(urlencode($_REQUEST['to']), false)); - $fromPlace = (startsWith($_REQUEST['from'], "-") ? $_REQUEST['from'] : geocode(urlencode($_REQUEST['from']), false)); + $toPlace = (startsWith($to, "-") ? $to : geocode($to, false)); + $fromPlace = (startsWith($from, "-") ? $from : geocode($from, false)); if ($toPlace == "" || $fromPlace == "") { $errorMessage = ""; if ($toPlace === "") - $errorMessage .= urlencode($_REQUEST['to']) . " not found.
    \n"; + $errorMessage .= urlencode($to) . " not found.
    \n"; if ($fromPlace === "") - $errorMessage .= urlencode($_REQUEST['from']) . " not found.
    \n"; + $errorMessage .= urlencode($from) . " not found.
    \n"; tripPlanForm($errorMessage); } else { - $url = "http://localhost:8080/opentripplanner-api-webapp/ws/plan?_dc=1290254798856&arriveBy=false&date=" . urlencode($_REQUEST['date']) . "&time=" . urlencode($_REQUEST['time']) . "&mode=TRANSIT%2CWALK&optimize=QUICK&maxWalkDistance=840&wheelchair=false&toPlace=$toPlace&fromPlace=$fromPlace&intermediatePlaces="; + $url = $otpAPIurl."ws/plan?date=" . urlencode($_REQUEST['date']) . "&time=" . urlencode($_REQUEST['time']) . "&mode=TRANSIT%2CWALK&optimize=QUICK&maxWalkDistance=840&wheelchair=false&toPlace=$toPlace&fromPlace=$fromPlace&intermediatePlaces="; $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_HTTPHEADER, array("Accept: application/json")); + curl_setopt($ch,CURLOPT_TIMEOUT,5); $page = curl_exec($ch); - curl_close($ch); + + if(curl_errno($ch)) { tripPlanForm("Trip planner temporarily unavailable: ".curl_errno($ch)." ".curl_error($ch));} + else { $tripplan = json_decode($page); debug(print_r($triplan,true)); echo "

    From: {$tripplan->plan->from->name} To: {$tripplan->plan->to->name}

    "; @@ -116,10 +122,12 @@ } else { processItinerary(0, $tripplan->plan->itineraries->itinerary); } - + } + curl_close($ch); } } else { tripPlanForm(); } include_footer(); ?> + --- a/busui/view.sh +++ b/busui/view.sh @@ -1,8 +1,2 @@ -# input location (via GPS or favourites or search) and destination (via searchable list, optional) -# http://10.0.1.153:8765/json/boundboxstops?n=-35.27568499917103&e=149.1346514225006&s=-35.279495003493516&w=149.12622928619385&limit=50 -# http://10.0.1.153:8765/json/stoptrips?stop=43&time=64440 # recursively call to show all services nearby, sort by distance, need to filter by service period -# Hey, can pick destination again from a list filtered to places these stops go if you're curious! -# http://10.0.1.153:8765/json/tripstoptimes?trip=2139 # Can recursively call and parse based on intended destination to show ETA -# http://10.0.1.153:8765/json/triprows?trip=2139 # For pretty maps python schedule_viewer.py --feed=../maxious-canberra-transit-feed/cbrfeed.zip --key=ABQIAAAA95XYXN0cki3Yj_Sb71CFvBTPaLd08ONybQDjcH_VdYtHHLgZvRTw2INzI_m17_IoOUqH3RNNmlTk1Q --- a/display.php +++ b/display.php @@ -18,7 +18,7 @@ // create the ol map object var map = new OpenLayers.Map('map', options); -var osmtiles = new OpenLayers.Layer.OSM("local", "http://localhost/tiles/${z}/${x}/${y}.png"); +var osmtiles = new OpenLayers.Layer.OSM("local", "http://10.0.1.154/tiles/${z}/${x}/${y}.png"); // use http://open.atlas.free.fr/GMapsTransparenciesImgOver.php and http://code.google.com/p/googletilecutter/ to make tiles var graphic = new OpenLayers.Layer.Image( 'Weekday Bus Map', --- a/displaytimepoints.georss.php +++ b/displaytimepoints.georss.php @@ -17,7 +17,7 @@ echo ""; echo "".htmlspecialchars ($timepoint['name']).""; echo "".htmlspecialchars($timepoint['name']).""; -echo " ".($timepoint['lat']/10000000)." ".($timepoint['lng']/10000000).""; +echo " ".($timepoint['lat']/10000001)." ".($timepoint['lng']/10000000).""; echo "\n"; } --- a/maxious-canberra-transit-feed/01-extracttimes.rb +++ b/maxious-canberra-transit-feed/01-extracttimes.rb @@ -17,9 +17,12 @@ timing_point = tp.content.squeeze(" ").gsub("Shops"," ").gsub("Bus Station"," Bus Station ").gsub("Interchange"," Bus Station ").gsub(" Platform"," (Platform") timing_point = timing_point.gsub("Machonochie","Maconochie").gsub("Hume"," ").gsub("Market Place","Marketplace").gsub("Terminus Fyshwick","Terminus") timing_point = timing_point.gsub(" - "," - ").gsub("\n"," ").gsub("\r"," ").gsub("\t"," ").gsub("\\"," / ").gsub("/"," / ").gsub(","," ").gsub("\302\240","").squeeze(" ").strip + if (short_name == "923" or short_name == "924" or short_name == "938") and timing_point == "Pearce" + timing_point = "Canberra Hospital" + end if (tp.content.match('Platform')) timing_point.concat(")") - end; + end if tp.to_s.match(/[0-9][0-9][0-9]/) or tp.to_s.include? "Wheelchair" timing_point = nil end --- a/maxious-canberra-transit-feed/02-tidytimepoints.rb +++ b/maxious-canberra-transit-feed/02-tidytimepoints.rb @@ -32,9 +32,9 @@ "Bridbabella GardensNursing Home"=> "Brindabella Gardens Nursing Home", "BrindabellaBusiness Park"=> "Brindabella Business Park", "NarrabundahTerminus"=>"Narrabundah Terminus", + "Narrabundah"=>"Narrabundah Terminus", "Railway StationKingston"=>"Railway Station Kingston", "Saint AndrewsVillage Hughes"=>"Saint Andrews Village Hughes", - "DicksonAntill Street"=>"Dickson", "Cohen St Bus Station (Platform 3)" => "Cohen Street Bus Station (Platform 3)", "Cohen St Bus Station (Platform 6)" => "Cohen Street Bus Station (Platform 6)", "Newcastle Streetafter Isa Street" => "Newcastle Street after Isa Street", @@ -53,6 +53,7 @@ "Flemington Road / Sandford St"=>"Flemington Rd / Sandford St", "Heagney Cres Clift Cres Richardson"=> "Heagney / Clift Richardson", "Charnwood (Tillyard Drive)"=> "Charnwood", + "Charnwood Tillyard Dr"=> "Charnwood", "charnwood"=> "Charnwood", "Black Moutain- Telstra Tower"=>"Black Mountain Telstra Tower", "Bonython Primary"=> "Bonython Primary School", @@ -64,8 +65,8 @@ "Calwell shops"=> "Calwell", "Chuculba / William Slim Drive"=>"Chuculba / William Slim Dr", "Fyshwick direct Factory Outlet"=>"Fyshwick Direct Factory Outlet", - "Kaleen Village / Maibrynong"=>"Kaleen Village / Marybrynong", - "Kaleen Village / Marybrynong Ave"=>"Kaleen Village / Marybrynong", + "Kaleen Village / Maibrynong"=>"Kaleen Village / Maribrynong", + "Kaleen Village / Marybrynong Ave"=>"Kaleen Village / Maribrynong", "National Aquarium"=>"National Zoo and Aquarium", "chisholm"=>"Chisholm", "O'connor"=>"O'Connor", @@ -74,24 +75,27 @@ "Procor / Mead"=>"Proctor / Mead", "Fyshwick DirectFactory Outlet"=>"Fyshwick Direct Factory Outlet", "Yarrulumla"=>"Yarralumla", - "Tharwa Dr / Pocket Ave"=>"Tharwa Dr / Pockett Ave", "Paul Coe / Mirrebei Dr"=>"Paul Coe / Mirrabei Dr", "Mirrebei Drive / Dam Wall"=>"Mirrabei Drive / Dam Wall", - "Tharwa / Knoke" => "Tharwa Drive / Knoke Ave", + "Tharwa / Knoke" => "Tharwa Drive / Pockett Ave", + "Tharwa Drive / Knoke Ave" => "Tharwa Drive / Pockett Ave", "Tharwa / Pocket" => "Tharwa Drive / Pockett Ave", 'Tharwa Dr / Pockett Ave' => "Tharwa Drive / Pockett Ave", + "Tharwa Dr / Pocket Ave"=>"Tharwa Dr / Pockett Ave", "Outrim / Duggan" => "Outtrim / Duggan", "ANU Burton and Garran Hall Daley Rd" => "Burton and Garran Hall Daley Road", "Farrer Primary"=>"Farrer Primary School", "St Thomas More Campbell"=>"St Thomas More's Campbell", + "Lyneham"=>"Lyneham / Wattle St", "Lyneham Wattle Street"=>"Lyneham / Wattle St", - "Dickson" => "Dickson / Antill St", + "Dickson" => "Dickson / Cowper St", 'Dickson Antill Street' => 'Dickson / Antill St', + "DicksonAntill Street"=> 'Dickson / Antill St', "Livingston / Kambah" => "Kambah / Livingston St", 'Melba shops' => 'Melba', 'St Clare of Assisi' => 'St Clare of Assisi Primary', - 'War Memorial Limestone Ave' => 'War Memorial / Limestone Ave' - + 'War Memorial Limestone Ave' => 'War Memorial / Limestone Ave', + 'Flynn' => 'Kingsford Smith / Companion' } time_point_corrections.each do |wrong, right| --- a/maxious-canberra-transit-feed/04-generateymlinclude.rb +++ b/maxious-canberra-transit-feed/04-generateymlinclude.rb @@ -27,7 +27,6 @@ time_points.each do |time_point| #pp time_point # 0 = name - # 1 = lat*100000 # 2 = lng*100000 #pp time_point[0] @@ -45,8 +44,9 @@ # 1 = lat*100000 # 2 = lng*100000 # 3 = name + # 4 = suburb(s) #pp time_point[0] - f2.puts " - { name: #{stop[3]},stop_code: #{stop[0]}, lat: #{Float(stop[1])/10000000}, lng: #{Float(stop[2])/10000000}}" + f2.puts " - { name: #{stop[3]},stop_code: #{stop[0]}, lat: #{Float(stop[1])/10000000}, lng: #{Float(stop[2])/10000000}, zone_id: #{stop[4]} }" end f2.puts "routes:\n"; end --- a/maxious-canberra-transit-feed/04-locatebetweenpoints.osm.xml.php +++ b/maxious-canberra-transit-feed/04-locatebetweenpoints.osm.xml.php @@ -2,7 +2,7 @@ header('Content-Type: application/xml'); echo " "; $conn = pg_connect("dbname=openstreetmap user=postgres password=snmc"); --- a/maxious-canberra-transit-feed/04-locatebetweenpoints.reversegeocode.php +++ b/maxious-canberra-transit-feed/04-locatebetweenpoints.reversegeocode.php @@ -25,9 +25,8 @@ echo "Processing ".$stop['geohash'] . " streetname ... "; $url = "http://geocoding.cloudmade.com/daa03470bb8740298d4b10e3f03d63e6/geocoding/v2/find.js?around=".($stop['lat']/10000000).",".($stop['lng']/10000000)."&distance=closest&object_type=road"; $contents = json_decode(getPage($url)); - print_r($contents); + //print_r($contents); $name = $contents->features[0]->properties->name; - //todo suburb/locality select * from suburbs where the_geom @> 'POINT(149.075704592122 -35.21751569325)'::geometry echo "Saving $name !
    " ; $result_save = pg_query($conn, "UPDATE stops set name = '".pg_escape_string($name)."' where geohash = '{$stop['geohash']}' "); if (!$result_save) { --- a/maxious-canberra-transit-feed/05-addbetweenpointstotimetables.rb +++ b/maxious-canberra-transit-feed/05-addbetweenpointstotimetables.rb @@ -36,7 +36,7 @@ #conn.close() if conn end between_points.each do |between_point_row| - points = between_point_row['points'].split(";") + points = between_point_row['points'].strip.split(";") points.delete("") timetable["between_stops"][timetable["time_points"][i] + '-' +timetable["time_points"][i+1]] = points; end --- a/maxious-canberra-transit-feed/cbrtable.yml +++ b/maxious-canberra-transit-feed/cbrtable.yml @@ -12,36 +12,28 @@ - { name: ADFA,stop_code: ADFA, lat: -35.2937972, lng: 149.1643403} - { name: Ainslie,stop_code: Ainslie, lat: -35.2620105, lng: 149.1443302} - { name: Alexander Maconochie Centre,stop_code: Alexander Maconochie Centre, lat: -35.3720651, lng: 149.1696618} - - { name: Alpen & Clifford St,stop_code: Alpen & Clifford St, lat: -35.20562, lng: 149.06259} - { name: Anthony Rolfe Av / Moonlight Av,stop_code: Anthony Rolfe Av / Moonlight Av, lat: -35.1856021, lng: 149.1543639} - { name: Aranda,stop_code: Aranda, lat: -35.257534, lng: 149.0762963} - { name: Athllon / Sulwood Kambah,stop_code: Athllon / Sulwood Kambah, lat: -35.38442, lng: 149.09328} - { name: Australian Institute of Sport,stop_code: Australian Institute of Sport, lat: -35.246351, lng: 149.101478} - - { name: Belconnen Community Bus Station,stop_code: Belconnen Community Bus Station, lat: -35.23987, lng: 149.0619} + - { name: Belconnen Community Bus Station,stop_code: Belconnen Community Bus Station, lat: -35.2398858, lng: 149.0690795} - { name: Belconnen Community Bus Station (Platform 1),stop_code: Belconnen Community Bus Station (Platform 1), lat: -35.23982, lng: 149.06978} - { name: Belconnen Community Bus Station (Platform 2),stop_code: Belconnen Community Bus Station (Platform 2), lat: -35.23982, lng: 149.06926} - { name: Belconnen Community Bus Station (Platform 3),stop_code: Belconnen Community Bus Station (Platform 3), lat: -35.23986, lng: 149.06847} - { name: Belconnen Community Bus Station (Platform 4),stop_code: Belconnen Community Bus Station (Platform 4), lat: -35.23994, lng: 149.06887} - { name: Belconnen Community Bus Station (Platform 5),stop_code: Belconnen Community Bus Station (Platform 5), lat: -35.23994, lng: 149.06928} - { name: Belconnen Community Bus Station (Platform 6),stop_code: Belconnen Community Bus Station (Platform 6), lat: -35.23994, lng: 149.0698} - - { name: Belconnen Way,stop_code: Belconnen Way, lat: -35.24809, lng: 149.06765} + - { name: Belconnen Way,stop_code: Belconnen Way, lat: -35.2410162, lng: 149.0409512} - { name: Bimberi Centre,stop_code: Bimberi Centre, lat: -35.2219941, lng: 149.1546928} - { name: Black Mountain Telstra Tower,stop_code: Black Mountain Telstra Tower, lat: -35.2748058, lng: 149.0972461} - - { name: Bonython,stop_code: Bonython, lat: -35.4297416, lng: 149.0814517} - - { name: Bonython Primary School,stop_code: Bonython Primary School, lat: -35.431019, lng: 149.0831217} + - { name: Bonython Primary School,stop_code: Bonython Primary School, lat: -35.4297416, lng: 149.0814517} - { name: Botanic Gardens,stop_code: Botanic Gardens, lat: -35.278643, lng: 149.1093237} - { name: Brindabella Business Park,stop_code: Brindabella Business Park, lat: -35.314496, lng: 149.189145} - { name: Brindabella Gardens Nursing Home,stop_code: Brindabella Gardens Nursing Home, lat: -35.3294459, lng: 149.0806116} - - { name: Bugden Sternberg,stop_code: Bugden Sternberg, lat: -35.4017223, lng: 149.0992172} + - { name: Bugden Sternberg,stop_code: Bugden Sternberg, lat: -35.403233, lng: 149.1073117} - { name: Burton and Garran Hall Daley Road,stop_code: Burton and Garran Hall Daley Road, lat: -35.2753671, lng: 149.1172822} - { name: Calvary Hospital,stop_code: Calvary Hospital, lat: -35.25212, lng: 149.09088} - { name: Calwell,stop_code: Calwell, lat: -35.43524, lng: 149.113942} - - { name: Cameron Ave Bus Station,stop_code: Cameron Ave Bus Station, lat: -35.2410195, lng: 149.0722506} - - { name: Cameron Ave Bus Station (Platform 1),stop_code: Cameron Ave Bus Station (Platform 1), lat: -35.2410195, lng: 149.0722506} - - { name: Cameron Ave Bus Station (Platform 2),stop_code: Cameron Ave Bus Station (Platform 2), lat: -35.2410108, lng: 149.0717142} - - { name: Cameron Ave Bus Station (Platform 3),stop_code: Cameron Ave Bus Station (Platform 3), lat: -35.2410064, lng: 149.0710758} - - { name: Cameron Ave Bus Station (Platform 4),stop_code: Cameron Ave Bus Station (Platform 4), lat: -35.2411773, lng: 149.0709793} - - { name: Cameron Ave Bus Station (Platform 5),stop_code: Cameron Ave Bus Station (Platform 5), lat: -35.241186, lng: 149.0720789} - { name: Campbell Park Offices,stop_code: Campbell Park Offices, lat: -35.28368, lng: 149.17045} - { name: Canberra College Weston Campus,stop_code: Canberra College Weston Campus, lat: -35.3490278, lng: 149.0486277} - { name: Canberra Hospital,stop_code: Canberra Hospital, lat: -35.3459462, lng: 149.1012001} @@ -51,9 +43,8 @@ - { name: Centrelink Tuggeranong,stop_code: Centrelink Tuggeranong, lat: -35.4207496, lng: 149.0700973} - { name: Chapman,stop_code: Chapman, lat: -35.3557877, lng: 149.0408111} - { name: Charnwood,stop_code: Charnwood, lat: -35.2052138, lng: 149.0337266} - - { name: Charnwood Tillyard Dr,stop_code: Charnwood Tillyard Dr, lat: -35.20295, lng: 149.04027} - - { name: Chifley,stop_code: Chifley, lat: -35.350985, lng: 149.077319} - - { name: Chisholm,stop_code: Chisholm, lat: -35.41341, lng: 149.12833} + - { name: Chifley,stop_code: Chifley, lat: -35.3529713, lng: 149.0759413} + - { name: Chisholm,stop_code: Chisholm, lat: -35.41341, lng: 149.1308079} - { name: Chuculba / William Slim Dr,stop_code: Chuculba / William Slim Dr, lat: -35.208931, lng: 149.088499} - { name: CIT Weston,stop_code: CIT Weston, lat: -35.330234, lng: 149.058632} - { name: City Bus Station,stop_code: City Bus Station, lat: -35.2794346, lng: 149.1305879} @@ -68,8 +59,6 @@ - { name: City Bus Station (Platform 8),stop_code: City Bus Station (Platform 8), lat: -35.2778798, lng: 149.1305995} - { name: City Bus Station (Platform 9),stop_code: City Bus Station (Platform 9), lat: -35.2783224, lng: 149.130726} - { name: City West,stop_code: City West, lat: -35.2788605, lng: 149.1257969} - - { name: Cnr Kerrigan/Lhotsky,stop_code: Cnr Kerrigan/Lhotsky, lat: -35.1995716, lng: 149.0285277} - - { name: Cnr Tillyard Dr & Spalding St,stop_code: Cnr Tillyard Dr & Spalding St, lat: -35.2040477, lng: 149.0393052} - { name: Cohen Street Bus Station,stop_code: Cohen Street Bus Station, lat: -35.2394775, lng: 149.0602031} - { name: Cohen Street Bus Station (Platform 1),stop_code: Cohen Street Bus Station (Platform 1), lat: -35.2394775, lng: 149.0602031} - { name: Cohen Street Bus Station (Platform 2),stop_code: Cohen Street Bus Station (Platform 2), lat: -35.2396467, lng: 149.0602152} @@ -81,41 +70,38 @@ - { name: Cook,stop_code: Cook, lat: -35.2596, lng: 149.0638} - { name: Cooleman Court,stop_code: Cooleman Court, lat: -35.34147, lng: 149.05338} - { name: Copland College,stop_code: Copland College, lat: -35.2127018, lng: 149.0596387} - - { name: Curtin,stop_code: Curtin, lat: -35.3248779, lng: 149.081441} - - { name: Deakin,stop_code: Deakin, lat: -35.3158608, lng: 149.1084563} - - { name: Deamer / Clift Richardson,stop_code: Deamer / Clift Richardson, lat: -35.4319597, lng: 149.1187876} + - { name: Curtin,stop_code: Curtin, lat: -35.3253034, lng: 149.0840838} + - { name: Deakin,stop_code: Deakin, lat: -35.3151707, lng: 149.1084563} + - { name: Deamer / Clift Richardson,stop_code: Deamer / Clift Richardson, lat: -35.4294463, lng: 149.12} - { name: Dickson / Antill St,stop_code: Dickson / Antill St, lat: -35.2489, lng: 149.14012} - { name: Dickson College,stop_code: Dickson College, lat: -35.24923, lng: 149.15315} - { name: Dickson / Cowper St,stop_code: Dickson / Cowper St, lat: -35.250297, lng: 149.141336} - { name: Duffy,stop_code: Duffy, lat: -35.3366908, lng: 149.0324311} - { name: Duffy Primary,stop_code: Duffy Primary, lat: -35.334219, lng: 149.033656} - - { name: Dunlop,stop_code: Dunlop, lat: -35.1942693, lng: 149.0206702} + - { name: Dunlop,stop_code: Dunlop, lat: -35.1981771, lng: 149.0207837} - { name: Erindale Centre,stop_code: Erindale Centre, lat: -35.4038881, lng: 149.0992283} - { name: Erindale Dr / Charleston St Monash,stop_code: Erindale Dr / Charleston St Monash, lat: -35.414616, lng: 149.07888} - - { name: Erindale / Sternberg Cres,stop_code: Erindale / Sternberg Cres, lat: -35.4014472, lng: 149.0956545} + - { name: Erindale / Sternberg Cres,stop_code: Erindale / Sternberg Cres, lat: -35.4028919, lng: 149.1060672} - { name: Evatt,stop_code: Evatt, lat: -35.2091093, lng: 149.0735343} - { name: Eye Hospital,stop_code: Eye Hospital, lat: -35.3341884, lng: 149.1656213} - - { name: Fairbairn Park,stop_code: Fairbairn Park, lat: -35.3001773, lng: 149.2041185} + - { name: Fairbairn Park,stop_code: Fairbairn Park, lat: -35.3038896, lng: 149.2038605} - { name: Farrer Primary School,stop_code: Farrer Primary School, lat: -35.37887, lng: 149.10641} - - { name: Farrer Terminus,stop_code: Farrer Terminus, lat: -35.3771794, lng: 149.1046948} + - { name: Farrer Terminus,stop_code: Farrer Terminus, lat: -35.380274, lng: 149.1104016} - { name: Federation Square,stop_code: Federation Square, lat: -35.1908726, lng: 149.0848153} - { name: Fisher,stop_code: Fisher, lat: -35.3605627, lng: 149.0576481} - - { name: Flemington Rd,stop_code: Flemington Rd, lat: -35.20756, lng: 149.14778} - { name: Flemington Rd / Nullabor Ave,stop_code: Flemington Rd / Nullabor Ave, lat: -35.2008585, lng: 149.1493407} - { name: Flemington Rd / Sandford St,stop_code: Flemington Rd / Sandford St, lat: -35.221231, lng: 149.144645} - - { name: Florey,stop_code: Florey, lat: -35.2258544, lng: 149.0546214} - - { name: Flynn,stop_code: Flynn, lat: -35.2019283, lng: 149.0478356} - - { name: Fraser,stop_code: Fraser, lat: -35.1896539, lng: 149.0435012} - - { name: Fraser East Terminus,stop_code: Fraser East Terminus, lat: -35.1896539, lng: 149.0435012} + - { name: Florey,stop_code: Florey, lat: -35.2267757, lng: 149.0544025} + - { name: Fraser,stop_code: Fraser, lat: -35.1929304, lng: 149.0433893} + - { name: Fraser East Terminus,stop_code: Fraser East Terminus, lat: -35.1896539, lng: 149.04811} - { name: Fraser West Terminus,stop_code: Fraser West Terminus, lat: -35.191513, lng: 149.038006} - { name: Fyshwick Direct Factory Outlet,stop_code: Fyshwick Direct Factory Outlet, lat: -35.3359862, lng: 149.1796322} - - { name: Fyshwick Terminus,stop_code: Fyshwick Terminus, lat: -35.3285202, lng: 149.1785592} - { name: Garran,stop_code: Garran, lat: -35.3423286, lng: 149.10811} - { name: Geoscience Australia,stop_code: Geoscience Australia, lat: -35.3429702, lng: 149.1583893} - { name: Giralang,stop_code: Giralang, lat: -35.2115608, lng: 149.0960692} - { name: Gordon Primary,stop_code: Gordon Primary, lat: -35.455517, lng: 149.086978} - - { name: Gowrie,stop_code: Gowrie, lat: -35.4120264, lng: 149.1110804} - - { name: Gungahlin Marketplace,stop_code: Gungahlin Marketplace, lat: -35.1769532, lng: 149.1319017} + - { name: Gowrie,stop_code: Gowrie, lat: -35.4141373, lng: 149.1100798} + - { name: Gungahlin Marketplace,stop_code: Gungahlin Marketplace, lat: -35.183259, lng: 149.1328249} - { name: Gwydir Square Kaleen,stop_code: Gwydir Square Kaleen, lat: -35.2338677, lng: 149.1031998} - { name: Hackett,stop_code: Hackett, lat: -35.2481617, lng: 149.1626094} - { name: Hawker,stop_code: Hawker, lat: -35.2437386, lng: 149.0432804} @@ -127,38 +113,27 @@ - { name: Holt,stop_code: Holt, lat: -35.223099, lng: 149.0126269} - { name: Hoskins Street / Oodgeroo Ave,stop_code: Hoskins Street / Oodgeroo Ave, lat: -35.201095, lng: 149.139941} - { name: Hospice / Menindee Dr,stop_code: Hospice / Menindee Dr, lat: -35.303557, lng: 149.151627} - - { name: Hughes,stop_code: Hughes, lat: -35.3339223, lng: 149.093854} + - { name: Hughes,stop_code: Hughes, lat: -35.3324722, lng: 149.0923343} - { name: Isaacs,stop_code: Isaacs, lat: -35.3669823, lng: 149.1119217} - { name: Isabella,stop_code: Isabella, lat: -35.4285703, lng: 149.0916837} - { name: Jamison Centre,stop_code: Jamison Centre, lat: -35.2527268, lng: 149.0713712} - { name: John James Hospital,stop_code: John James Hospital, lat: -35.3200295, lng: 149.0955996} - - { name: Kaleen Village / Marybrynong,stop_code: Kaleen Village / Marybrynong, lat: -35.2274031, lng: 149.1075421} - - { name: Kambah High,stop_code: Kambah High, lat: -35.3847749, lng: 149.0720245} - - { name: Kambah / Livingston St,stop_code: Kambah / Livingston St, lat: -35.3883359, lng: 149.0811471} + - { name: Kaleen Village / Maribrynong,stop_code: Kaleen Village / Maribrynong, lat: -35.2197554, lng: 149.1029934} + - { name: Kambah High,stop_code: Kambah High, lat: -35.3926493, lng: 149.068179} + - { name: Kambah / Livingston St,stop_code: Kambah / Livingston St, lat: -35.3902193, lng: 149.0781883} - { name: Kambah Village,stop_code: Kambah Village, lat: -35.3800314, lng: 149.0576581} - - { name: Katherine Ave / Horse Park Drive,stop_code: Katherine Ave / Horse Park Drive, lat: -35.1680901, lng: 149.1321801} + - { name: Katherine Ave / Horse Park Drive,stop_code: Katherine Ave / Horse Park Drive, lat: -35.1688681, lng: 149.1387048} - { name: Kerrigan / Lhotsky,stop_code: Kerrigan / Lhotsky, lat: -35.193801, lng: 149.035689} - { name: Kings Ave / National Circuit,stop_code: Kings Ave / National Circuit, lat: -35.305004, lng: 149.13262} - - { name: Kingston,stop_code: Kingston, lat: -35.3197448, lng: 149.1375261} + - { name: Kingsford Smith / Companion,stop_code: Kingsford Smith / Companion, lat: -35.2137074, lng: 149.0461359} + - { name: Kingston,stop_code: Kingston, lat: -35.3161906, lng: 149.1398308} - { name: Kippax,stop_code: Kippax, lat: -35.22225, lng: 149.0195627} - - { name: Kippax Centre,stop_code: Kippax Centre, lat: -35.22172, lng: 149.01995} - - { name: Kosciuszko / Everard,stop_code: Kosciuszko / Everard, lat: -35.188901, lng: 149.1216937} + - { name: Kosciuszko / Everard,stop_code: Kosciuszko / Everard, lat: -35.1951396, lng: 149.1265593} - { name: Lanyon Marketplace,stop_code: Lanyon Marketplace, lat: -35.4573, lng: 149.09199} - - { name: Latham,stop_code: Latham, lat: -35.21848, lng: 149.03214} - { name: Latham Post Office,stop_code: Latham Post Office, lat: -35.21906, lng: 149.03223} - - { name: Lathlain St Bus Station,stop_code: Lathlain St Bus Station, lat: -35.2396657, lng: 149.0633993} - - { name: Lathlain St Bus Station (Platform 1),stop_code: Lathlain St Bus Station (Platform 1), lat: -35.2408973, lng: 149.0639887} - - { name: Lathlain St Bus Station (Platform 2),stop_code: Lathlain St Bus Station (Platform 2), lat: -35.2406038, lng: 149.0638922} - - { name: Lathlain St Bus Station (Platform 3),stop_code: Lathlain St Bus Station (Platform 3), lat: -35.2400517, lng: 149.0637152} - - { name: Lathlain St Bus Station (Platform 4),stop_code: Lathlain St Bus Station (Platform 4), lat: -35.2396657, lng: 149.0633993} - - { name: Lathlain St Bus Station (Platform 5),stop_code: Lathlain St Bus Station (Platform 5), lat: -35.2405468, lng: 149.0636669} - - { name: Lathlain St Bus Station (Platform 6),stop_code: Lathlain St Bus Station (Platform 6), lat: -35.2410486, lng: 149.0638326} - - { name: Lewis Luxton/Woodcock Dr,stop_code: Lewis Luxton/Woodcock Dr, lat: -35.4422566, lng: 149.0854375} - - { name: Lithgow St Terminus Fyshwick,stop_code: Lithgow St Terminus Fyshwick, lat: -35.3296912, lng: 149.1668153} - - { name: Lyneham,stop_code: Lyneham, lat: -35.2523304, lng: 149.1246184} - - { name: Lyneham High,stop_code: Lyneham High, lat: -35.2524016, lng: 149.130254} - - { name: Lyneham / Wattle St,stop_code: Lyneham / Wattle St, lat: -35.25205, lng: 149.12524} - - { name: Lyons,stop_code: Lyons, lat: -35.3415779, lng: 149.0765703} + - { name: Lithgow St Terminus Fyshwick,stop_code: Lithgow St Terminus Fyshwick, lat: -35.3310543, lng: 149.1635094} + - { name: Lyneham / Wattle St,stop_code: Lyneham / Wattle St, lat: -35.251719, lng: 149.1239146} + - { name: Lyons,stop_code: Lyons, lat: -35.3399554, lng: 149.0763376} - { name: Macarthur / Miller O'Connor,stop_code: Macarthur / Miller O'Connor, lat: -35.2587584, lng: 149.1153561} - { name: Macarthur / Northbourne Ave,stop_code: Macarthur / Northbourne Ave, lat: -35.26051, lng: 149.13224} - { name: Macgregor,stop_code: Macgregor, lat: -35.2100645, lng: 149.0122952} @@ -174,53 +149,48 @@ - { name: Mentone View / Tharwa Drive,stop_code: Mentone View / Tharwa Drive, lat: -35.45144, lng: 149.0919} - { name: Merici College,stop_code: Merici College, lat: -35.266525, lng: 149.137037} - { name: Mirrabei Drive / Dam Wall,stop_code: Mirrabei Drive / Dam Wall, lat: -35.177453, lng: 149.124291} - - { name: Monash,stop_code: Monash, lat: -35.4190254, lng: 149.0834805} - - { name: Monash Goodwin Village,stop_code: Monash Goodwin Village, lat: -35.421084, lng: 149.097438} + - { name: Monash Goodwin Village,stop_code: Monash Goodwin Village, lat: -35.4152914, lng: 149.0947375} - { name: Monash Primary,stop_code: Monash Primary, lat: -35.414879, lng: 149.089411} - { name: Mount Neighbour School,stop_code: Mount Neighbour School, lat: -35.382445, lng: 149.051518} - - { name: Narrabundah,stop_code: Narrabundah, lat: -35.332605, lng: 149.154049} - { name: Narrabundah College,stop_code: Narrabundah College, lat: -35.3362106, lng: 149.1471005} - - { name: Narrabundah Terminus,stop_code: Narrabundah Terminus, lat: -35.332605, lng: 149.154049} + - { name: Narrabundah Terminus,stop_code: Narrabundah Terminus, lat: -35.3311332, lng: 149.1584454} - { name: National Circ / Canberra Ave,stop_code: National Circ / Canberra Ave, lat: -35.31407, lng: 149.13011} - { name: National Hockey Centre Lyneham,stop_code: National Hockey Centre Lyneham, lat: -35.2446729, lng: 149.1288303} - { name: National Museum of Australia,stop_code: National Museum of Australia, lat: -35.29248, lng: 149.1205367} - { name: National Zoo and Aquarium,stop_code: National Zoo and Aquarium, lat: -35.29915, lng: 149.07025} - { name: Newcastle Street after Isa Street,stop_code: Newcastle Street after Isa Street, lat: -35.3255, lng: 149.173291} - { name: Ngunnawal Primary,stop_code: Ngunnawal Primary, lat: -35.1688551, lng: 149.1112569} - - { name: Nicholls Primary,stop_code: Nicholls Primary, lat: -35.1905592, lng: 149.0876716} + - { name: Nicholls Primary,stop_code: Nicholls Primary, lat: -35.1836886, lng: 149.099298} - { name: Northbourne Avenue / Antill St,stop_code: Northbourne Avenue / Antill St, lat: -35.248287, lng: 149.134241} - - { name: North Lyneham,stop_code: North Lyneham, lat: -35.2385618, lng: 149.1221188} + - { name: North Lyneham,stop_code: North Lyneham, lat: -35.2401925, lng: 149.1255722} - { name: O'Connor,stop_code: O'Connor, lat: -35.2640376, lng: 149.1226107} - { name: Olims Hotel,stop_code: Olims Hotel, lat: -35.27597, lng: 149.1428} - { name: Outtrim / Duggan,stop_code: Outtrim / Duggan, lat: -35.435871, lng: 149.097692} - - { name: Page,stop_code: Page, lat: -35.2360695, lng: 149.0536554} + - { name: Page,stop_code: Page, lat: -35.2400611, lng: 149.0523318} - { name: Parliament House,stop_code: Parliament House, lat: -35.3081571, lng: 149.1244592} - { name: Paul Coe / Mirrabei Dr,stop_code: Paul Coe / Mirrabei Dr, lat: -35.17467, lng: 149.12005} - { name: Pearce,stop_code: Pearce, lat: -35.3625413, lng: 149.0815935} - - { name: Police College Weston,stop_code: Police College Weston, lat: -35.33018, lng: 149.05458} - { name: Proctor / Mead,stop_code: Proctor / Mead, lat: -35.415305, lng: 149.127204} - { name: Railway Station Kingston,stop_code: Railway Station Kingston, lat: -35.319602, lng: 149.149083} - - { name: Red Hill,stop_code: Red Hill, lat: -35.336505, lng: 149.131645} + - { name: Red Hill,stop_code: Red Hill, lat: -35.3406993, lng: 149.1313712} - { name: Rivett,stop_code: Rivett, lat: -35.3473758, lng: 149.0365438} - { name: Russell Offices,stop_code: Russell Offices, lat: -35.2973294, lng: 149.1508803} - - { name: Sainsbury Street,stop_code: Sainsbury Street, lat: -35.3885, lng: 149.09643} - { name: Saint Andrews Village Hughes,stop_code: Saint Andrews Village Hughes, lat: -35.328097, lng: 149.088685} - { name: Scullin,stop_code: Scullin, lat: -35.23356, lng: 149.04056} - { name: Shoalhaven / Katherine Ave,stop_code: Shoalhaven / Katherine Ave, lat: -35.16823, lng: 149.12791} - { name: Southlands Mawson,stop_code: Southlands Mawson, lat: -35.3650685, lng: 149.0945962} - { name: Southwell Park,stop_code: Southwell Park, lat: -35.24573, lng: 149.1321} - { name: Spence,stop_code: Spence, lat: -35.194735, lng: 149.062352} - - { name: Spence Terminus,stop_code: Spence Terminus, lat: -35.199684, lng: 149.0676196} + - { name: Spence Terminus,stop_code: Spence Terminus, lat: -35.2007421, lng: 149.068409} - { name: St Clare of Assisi Primary,stop_code: St Clare of Assisi Primary, lat: -35.4606284, lng: 149.0962704} - { name: St Francis Xavier Florey,stop_code: St Francis Xavier Florey, lat: -35.223951, lng: 149.0406888} - { name: Stromlo High Waramanga,stop_code: Stromlo High Waramanga, lat: -35.3551186, lng: 149.0547624} - { name: St Thomas More's Campbell,stop_code: St Thomas More's Campbell, lat: -35.286717, lng: 149.156836} - { name: Sydney Ave,stop_code: Sydney Ave, lat: -35.31193, lng: 149.13105} - - { name: Taverner St / Erindale Dr,stop_code: Taverner St / Erindale Dr, lat: -35.4059104, lng: 149.0809317} - - { name: Tharwa Drive,stop_code: Tharwa Drive, lat: -35.458251, lng: 149.091652} - - { name: Tharwa Drive / Knoke Ave,stop_code: Tharwa Drive / Knoke Ave, lat: -35.47281, lng: 149.08926} + - { name: Taverner St / Erindale Dr,stop_code: Taverner St / Erindale Dr, lat: -35.4103948, lng: 149.0867553} + - { name: Tharwa Drive,stop_code: Tharwa Drive, lat: -35.4440881, lng: 149.1029773} - { name: Tharwa Drive / Pockett Ave,stop_code: Tharwa Drive / Pockett Ave, lat: -35.47348, lng: 149.09178} - - { name: Theodore,stop_code: Theodore, lat: -35.4464808, lng: 149.1234651} + - { name: Theodore,stop_code: Theodore, lat: -35.4531254, lng: 149.1188345} - { name: Tillyard / Spalding,stop_code: Tillyard / Spalding, lat: -35.199204, lng: 149.044556} - { name: Torrens,stop_code: Torrens, lat: -35.3730889, lng: 149.087327} - { name: Tuggeranong Bus Station,stop_code: Tuggeranong Bus Station, lat: -35.41465, lng: 149.06537} @@ -233,15 +203,15 @@ - { name: Wanniassa High,stop_code: Wanniassa High, lat: -35.3952462, lng: 149.0852655} - { name: Waramanga,stop_code: Waramanga, lat: -35.3526825, lng: 149.0594712} - { name: War Memorial / Limestone Ave,stop_code: War Memorial / Limestone Ave, lat: -35.280477, lng: 149.149085} - - { name: Watson,stop_code: Watson, lat: -35.2389399, lng: 149.1535345} - - { name: Watson Terminus,stop_code: Watson Terminus, lat: -35.2374698, lng: 149.1534553} + - { name: Watson,stop_code: Watson, lat: -35.2374698, lng: 149.1534553} + - { name: Watson Terminus,stop_code: Watson Terminus, lat: -35.2298957, lng: 149.1628978} - { name: Weetangera,stop_code: Weetangera, lat: -35.248393, lng: 149.0506342} - { name: Westfield Bus Station,stop_code: Westfield Bus Station, lat: -35.23875, lng: 149.0638} - { name: Westfield Bus Station (Platform 1),stop_code: Westfield Bus Station (Platform 1), lat: -35.23872, lng: 149.06387} - { name: Westfield Bus Station (Platform 2),stop_code: Westfield Bus Station (Platform 2), lat: -35.23882, lng: 149.0637} - - { name: West Macgregor,stop_code: West Macgregor, lat: -35.21207, lng: 149.00165} - - { name: Weston Creek Terminus,stop_code: Weston Creek Terminus, lat: -35.342728, lng: 149.0524906} - - { name: Weston Primary,stop_code: Weston Primary, lat: -35.3305221, lng: 149.0524281} + - { name: West Macgregor,stop_code: West Macgregor, lat: -35.2137337, lng: 149.0037677} + - { name: Weston Creek Terminus,stop_code: Weston Creek Terminus, lat: -35.3439374, lng: 149.0269098} + - { name: Weston Primary,stop_code: Weston Primary, lat: -35.3369272, lng: 149.0579376} - { name: William Webb / Ginninderra Drive,stop_code: William Webb / Ginninderra Drive, lat: -35.222395, lng: 149.0706} - { name: Woden Bus Station,stop_code: Woden Bus Station, lat: -35.34433, lng: 149.08742} - { name: Woden Bus Station (Platform 10),stop_code: Woden Bus Station (Platform 10), lat: -35.3439501, lng: 149.0877369} @@ -258,1467 +228,1722 @@ - { name: Woden Bus Station (Platform 9),stop_code: Woden Bus Station (Platform 9), lat: -35.3442083, lng: 149.0877771} - { name: Woodcock / Clare Dennis,stop_code: Woodcock / Clare Dennis, lat: -35.4422566, lng: 149.0854375} - { name: Yarralumla,stop_code: Yarralumla, lat: -35.30725, lng: 149.0972} - - { name: Andrea Place,stop_code: Wjz1ceG, lat: -35.4375289, lng: 149.0757996} - - { name: Tarlton Place,stop_code: Wjz1kvl, lat: -35.4366017, lng: 149.0890756} - - { name: Don Dunstan Drive,stop_code: Wjz16U7, lat: -35.4302659, lng: 149.0722593} - - { name: Salmon Place,stop_code: WjrWY3_, lat: -35.3952466, lng: 149.0527528} - - { name: Crozier Circuit,stop_code: WjrWSUa, lat: -35.3867455, lng: 149.0504459} - - { name: Mouat Street,stop_code: Wjz5LYB, lat: -35.2464052, lng: 149.1278592} - - { name: Mackennal Street,stop_code: Wjz5LsC, lat: -35.2463364, lng: 149.1223897} - - { name: Clianthus Street,stop_code: Wjz5Krx, lat: -35.2529666, lng: 149.1223781} - - { name: Way Street,stop_code: Wjz5BWh, lat: -35.2591172, lng: 149.1164155} - - { name: Cockle Street,stop_code: Wjz5AGB, lat: -35.2642702, lng: 149.1141435} - - { name: Froggatt Street,stop_code: Wjz5H0p, lat: -35.2714838, lng: 149.1180142} - - { name: McClintock Street,stop_code: Wjz6ElH, lat: -35.2404264, lng: 149.1210434} - - { name: Cossington Smith Crescent,stop_code: Wjz6FEI, lat: -35.2382959, lng: 149.1252507} - - { name: Dumas Street,stop_code: Wjz6cz2, lat: -35.2199304, lng: 149.0791416} - - { name: Buggy Crescent,stop_code: Wjz64OE, lat: -35.2207286, lng: 149.0717368} - - { name: Owen Dixon Drive,stop_code: Wjz6eWi, lat: -35.2096321, lng: 149.0835148} - - { name: Baldwin Drive,stop_code: Wjz6kCT, lat: -35.217402, lng: 149.0910262} - - { name: Jacob Place,stop_code: Wjr-TRM, lat: -35.2021703, lng: 149.0498418} - - { name: Love Street,stop_code: Wjr_MMi, lat: -35.200018, lng: 149.0491234} - - { name: Box Place,stop_code: Wjr-IeY, lat: -35.2176259, lng: 149.032238} - - { name: Macrossan Crescent,stop_code: Wjr-J8t, lat: -35.2161747, lng: 149.0315719} - - { name: Want Place,stop_code: Wjr-Jm9, lat: -35.2124379, lng: 149.0325045} - - { name: Fellows Street,stop_code: Wjr-J44, lat: -35.2135626, lng: 149.0296181} - - { name: Osburn Drive,stop_code: Wjr-BB3, lat: -35.2129096, lng: 149.0241561} - - { name: Solomon Crescent,stop_code: Wjr-AY4, lat: -35.2190044, lng: 149.0282415} - - { name: Onslow Street,stop_code: Wjr-IcO, lat: -35.2191858, lng: 149.0319716} - - { name: Onslow Street,stop_code: Wjr-IqS, lat: -35.2202741, lng: 149.034858} - - { name: Kingsford Smith Drive,stop_code: Wjr-H-a, lat: -35.2232851, lng: 149.039343} - - { name: Krefft Street,stop_code: Wjr-Q4G, lat: -35.2192221, lng: 149.0415189} - - { name: Maribyrnong Avenue,stop_code: Wjz6zon, lat: -35.2269858, lng: 149.1109391} - - { name: Maribyrnong Avenue,stop_code: Wjz6ytu, lat: -35.2291622, lng: 149.1110812} - - { name: Belconnen Way,stop_code: Wjz5mpm, lat: -35.2538531, lng: 149.0889493} - - { name: Belconnen Way,stop_code: Wjz5mxf, lat: -35.2538241, lng: 149.0902637} - - { name: Belconnen Way,stop_code: Wjr-MNh, lat: -35.2433401, lng: 149.0492618} - - { name: Belconnen Way,stop_code: Wjr-Mqd, lat: -35.2422956, lng: 149.0448568} - - { name: Belconnen Way,stop_code: Wjr-EYe, lat: -35.2408449, lng: 149.0394925} - - { name: Belconnen Way,stop_code: Wjr-EA_, lat: -35.2407288, lng: 149.0362953} - - { name: Mackinolty Street,stop_code: Wjr-Fw4, lat: -35.2382916, lng: 149.035194} - - { name: Challinor Crescent,stop_code: Wjr-Vnf, lat: -35.2331848, lng: 149.054555} - - { name: Lightfoot Crescent,stop_code: Wjr-Ws2, lat: -35.230167, lng: 149.0557628} - - { name: Nanson Place,stop_code: Wjr-PyX, lat: -35.2259882, lng: 149.0472724} - - { name: Kulgera Street,stop_code: WjrZKZn, lat: -35.2510294, lng: 149.0396391} - - { name: King Edward Terrace,stop_code: Wjz4S1U, lat: -35.2983385, lng: 149.1296979} - - { name: King George Terrace,stop_code: Wjz4RbQ, lat: -35.3021238, lng: 149.1308574} - - { name: James Street,stop_code: Wjz3fCx, lat: -35.333256, lng: 149.0798309} - - { name: Kent Street,stop_code: Wjz4peM, lat: -35.322342, lng: 149.0979263} - - { name: Fuller Street,stop_code: Wjz4qgy, lat: -35.3208475, lng: 149.098981} - - { name: Hopetoun Circuit,stop_code: Wjz4A7o, lat: -35.3052441, lng: 149.107042} - - { name: De Chair Street,stop_code: Wjz4qTw, lat: -35.3162151, lng: 149.1045086} - - { name: Macgregor Street,stop_code: Wjz4qs0, lat: -35.3182278, lng: 149.09964} - - { name: Stonehaven Crescent,stop_code: Wjz4yzk, lat: -35.3186155, lng: 149.1123352} - - { name: Dominion Circuit,stop_code: Wjz4H0P, lat: -35.3152936, lng: 149.1185178} - - { name: Schlich Street,stop_code: Wjz4tpE, lat: -35.3038329, lng: 149.1005569} - - { name: Weston Street,stop_code: Wjz4z67, lat: -35.3107704, lng: 149.1065979} - - { name: Musgrave Street,stop_code: Wjz4tUp, lat: -35.3044055, lng: 149.1056974} - - { name: Hopetoun Circuit,stop_code: Wjz4A2c, lat: -35.3082791, lng: 149.1066534} - - { name: Lienhop Street,stop_code: Wjz1HTi, lat: -35.4423392, lng: 149.1260397} - - { name: Hartung Crescent,stop_code: Wjz1zN3, lat: -35.4464057, lng: 149.1147796} - - { name: Lawrence Wackett Crescent,stop_code: Wjz1HEb, lat: -35.4471149, lng: 149.1245306} - - { name: Callister Crescent,stop_code: Wjz1xWZ, lat: -35.4565002, lng: 149.1174205} - - { name: Chippindall Circuit,stop_code: Wjz1Gjj, lat: -35.4504956, lng: 149.1205257} - - { name: Fidge Street,stop_code: Wjz1rQ6, lat: -35.4440887, lng: 149.1038388} - - { name: Weavers Crescent,stop_code: Wjz1xRC, lat: -35.4544199, lng: 149.1154761} - - { name: Kiddle Crescent,stop_code: Wjz1CdY, lat: -35.4270927, lng: 149.1090734} - - { name: Fairley Crescent,stop_code: Wjz1G89, lat: -35.4527651, lng: 149.1190457} - - { name: Fairley Crescent,stop_code: Wjz1F5W, lat: -35.4547272, lng: 149.1186974} - - { name: Muscio Place,stop_code: Wjz2EdX, lat: -35.416214, lng: 149.120065} - - { name: Clift Crescent,stop_code: Wjz1CRl, lat: -35.4269745, lng: 149.1151677} - - { name: Southern Close,stop_code: Wjz1K49, lat: -35.428009, lng: 149.1176708} - - { name: Clift Crescent,stop_code: Wjz1J4T, lat: -35.4330044, lng: 149.1185777} - - { name: Prichard Circuit,stop_code: Wjz1K89, lat: -35.4308171, lng: 149.1191218} - - { name: Twamley Crescent,stop_code: Wjz1JD7, lat: -35.4309354, lng: 149.1230759} - - { name: Monaro Highway,stop_code: Wjz1JTP, lat: -35.4312901, lng: 149.126776} - - { name: Deamer Crescent,stop_code: Wjz1S5I, lat: -35.4271223, lng: 149.1292791} - - { name: Monaro Highway,stop_code: Wjz1SfM, lat: -35.4260286, lng: 149.1309478} - - { name: Henry Melville Crescent,stop_code: Wjz1TLL, lat: -35.4199685, lng: 149.1361715} - - { name: Muntz Street,stop_code: Wjz1Lxu, lat: -35.4241367, lng: 149.1234749} - - { name: Mofflin Street,stop_code: Wjz1Liw, lat: -35.4239889, lng: 149.1208993} - - { name: Tuck Place,stop_code: Wjz1DLm, lat: -35.4200572, lng: 149.1136804} - - { name: Proctor Street,stop_code: Wjz2M5R, lat: -35.4160071, lng: 149.129533} - - { name: Hynes Place,stop_code: Wjz2wY-, lat: -35.4166279, lng: 149.1173443} - - { name: Sweet Place,stop_code: Wjz2EL2, lat: -35.4149132, lng: 149.1244544} - - { name: Schoales Place,stop_code: WjrXZiM, lat: -35.3470777, lng: 149.0553331} - - { name: Logue Place,stop_code: WjrXRW0, lat: -35.3471147, lng: 149.0502999} - - { name: Finlayson Place,stop_code: Wjz2NPZ, lat: -35.4118681, lng: 149.1378765} - - { name: Namatjira Drive,stop_code: WjrXZz3, lat: -35.3461161, lng: 149.0570563} - - { name: Wark Street,stop_code: Wjz3nLq, lat: -35.3325054, lng: 149.0919265} - - { name: McCulloch Street,stop_code: Wjz49Y5, lat: -35.3233291, lng: 149.0831296} - - { name: Novar Street,stop_code: Wjz4shf, lat: -35.3086912, lng: 149.0984092} - - { name: Novar Street,stop_code: Wjz4rk2, lat: -35.3126013, lng: 149.0982349} - - { name: Denison Street,stop_code: Wjz4hPC, lat: -35.323921, lng: 149.0935136} - - { name: Jensen Street,stop_code: Wjz4gou, lat: -35.3314972, lng: 149.0892541} - - { name: Denison Street,stop_code: Wjz4hMe, lat: -35.3259558, lng: 149.0929241} - - { name: Yarra Glen,stop_code: Wjz4gt5, lat: -35.3281248, lng: 149.0887511} - - { name: Carruthers Street,stop_code: Wjz49Wd, lat: -35.324698, lng: 149.0833563} - - { name: Shiels Place,stop_code: Wjz4arc, lat: -35.3185933, lng: 149.0779149} - - { name: Heysen Street,stop_code: WjrYUG8, lat: -35.3306155, lng: 149.058622} - - { name: Dunstan Street,stop_code: Wjz4aH6, lat: -35.3184453, lng: 149.0804542} - - { name: Mair Place,stop_code: Wjz48dZ, lat: -35.3281016, lng: 149.0761465} - - { name: Jennings Street,stop_code: Wjz499S, lat: -35.3252899, lng: 149.0759651} - - { name: O'Loghlen Street,stop_code: Wjr-IMR, lat: -35.2216889, lng: 149.0389433} - - { name: Carruthers Street,stop_code: Wjz48qI, lat: -35.3302472, lng: 149.0785498} - - { name: Heysen Street,stop_code: WjrYUj0, lat: -35.3299526, lng: 149.0543559} - - { name: Heysen Street,stop_code: Wjz37Lm, lat: -35.3321544, lng: 149.0697369} - - { name: Burnie Street,stop_code: Wjz3d3K, lat: -35.3459087, lng: 149.0743512} - - { name: Derwent Street,stop_code: Wjz3ee-, lat: -35.3383098, lng: 149.0761505} - - { name: Anne Place,stop_code: Wjz3fa8, lat: -35.3360845, lng: 149.0750477} - - { name: McInnes Street,stop_code: WjrX-Lw, lat: -35.3381915, lng: 149.0592024} - - { name: Lycett Street,stop_code: WjrX_xY, lat: -35.3364869, lng: 149.0583028} - - { name: Meldrum Street,stop_code: WjrX_iU, lat: -35.3361318, lng: 149.0556038} - - { name: Namatjira Drive,stop_code: WjrX-m2, lat: -35.3386886, lng: 149.0543559} - - { name: Mather Street,stop_code: WjrX-sE, lat: -35.3402511, lng: 149.0565615} - - { name: Buvelot Street,stop_code: Wjz354b, lat: -35.345459, lng: 149.062772} - - { name: Gask Place,stop_code: Wjz1et6, lat: -35.4269117, lng: 149.0777759} - - { name: Drumston Street,stop_code: Wjz1nxQ, lat: -35.4243695, lng: 149.0911255} - - { name: Athllon Drive,stop_code: Wjz1f8Y, lat: -35.4250198, lng: 149.076216} - - { name: Anketell Street,stop_code: Wjz1f2H, lat: -35.4237487, lng: 149.0744748} - - { name: Lake Tuggeranong cycle track,stop_code: Wjz1f7q, lat: -35.4203787, lng: 149.0740032} - - { name: Forlonge Street,stop_code: Wjz2bHS, lat: -35.400824, lng: 149.0814035} - - { name: Derham Court,stop_code: Wjz2aLs, lat: -35.4037395, lng: 149.081019} - - { name: Mortimer Lewis Drive,stop_code: Wjz2a26, lat: -35.4069683, lng: 149.0736259} - - { name: Nunan Crescent,stop_code: Wjz29Ya, lat: -35.4114741, lng: 149.0833189} - - { name: William Webb Drive,stop_code: Wjz6e8G, lat: -35.2110071, lng: 149.0758577} - - { name: Evelyn Owen Crescent,stop_code: Wjr_w0L, lat: -35.1995769, lng: 149.0194714} - - { name: Cusack Place,stop_code: Wjr_Ow3, lat: -35.1889085, lng: 149.0461463} - - { name: Binns Street,stop_code: Wjr_GGq, lat: -35.1875953, lng: 149.0370811} - - { name: Clubbe Crescent,stop_code: Wjr-uUb, lat: -35.2108896, lng: 149.0174054} - - { name: Southern Cross Drive,stop_code: Wjr-s5D, lat: -35.2180783, lng: 149.0083939} - - { name: Higgins Place,stop_code: Wjr-yOB, lat: -35.2313222, lng: 149.0276235} - - { name: Southern Cross Drive,stop_code: Wjr-Hoi, lat: -35.2274077, lng: 149.0341216} - - { name: Wollongong Street,stop_code: WjzcgD0, lat: -35.3271927, lng: 149.1779495} - - { name: Taubman Street,stop_code: Wjzbfpl, lat: -35.3363832, lng: 149.1658515} - - { name: Wiluna Street,stop_code: Wjzc8l0, lat: -35.3285713, lng: 149.1642018} - - { name: Whyalla Street,stop_code: Wjzbnmb, lat: -35.3331064, lng: 149.1753196} - - { name: Allen Street,stop_code: Wjz3_3L, lat: -35.3347817, lng: 149.1404124} - - { name: Goyder Street,stop_code: Wjz3-aW, lat: -35.3414521, lng: 149.1420263} - - { name: Alfred Place,stop_code: Wjza_-f, lat: -35.3767042, lng: 149.237157} - - { name: Farrer Place,stop_code: WjzbXms, lat: -35.3550134, lng: 149.2306199} - - { name: Bazley Street,stop_code: Wjr_Vbj, lat: -35.1923583, lng: 149.0533723} - - { name: Tuggeranong Parkway,stop_code: Wjz33GY, lat: -35.3577485, lng: 149.0706526} - - { name: Kalgoorlie Crescent,stop_code: WjrXXFn, lat: -35.3581997, lng: 149.0587995} - - { name: Jarrahdale Street,stop_code: WjrXWQ8, lat: -35.3621767, lng: 149.0600261} - - { name: Kapunda Street,stop_code: WjrXW7A, lat: -35.3597972, lng: 149.0523061} - - { name: Nannine Place,stop_code: WjrXXq3, lat: -35.3578077, lng: 149.0557251} - - { name: Greenvale Street,stop_code: WjrXXd0, lat: -35.3559956, lng: 149.0529772} - - { name: Hindmarsh Drive,stop_code: Wjz35av, lat: -35.3464684, lng: 149.064395} - - { name: Bangalay Crescent,stop_code: WjrXIDX, lat: -35.348916, lng: 149.0363428} - - { name: Buvelot Street,stop_code: WjrX-FV, lat: -35.3422149, lng: 149.0596338} - - { name: Chevalier Street,stop_code: Wjz356k, lat: -35.3440169, lng: 149.0629513} - - { name: Larakia Street,stop_code: Wjz358l, lat: -35.3480588, lng: 149.0643043} - - { name: Tiwi Place,stop_code: Wjz348u, lat: -35.3534586, lng: 149.0644857} - - { name: Bidia Place,stop_code: Wjz337w, lat: -35.354642, lng: 149.0633068} - - { name: Dalabon Crescent,stop_code: WjrXXK9, lat: -35.355219, lng: 149.0585637} - - { name: Kalgoorlie Crescent,stop_code: WjrXXyQ, lat: -35.3576967, lng: 149.0580467} - - { name: Tristania Street,stop_code: WjrXRks, lat: -35.3453958, lng: 149.0438991} - - { name: Damala Street,stop_code: WjrXYL4, lat: -35.3488355, lng: 149.0584095} - - { name: Somerset Street,stop_code: WjrXLaD, lat: -35.3355436, lng: 149.0316183} - - { name: Frayne Place,stop_code: WjrXQZX, lat: -35.3502779, lng: 149.0514717} - - { name: Dixon Drive,stop_code: WjrXTgl, lat: -35.3370298, lng: 149.0436997} - - { name: Hyndes Crescent,stop_code: WjrXTqY, lat: -35.3357893, lng: 149.0460156} - - { name: Nelumbo Street,stop_code: WjrXQ65, lat: -35.349419, lng: 149.040696} - - { name: Hindmarsh Drive,stop_code: WjrXKoe, lat: -35.3424911, lng: 149.0339533} - - { name: Burrinjuck Crescent,stop_code: WjrXLR-, lat: -35.3335487, lng: 149.0390846} - - { name: Warragamba Avenue,stop_code: WjrYEpn, lat: -35.3306598, lng: 149.0341649} - - { name: Tantangara Street,stop_code: WjrXKBE, lat: -35.3395611, lng: 149.0360582} - - { name: Counsel Street,stop_code: WjrYMbF, lat: -35.3298385, lng: 149.0428712} - - { name: Hyndes Crescent,stop_code: WjrYMrj, lat: -35.3296313, lng: 149.0450622} - - { name: Mulley Street,stop_code: WjrYMHm, lat: -35.3294538, lng: 149.0477466} - - { name: Mulley Street,stop_code: WjrYMGB, lat: -35.3301626, lng: 149.0481758} - - { name: Dixon Drive,stop_code: WjrXTSe, lat: -35.3328347, lng: 149.0489873} - - { name: Calder Crescent,stop_code: WjrXTIp, lat: -35.3346742, lng: 149.0480789} - - { name: Woodger Place,stop_code: Wjr_V2c, lat: -35.192985, lng: 149.0517177} - - { name: Watt Place,stop_code: Wjz2ve3, lat: -35.3770117, lng: 149.0968721} - - { name: Pearce Avenue,stop_code: WjzcBHZ, lat: -35.3020154, lng: 149.2024041} - - { name: Duffy Place,stop_code: WjrXLgs, lat: -35.3371612, lng: 149.0328459} - - { name: Renmark Street,stop_code: WjrXKfG, lat: -35.338018, lng: 149.0318393} - - { name: Anstey Street,stop_code: Wjz3aaB, lat: -35.3631322, lng: 149.0756066} - - { name: Lhotsky Street,stop_code: Wjr-L1H, lat: -35.2046871, lng: 149.0304447} - - { name: McCay Place,stop_code: Wjz39PE, lat: -35.3683683, lng: 149.0827167} - - { name: Hodgson Crescent,stop_code: Wjz3h5c, lat: -35.3666525, lng: 149.0847118} - - { name: Collings Street,stop_code: Wjz3j2F, lat: -35.3580142, lng: 149.0853648} - - { name: Marr Street,stop_code: Wjz3it1, lat: -35.3614164, lng: 149.0886297} - - { name: Pialligo Avenue,stop_code: Wjzcrp_, lat: -35.3142011, lng: 149.1887666} - - { name: Brindabella Circuit,stop_code: WjzcrK3, lat: -35.3111478, lng: 149.190364} - - { name: Dakota Drive,stop_code: Wjzcuw1, lat: -35.2989793, lng: 149.188937} - - { name: Fairbairn Avenue,stop_code: WjzcJ0K, lat: -35.3040486, lng: 149.2062653} - - { name: Anthony Rolfe Avenue,stop_code: Wjzf3oM, lat: -35.1836894, lng: 149.1556666} - - { name: Binns Street,stop_code: Wjr_Gxf, lat: -35.1878657, lng: 149.0352296} - - { name: Lhotsky Street,stop_code: Wjr_Es4, lat: -35.1970405, lng: 149.0338265} - - { name: Rogers Street,stop_code: Wjr_FTN, lat: -35.1897508, lng: 149.038952} - - { name: Kerrigan Street,stop_code: Wjr_xLL, lat: -35.1892698, lng: 149.0264062} - - { name: Bandt Place,stop_code: Wjr_xnT, lat: -35.1892671, lng: 149.0223682} - - { name: Filshie Close,stop_code: Wjr_FXR, lat: -35.1922038, lng: 149.0402464} - - { name: Donnison Place,stop_code: Wjr_E1y, lat: -35.1992571, lng: 149.0303603} - - { name: Edlington Street,stop_code: Wjr_NDY, lat: -35.1895167, lng: 149.04724} - - { name: Nish Place,stop_code: Wjr_Vt9, lat: -35.191134, lng: 149.055871} - - { name: Shrivell Circuit,stop_code: Wjr_wm3, lat: -35.195762, lng: 149.0214528} - - { name: O'Reilly Street,stop_code: Wjr-thp, lat: -35.2158247, lng: 149.0109263} - - { name: Eddison Place,stop_code: Wjr_NFt, lat: -35.1935465, lng: 149.0479464} - - { name: Garrad Court,stop_code: Wjr_MjV, lat: -35.1979805, lng: 149.0445264} - - { name: Covington Crescent,stop_code: Wjr-Tf_, lat: -35.2002734, lng: 149.0432168} - - { name: Moyes Crescent,stop_code: Wjr-zOn, lat: -35.2256125, lng: 149.0272189} - - { name: Noakes Court,stop_code: Wjr-Lzm, lat: -35.2030997, lng: 149.0354829} - - { name: Hirschfeld Crescent,stop_code: Wjr-tbm, lat: -35.2140927, lng: 149.0093105} - - { name: Florey Drive,stop_code: Wjr-DNK, lat: -35.2044788, lng: 149.0277602} - - { name: Lhotsky Street,stop_code: Wjr-DQE, lat: -35.2029293, lng: 149.0277662} - - { name: Ginninderra Drive,stop_code: Wjr_oP1, lat: -35.1980445, lng: 149.0158736} - - { name: Krefft Street,stop_code: Wjr-Pk6, lat: -35.2243699, lng: 149.0432872} - - { name: Kerrigan Street,stop_code: Wjr_o_j, lat: -35.1950629, lng: 149.0175978} - - { name: Lance Hill Avenue,stop_code: Wjr_wjn, lat: -35.1975263, lng: 149.0216638} - - { name: Florey Drive,stop_code: Wjr-CS2, lat: -35.2068071, lng: 149.0268212} - - { name: Kerrigan Street,stop_code: Wjr_oJA, lat: -35.1964177, lng: 149.0152805} - - { name: Rossell Place,stop_code: Wjr-KJQ, lat: -35.2073355, lng: 149.037506} - - { name: O'Reilly Street,stop_code: Wjr-smi, lat: -35.2178617, lng: 149.0106876} - - { name: Archdall Street,stop_code: Wjr-vJY, lat: -35.2019113, lng: 149.0157184} - - { name: Cumpston Place,stop_code: Wjr-BL8, lat: -35.2118565, lng: 149.025622} - - { name: Nulsen Circuit,stop_code: Wjr-S6B, lat: -35.2066123, lng: 149.0412991} - - { name: Tulloch Place,stop_code: Wjr-RnT, lat: -35.2112095, lng: 149.0444601} - - { name: Grigson Place,stop_code: Wjr-s_F, lat: -35.2172009, lng: 149.0180976} - - { name: Hampton Gardens,stop_code: Wjr-rQJ, lat: -35.2244007, lng: 149.0167658} - - { name: Rentoul Place,stop_code: Wjr-Rs8, lat: -35.2139046, lng: 149.0449606} - - { name: Krefft Street,stop_code: Wjr-Q8c, lat: -35.2217975, lng: 149.042121} - - { name: Dalley Crescent,stop_code: Wjr-AHx, lat: -35.2199899, lng: 149.0262529} - - { name: Southern Cross Drive,stop_code: Wjr-z_L, lat: -35.222191, lng: 149.0291286} - - { name: Starke Street,stop_code: Wjr-sV3, lat: -35.2212162, lng: 149.0172455} - - { name: Drake Brockman Drive,stop_code: Wjr-qcc, lat: -35.230013, lng: 149.0092125} - - { name: Southern Cross Drive,stop_code: Wjr-st9, lat: -35.2186471, lng: 149.0119654} - - { name: Messenger Street,stop_code: Wjr-jRn, lat: -35.2235756, lng: 149.0053113} - - { name: Armstrong Crescent,stop_code: Wjr-syd, lat: -35.2203046, lng: 149.0133355} - - { name: Holt Place,stop_code: Wjr-rjD, lat: -35.2249706, lng: 149.0111289} - - { name: Drake Brockman Drive,stop_code: Wjr-qyr, lat: -35.2315106, lng: 149.0137011} - - { name: Ashburner Street,stop_code: Wjr-yrh, lat: -35.2309899, lng: 149.0230231} - - { name: Grout Place,stop_code: Wjr-jNB, lat: -35.2265208, lng: 149.0056756} - - { name: Starke Street,stop_code: Wjr-yni, lat: -35.2281496, lng: 149.0217011} - - { name: Hardwick Crescent,stop_code: Wjr-zom, lat: -35.2270626, lng: 149.0231771} - - { name: Davidson Street,stop_code: Wjr-ywh, lat: -35.2330631, lng: 149.0245222} - - { name: Kriewaldt Circuit,stop_code: Wjr-yJZ, lat: -35.2292857, lng: 149.0266955} - - { name: Kriewaldt Circuit,stop_code: Wjr-ySy, lat: -35.228821, lng: 149.0276438} - - { name: Starke Street,stop_code: Wjr-zWb, lat: -35.2259772, lng: 149.0283569} - - { name: Chave Street,stop_code: Wjr-zC9, lat: -35.2234474, lng: 149.0242983} - - { name: Dethridge Street,stop_code: Wjr-GeX, lat: -35.2287693, lng: 149.0321955} - - { name: Davidson Street,stop_code: Wjr-xLK, lat: -35.2332476, lng: 149.0263679} - - { name: Drake Brockman Drive,stop_code: Wjr-xxu, lat: -35.2373929, lng: 149.0246092} - - { name: Tanumbirini Street,stop_code: Wjr-Ekp, lat: -35.2412759, lng: 149.032879} - - { name: Crawford Street,stop_code: WjzbYue, lat: -35.3493054, lng: 149.2316145} - - { name: Antill Street,stop_code: WjzbYD0, lat: -35.3491814, lng: 149.232803} - - { name: Alinga Street,stop_code: Wjz5FSY, lat: -35.2780524, lng: 149.1269928} - - { name: Uriarra Road,stop_code: WjzbRdA, lat: -35.3446934, lng: 149.2184308} - - { name: Pound Street,stop_code: Wjzj5cC, lat: -35.3451754, lng: 149.2404108} - - { name: Uriarra Road,stop_code: WjzbRBx, lat: -35.3449879, lng: 149.2226535} - - { name: Alinga Street,stop_code: Wjz5Neo, lat: -35.27843, lng: 149.130345} - - { name: Redwood Avenue,stop_code: WjzaJ9a, lat: -35.391582, lng: 149.2069701} - - { name: Canberra Avenue,stop_code: WjzbPQW, lat: -35.3565184, lng: 149.2259167} - - { name: Kenneth Place,stop_code: WjzbVBj, lat: -35.3667378, lng: 149.233235} - - { name: Cooma Street,stop_code: WjzbVCw, lat: -35.3663608, lng: 149.2335824} - - { name: Gibbs Place,stop_code: Wjz9JIL, lat: -35.4330525, lng: 149.2131844} - - { name: Parkview Crescent,stop_code: WjzaK0g, lat: -35.3868815, lng: 149.2056751} - - { name: Dixon Place,stop_code: WjzaDIK, lat: -35.3781802, lng: 149.2021825} - - { name: Rutledge Street,stop_code: WjzbXBT, lat: -35.3553953, lng: 149.2338714} - - { name: Brindabella Circuit,stop_code: WjzcrrQ, lat: -35.3131274, lng: 149.188611} - - { name: Benjamin Way,stop_code: Wjz57tg, lat: -35.2461188, lng: 149.0669661} - - { name: Greene Place,stop_code: Wjz57T_, lat: -35.2441569, lng: 149.0719751} - - { name: Gatehouse Place,stop_code: Wjz5f2j, lat: -35.2479775, lng: 149.0739202} - - { name: Crisp Circuit,stop_code: Wjz688N, lat: -35.2439868, lng: 149.0759082} - - { name: Cobbett Place,stop_code: Wjz68g-, lat: -35.2436119, lng: 149.0775571} - - { name: Braybrooke Street,stop_code: Wjz5vjd, lat: -35.2470998, lng: 149.0983861} - - { name: Watkin Street,stop_code: Wjz5v68, lat: -35.2454993, lng: 149.0956677} - - { name: Dunlop Court,stop_code: Wjz6gQ0, lat: -35.2413491, lng: 149.0928379} - - { name: Eardley Street,stop_code: Wjz6gJc, lat: -35.2402968, lng: 149.0916132} - - { name: Leverrier Crescent,stop_code: Wjz6oEz, lat: -35.243821, lng: 149.1030282} - - { name: Krantzcke Circuit,stop_code: Wjz7pfP, lat: -35.189616, lng: 149.0978803} - - { name: Temperley Street,stop_code: Wjz7p2n, lat: -35.1926501, lng: 149.0958323} - - { name: Temperley Street,stop_code: Wjz7iV0, lat: -35.1885169, lng: 149.0941253} - - { name: Temperley Street,stop_code: Wjz7iG_, lat: -35.1872252, lng: 149.0926713} - - { name: Curran Drive,stop_code: Wjz7ilp, lat: -35.1856235, lng: 149.0877402} - - { name: Ayers Fowler Street,stop_code: Wjz7i7r, lat: -35.1841251, lng: 149.0850218} - - { name: McClelland Avenue,stop_code: Wjz7jsi, lat: -35.1807665, lng: 149.0890046} - - { name: Whiteside Court,stop_code: Wjz7qfu, lat: -35.1838151, lng: 149.0974127} - - { name: Oldershaw Court,stop_code: Wjz7qvq, lat: -35.1841768, lng: 149.1001944} - - { name: Ryder Place,stop_code: Wjz7qkM, lat: -35.1864502, lng: 149.0992461} - - { name: Lexcen Avenue,stop_code: Wjz7qwq, lat: -35.1890336, lng: 149.101522} - - { name: Anne Clark Avenue,stop_code: Wjz7rOj, lat: -35.1820066, lng: 149.104114} - - { name: Biddell Place,stop_code: Wjz7rMm, lat: -35.1831434, lng: 149.104114} - - { name: Lexcen Avenue,stop_code: Wjz7q-_, lat: -35.1844351, lng: 149.1063899} - - { name: Quist Place,stop_code: Wjz7yfG, lat: -35.1841768, lng: 149.108729} - - { name: Kelleway Avenue,stop_code: Wjz7r-a, lat: -35.1793714, lng: 149.1053784} - - { name: Wanganeen Avenue,stop_code: Wjz7Add, lat: -35.1743073, lng: 149.10816} - - { name: Bimbiang Crescent,stop_code: Wjz7tOr, lat: -35.1710517, lng: 149.1042404} - - { name: Bargang Crescent,stop_code: Wjz7txI, lat: -35.1716718, lng: 149.1018381} - - { name: Horse Park Drive,stop_code: Wjz7tug, lat: -35.1685711, lng: 149.0999415} - - { name: Horse Park Drive,stop_code: Wjz7tvK, lat: -35.1673308, lng: 149.1005105} - - { name: Warabin Crescent,stop_code: Wjz7tLG, lat: -35.1677443, lng: 149.1032921} - - { name: Wanganeen Avenue,stop_code: Wjz7Bg7, lat: -35.1720853, lng: 149.109298} - - { name: Bunburung Close,stop_code: Wjz7BqG, lat: -35.1711551, lng: 149.1115106} - - { name: Unaipon Avenue,stop_code: Wjz7BC3, lat: -35.1683127, lng: 149.1120164} - - { name: Gurubun Close,stop_code: Wjz7BJK, lat: -35.1687262, lng: 149.1142923} - - { name: Deumonga Court,stop_code: Wjz7BED, lat: -35.1720853, lng: 149.1141026} - - { name: Mirrabei Drive,stop_code: Wjz7BWN, lat: -35.1712067, lng: 149.1171372} - - { name: Ferguson Circuit,stop_code: Wjz7AGv, lat: -35.1762193, lng: 149.113913} - - { name: Taggerty Street,stop_code: Wjz7AEw, lat: -35.1781829, lng: 149.1141659} - - { name: Tipiloura Street,stop_code: Wjz7CqJ, lat: -35.1654186, lng: 149.1114474} - - { name: Windradyne Street,stop_code: Wjz7CA3, lat: -35.16423, lng: 149.1119532} - - { name: Mirrabei Drive,stop_code: Wjz7CKg, lat: -35.1630413, lng: 149.1137233} - - { name: Naas Close,stop_code: Wjz7IDY, lat: -35.1730154, lng: 149.1242809} - - { name: Paul Coe Crescent,stop_code: Wjz7Ikc, lat: -35.1750825, lng: 149.1204878} - - { name: Milari Street,stop_code: Wjz7HfF, lat: -35.178803, lng: 149.1197924} - - { name: Paul Coe Crescent,stop_code: Wjz7IoZ, lat: -35.1777695, lng: 149.1227637} - - { name: Shoalhaven Avenue,stop_code: Wjz7IuJ, lat: -35.1736356, lng: 149.1225108} - - { name: Tyenna Close,stop_code: Wjz7JP1, lat: -35.1705349, lng: 149.1257982} - - { name: Katherine Avenue,stop_code: Wjz7R6d, lat: -35.1681577, lng: 149.1286431} - - { name: Timboram Street,stop_code: Wjz7R5z, lat: -35.1690363, lng: 149.1291488} - - { name: Carstairs Circuit,stop_code: Wjz7RHe, lat: -35.1700698, lng: 149.135534} - - { name: Horse Park Drive,stop_code: Wjz7SN-, lat: -35.1660013, lng: 149.1378981} - - { name: Boreham Lane,stop_code: Wjz7PIc, lat: -35.1805599, lng: 149.135534} - - { name: Swain Street,stop_code: Wjz7Pjj, lat: -35.1813349, lng: 149.1316144} - - { name: Gundaroo Drive,stop_code: Wjz7yNW, lat: -35.1883262, lng: 149.1159763} - - { name: Hibberson Street,stop_code: Wjz7OBc, lat: -35.1853732, lng: 149.1341431} - - { name: Sarre Street,stop_code: Wjz7PNV, lat: -35.1828992, lng: 149.1380246} - - { name: Gundaroo Drive,stop_code: Wjz7X3O, lat: -35.1814007, lng: 149.1404901} - - { name: Tesselaar Street,stop_code: Wjz7Xiv, lat: -35.1817108, lng: 149.1427028} - - { name: Sarson Street,stop_code: Wjzf31y, lat: -35.1828475, lng: 149.151111} - - { name: Kalianna Street,stop_code: Wjzf2hJ, lat: -35.1880144, lng: 149.154019} - - { name: Nimbera Street,stop_code: Wjzf1X3, lat: -35.1923543, lng: 149.1600249} - - { name: Mapleton Avenue,stop_code: Wjzf91m, lat: -35.1934909, lng: 149.1618582} - - { name: Elabana Street,stop_code: Wjzf0EJ, lat: -35.1997419, lng: 149.1581283} - - { name: Cudgewa Lane,stop_code: Wjze7Cp, lat: -35.2014466, lng: 149.1565478} - - { name: Oodgeroo Avenue,stop_code: Wjz6_7M, lat: -35.2008784, lng: 149.1404901} - - { name: Hoskins Street,stop_code: Wjz6TZN, lat: -35.2021182, lng: 149.1392257} - - { name: The Valley Avenue,stop_code: Wjz7GPB, lat: -35.1867085, lng: 149.1264936} - - { name: The Valley Avenue,stop_code: Wjz7Gxm, lat: -35.188002, lng: 149.1234035} - - { name: Kosciuszko Avenue,stop_code: Wjz7F5C, lat: -35.1906966, lng: 149.118141} - - { name: Burrowa Street,stop_code: Wjz7xJz, lat: -35.191011, lng: 149.1141277} - - { name: Kosciuszko Avenue,stop_code: Wjz7wZg, lat: -35.1967555, lng: 149.1165529} - - { name: Kosciuszko Avenue,stop_code: Wjz7EjH, lat: -35.1978404, lng: 149.1211679} - - { name: Kosciuszko Avenue,stop_code: Wjz7Ezf, lat: -35.1975304, lng: 149.1231277} - - { name: Everard Street,stop_code: Wjz7FNw, lat: -35.193955, lng: 149.126474} - - { name: Vicars Street,stop_code: Wjz6-16, lat: -35.20994, lng: 149.1394383} - - { name: McEacharn Place,stop_code: Wjz6Zb2, lat: -35.214395, lng: 149.1408607} - - { name: Brookes Street,stop_code: Wjz6Z8D, lat: -35.216009, lng: 149.1414929} - - { name: Grimwade Street,stop_code: Wjz6QPM, lat: -35.2200763, lng: 149.1377788} - - { name: Brookes Street,stop_code: Wjz6Yc1, lat: -35.2193016, lng: 149.1407817} - - { name: Darling Street,stop_code: Wjz6YiM, lat: -35.2207864, lng: 149.1433105} - - { name: Flemington Road,stop_code: Wjz6XiO, lat: -35.226071, lng: 149.143256} - - { name: Well Station Road,stop_code: Wjze2eG, lat: -35.2288072, lng: 149.1527323} - - { name: Well Station Road,stop_code: Wjze3gN, lat: -35.2275265, lng: 149.154199} - - { name: Federal Highway,stop_code: Wjze3Vq, lat: -35.2267416, lng: 149.1606727} - - { name: Federal Highway,stop_code: Wjzebjj, lat: -35.2253369, lng: 149.1645164} - - { name: Antill Street,stop_code: Wjze8v0, lat: -35.2393099, lng: 149.1654981} - - { name: Fison Street,stop_code: Wjze8bf, lat: -35.2414165, lng: 149.1630705} - - { name: Dobbie Place,stop_code: Wjze0Pi, lat: -35.2418709, lng: 149.1591256} - - { name: Knox Street,stop_code: Wjze0vR, lat: -35.2388968, lng: 149.1555853} - - { name: Dickinson Street,stop_code: Wjze1c2, lat: -35.2356747, lng: 149.1518427} - - { name: Harvey Street,stop_code: Wjze1gi, lat: -35.2384424, lng: 149.1535117} - - { name: Bradfield Street,stop_code: Wjz6UYK, lat: -35.2407969, lng: 149.1499714} - - { name: Atherton Street,stop_code: Wjz6Upu, lat: -35.2429035, lng: 149.1442058} - - { name: Melba Street,stop_code: Wjz6Ugw, lat: -35.2441014, lng: 149.142992} - - { name: Melba Street,stop_code: Wjz5_ie, lat: -35.2476948, lng: 149.1423851} - - { name: Antill Street,stop_code: Wjz5_y0, lat: -35.2482318, lng: 149.1449139} - - { name: Antill Street,stop_code: Wjzd73N, lat: -35.2474057, lng: 149.1515393} - - { name: Antill Street,stop_code: Wjzd7sL, lat: -35.2462079, lng: 149.1554841} - - { name: Madigan Street,stop_code: Wjzd7_6, lat: -35.2443079, lng: 149.1601371} - - { name: Madigan Street,stop_code: Wjzdfaz, lat: -35.2479426, lng: 149.1635256} - - { name: Madigan Street,stop_code: Wjzd6XP, lat: -35.2527713, lng: 149.1610527} - - { name: Phillip Avenue,stop_code: Wjzd6Pn, lat: -35.2524079, lng: 149.1590701} - - { name: Salomons Place,stop_code: Wjzd6lW, lat: -35.2515158, lng: 149.1544172} - - { name: Agnew Street,stop_code: Wjzd6iW, lat: -35.2535643, lng: 149.1544576} - - { name: Bourke Street,stop_code: Wjz4Pt5, lat: -35.3116531, lng: 149.1326324} - - { name: Nyrang Street,stop_code: Wjzc1qE, lat: -35.3251161, lng: 149.1555115} - - { name: Bunda Street,stop_code: Wjz5NeC, lat: -35.2778798, lng: 149.1305995} - - { name: Justinian Street,stop_code: Wjz3mWn, lat: -35.3409621, lng: 149.0945298} - - { name: Wisdom Street,stop_code: Wjz3mQ4, lat: -35.3398419, lng: 149.0928819} - - { name: Robson Street,stop_code: Wjz3C9Q, lat: -35.3419855, lng: 149.108934} - - { name: Ingamells Street,stop_code: Wjz3uJV, lat: -35.339486, lng: 149.1035524} - - { name: Robson Street,stop_code: Wjz3C9J, lat: -35.3418945, lng: 149.1087966} - - { name: Wisdom Street,stop_code: Wjz3n-4, lat: -35.3330183, lng: 149.0941258} - - { name: Kent Street,stop_code: Wjz4qia, lat: -35.3194535, lng: 149.0984183} - - { name: Kent Street,stop_code: Wjz4gXk, lat: -35.3296011, lng: 149.0945736} - - { name: McCaughey Street,stop_code: Wjz5Guy, lat: -35.2727878, lng: 149.1223747} - - { name: McCaughey Street,stop_code: Wjz5Iw8, lat: -35.2660466, lng: 149.1231132} - - { name: Macpherson Street,stop_code: Wjz5Imu, lat: -35.2614148, lng: 149.1208459} - - { name: Macarthur Avenue,stop_code: Wjz5Jpu, lat: -35.2594072, lng: 149.1221624} - - { name: Karri Street,stop_code: Wjz5JuJ, lat: -35.2560391, lng: 149.1225279} - - { name: Jarrah Street,stop_code: Wjz5KgT, lat: -35.2544701, lng: 149.1213129} - - { name: Fawkner Street,stop_code: Wjz5OIf, lat: -35.2737328, lng: 149.1354944} - - { name: Ainslie Avenue,stop_code: Wjz5V64, lat: -35.2780918, lng: 149.1394963} - - { name: Ainslie Avenue,stop_code: Wjz5NRJ, lat: -35.2787111, lng: 149.1375365} - - { name: Gooreen Street,stop_code: Wjz5Vls, lat: -35.2787911, lng: 149.1427895} - - { name: Limestone Avenue,stop_code: Wjz5VAq, lat: -35.2796604, lng: 149.14553} - - { name: Fairbairn Avenue,stop_code: Wjz5VUU, lat: -35.2825429, lng: 149.15037} - - { name: Fairbairn Avenue,stop_code: Wjzd8br, lat: -35.2857037, lng: 149.16333} - - { name: Glossop Crescent,stop_code: Wjzd0yM, lat: -35.2866868, lng: 149.1570161} - - { name: Savige Street,stop_code: Wjzd02s, lat: -35.286331, lng: 149.1509776} - - { name: Chowne Street,stop_code: Wjz5UHK, lat: -35.2854924, lng: 149.1472635} - - { name: Euree Street,stop_code: Wjz5Vg4, lat: -35.2821666, lng: 149.1422877} - - { name: White Crescent,stop_code: Wjzd0EU, lat: -35.2880133, lng: 149.158501} - - { name: Chauvel Street,stop_code: Wjzc7si, lat: -35.2905765, lng: 149.1549056} - - { name: Bungey Street,stop_code: Wjzc7bs, lat: -35.2911202, lng: 149.1523397} - - { name: Constitution Avenue,stop_code: Wjz4_wS, lat: -35.2930129, lng: 149.145973} - - { name: Wendouree Drive,stop_code: Wjz4_jm, lat: -35.2909901, lng: 149.1425844} - - { name: Parkes Way,stop_code: Wjz5MEL, lat: -35.2874399, lng: 149.1362625} - - { name: General Bridges Drive,stop_code: Wjzce4H, lat: -35.2960675, lng: 149.1623594} - - { name: Vowels Road,stop_code: WjzceFT, lat: -35.2977187, lng: 149.1693894} - - { name: Vowels Road,stop_code: WjzcdDs, lat: -35.299411, lng: 149.1675181} - - { name: Morshead Drive,stop_code: Wjzcdi7, lat: -35.3025893, lng: 149.1642813} - - { name: Morshead Drive,stop_code: Wjzcd8D, lat: -35.3039101, lng: 149.1635732} - - { name: Menindee Drive,stop_code: Wjzc59p, lat: -35.3037863, lng: 149.1523455} - - { name: Menindee Drive,stop_code: Wjzc45R, lat: -35.3061389, lng: 149.1514351} - - { name: Canberra Avenue,stop_code: Wjz4VKr, lat: -35.3221513, lng: 149.1468833} - - { name: Canberra Avenue,stop_code: Wjz4VRQ, lat: -35.3226878, lng: 149.148704} - - { name: Wickham Crescent,stop_code: Wjz4FEJ, lat: -35.3260887, lng: 149.125286} - - { name: Vancouver Street,stop_code: Wjz4ECF, lat: -35.3278218, lng: 149.1238193} - - { name: Friendship Street,stop_code: Wjz3LP9, lat: -35.3353724, lng: 149.1259941} - - { name: Quiros Street,stop_code: Wjz3LN9, lat: -35.3367339, lng: 149.1259435} - - { name: Bremer Street,stop_code: Wjz4MAz, lat: -35.3290192, lng: 149.1346333} - - { name: Favenc Circle,stop_code: Wjz4Ue5, lat: -35.327397, lng: 149.140921} - - { name: Stuart Street,stop_code: Wjz4Ujk, lat: -35.3295839, lng: 149.1425394} - - { name: Captain Cook Crescent,stop_code: Wjz3_Ji, lat: -35.3339111, lng: 149.146681} - - { name: McKinlay Place,stop_code: Wjz4UwD, lat: -35.3313913, lng: 149.1456952} - - { name: McKinlay Street,stop_code: Wjz4VEF, lat: -35.3264205, lng: 149.1472235} - - { name: Leeton Street,stop_code: Wjzc1n0, lat: -35.3216636, lng: 149.1532292} - - { name: Boolimba Crescent,stop_code: Wjzc090, lat: -35.3312849, lng: 149.15186} - - { name: Iluka Street,stop_code: Wjzb7nW, lat: -35.3324815, lng: 149.1544899} - - { name: Mugga Way,stop_code: Wjz3Kxb, lat: -35.342056, lng: 149.1231366} - - { name: Mugga Way,stop_code: Wjz3JDp, lat: -35.3435515, lng: 149.1235159} - - { name: Mugga Way,stop_code: Wjz3JJs, lat: -35.344686, lng: 149.1248435} - - { name: Beagle Street,stop_code: Wjz3Rdo, lat: -35.3450469, lng: 149.1304068} - - { name: Monaro Crescent,stop_code: Wjz3ShE, lat: -35.3422498, lng: 149.1321257} - - { name: Astrolabe Street,stop_code: Wjz3T8Z, lat: -35.337043, lng: 149.1311337} - - { name: Bell Street,stop_code: Wjz4MpW, lat: -35.3311406, lng: 149.1338209} - - { name: Goyder Street,stop_code: Wjz3-Jb, lat: -35.3392754, lng: 149.1466095} - - { name: Narupai Street,stop_code: Wjzb6cp, lat: -35.3401203, lng: 149.1523581} - - { name: Kyeema Street,stop_code: Wjzb7wf, lat: -35.3368722, lng: 149.1561338} - - { name: Matina Street,stop_code: Wjzb7HN, lat: -35.335349, lng: 149.1583716} - - { name: Kootara Crescent,stop_code: Wjzb7S4, lat: -35.3330282, lng: 149.1586877} - - { name: Goyder Street,stop_code: Wjz3SUA, lat: -35.3426508, lng: 149.1388551} - - { name: Narrabundah Lane,stop_code: Wjzb4vx, lat: -35.3490259, lng: 149.1553622} - - { name: Dalby Street,stop_code: Wjzc1tq, lat: -35.3228774, lng: 149.1550358} - - { name: Canberra Avenue,stop_code: Wjzbfnr, lat: -35.332383, lng: 149.1647873} - - { name: Newcastle Street,stop_code: Wjzc9WV, lat: -35.3250576, lng: 149.1722805} - - { name: Albany Street,stop_code: WjzchQP, lat: -35.3235189, lng: 149.1817987} - - { name: Townsville Street,stop_code: Wjzcod5, lat: -35.3281204, lng: 149.1848684} - - { name: Townsville Street,stop_code: Wjzcoab, lat: -35.3303968, lng: 149.1849583} - - { name: Townsville Street,stop_code: WjzcgX_, lat: -35.3293219, lng: 149.1833416} - - { name: Jindalee Crescent,stop_code: Wjz3r_u, lat: -35.3540946, lng: 149.1057023} - - { name: Arrellah Place,stop_code: Wjz3rQi, lat: -35.3565695, lng: 149.104185} - - { name: Coreen Place,stop_code: Wjz3z0c, lat: -35.3591474, lng: 149.106777} - - { name: Bromby Street,stop_code: Wjz3y4z, lat: -35.3619315, lng: 149.1072828} - - { name: Yamba Drive,stop_code: Wjz3pZQ, lat: -35.366623, lng: 149.1062713} - - { name: Beasley Street,stop_code: Wjz3x3A, lat: -35.3680664, lng: 149.1072196} - - { name: Bee Place,stop_code: Wjz3xwa, lat: -35.3702316, lng: 149.1122771} - - { name: Yamba Drive,stop_code: Wjz3wrK, lat: -35.3733761, lng: 149.1115817} - - { name: Dookie Street,stop_code: Wjz3woC, lat: -35.3754381, lng: 149.1112656} - - { name: Shepherdson Place,stop_code: Wjz2DPD, lat: -35.378737, lng: 149.1155013} - - { name: Pudney Street,stop_code: Wjz2DEs, lat: -35.3811081, lng: 149.1139208} - - { name: Woodgate Street,stop_code: Wjz2C5I, lat: -35.3831852, lng: 149.1074202} - - { name: Muresk Street,stop_code: Wjz2uSZ, lat: -35.3823742, lng: 149.1050643} - - { name: Longerenong Street,stop_code: Wjz2vL4, lat: -35.3762782, lng: 149.1023627} - - { name: Pridham Street,stop_code: Wjz3oih, lat: -35.3744422, lng: 149.0986886} - - { name: Lambrigg Street,stop_code: Wjz3oeM, lat: -35.3718451, lng: 149.0980006} - - { name: Beasley Street,stop_code: Wjz3hXO, lat: -35.3681696, lng: 149.0952079} - - { name: Wilkins Street,stop_code: Wjz3peD, lat: -35.3657466, lng: 149.0976102} - - { name: Prior Place,stop_code: Wjz3oge, lat: -35.3754535, lng: 149.0983799} - - { name: Athllon Drive,stop_code: Wjz2nLE, lat: -35.3766237, lng: 149.0922366} - - { name: Brookman Street,stop_code: Wjz2nug, lat: -35.3773453, lng: 149.0890124} - - { name: Batchelor Street,stop_code: Wjz3gcu, lat: -35.3726637, lng: 149.0864364} - - { name: Gouger Street,stop_code: Wjz3gB5, lat: -35.3720623, lng: 149.0900243} - - { name: Garratt Street,stop_code: Wjz2k5E, lat: -35.3945084, lng: 149.0853457} - - { name: Sternberg Crescent,stop_code: Wjz2cKo, lat: -35.3937869, lng: 149.0809204} - - { name: Fincham Crescent,stop_code: Wjz2crQ, lat: -35.3954875, lng: 149.0787077} - - { name: Byrne Street,stop_code: Wjz2kbO, lat: -35.3956421, lng: 149.0869894} - - { name: Athllon Drive,stop_code: Wjz2lDC, lat: -35.3870716, lng: 149.090679} - - { name: Sulwood Drive,stop_code: Wjz2u2j, lat: -35.3853192, lng: 149.095863} - - { name: Sulwood Drive,stop_code: Wjz2ugd, lat: -35.3865047, lng: 149.0985182} - - { name: Sulwood Drive,stop_code: Wjz2tyn, lat: -35.3904732, lng: 149.1013631} - - { name: Sulwood Drive,stop_code: Wjz2sLr, lat: -35.3928439, lng: 149.1028803} - - { name: Lansell Circuit,stop_code: Wjz2qJ7, lat: -35.4048663, lng: 149.1024781} - - { name: Grattan Court,stop_code: Wjz2r9X, lat: -35.4024569, lng: 149.098142} - - { name: Wheeler Crescent,stop_code: Wjz2jFF, lat: -35.4026479, lng: 149.0922959} - - { name: Snowden Place,stop_code: Wjz2isR, lat: -35.4057431, lng: 149.0896883} - - { name: Sturdee Crescent,stop_code: Wjz2iVd, lat: -35.4077519, lng: 149.0942596} - - { name: Crocker Place,stop_code: Wjz2q9z, lat: -35.4079064, lng: 149.0976735} - - { name: Bugden Avenue,stop_code: Wjz2F6d, lat: -35.4098598, lng: 149.1177053} - - { name: Bugden Avenue,stop_code: Wjz2xyM, lat: -35.4130074, lng: 149.113099} - - { name: Woods Place,stop_code: Wjz2pVO, lat: -35.4135227, lng: 149.1062081} - - { name: Stacy Street,stop_code: Wjz2oQE, lat: -35.4171292, lng: 149.1046908} - - { name: Gilday Place,stop_code: Wjz2Gff, lat: -35.403475, lng: 149.1191048} - - { name: Demaine Crescent,stop_code: Wjz2Gu5, lat: -35.404351, lng: 149.1216336} - - { name: Coyne Street,stop_code: Wjz2FDo, lat: -35.4095553, lng: 149.1235301} - - { name: Coyne Street,stop_code: Wjz2F_q, lat: -35.4093651, lng: 149.1276548} - - { name: Akhurst Grove,stop_code: Wjz1cz3, lat: -35.4395376, lng: 149.079087} - - { name: Andrea Place,stop_code: Wjz1d0X, lat: -35.4360866, lng: 149.0748513} - - { name: Andrea Place,stop_code: Wjz15Xb, lat: -35.4340778, lng: 149.0723858} - - { name: Harcus Close,stop_code: Wjz1klr, lat: -35.4381985, lng: 149.087748} - - { name: Woodcock Drive,stop_code: Wjz1kyn, lat: -35.4398982, lng: 149.0904032} - - { name: Stella Hume Street,stop_code: Wjz16Q9, lat: -35.4280509, lng: 149.0709317} - - { name: Ragless Circuit,stop_code: WjrWXL8, lat: -35.3985958, lng: 149.0586576} - - { name: Learmonth Drive,stop_code: WjrWXIP, lat: -35.4004264, lng: 149.0594265} - - { name: Meredith Circuit,stop_code: WjrWQRL, lat: -35.3938608, lng: 149.049706} - - { name: Bateman Street,stop_code: WjrWRWi, lat: -35.3908805, lng: 149.0506492} - - { name: Boddington Crescent,stop_code: WjrWSX9, lat: -35.3847561, lng: 149.0504459} - - { name: Eagle Circuit,stop_code: WjrWSBZ, lat: -35.383041, lng: 149.0472484} - - { name: Archibald Street,stop_code: Wjz5LLF, lat: -35.2446872, lng: 149.1252507} - - { name: Archibald Street,stop_code: Wjz5LDv, lat: -35.2442061, lng: 149.1235678} - - { name: Tharwa Drive,stop_code: Wjz1gBy, lat: -35.4601891, lng: 149.0907826} - - { name: Pocket Avenue,stop_code: Wjz0v3X, lat: -35.4670374, lng: 149.0967252} - - { name: Troughton Street,stop_code: Wjz0unz, lat: -35.4697663, lng: 149.0990011} - - { name: Paperbark Street,stop_code: Wjz0uQv, lat: -35.4714653, lng: 149.1043747} - - { name: Wollemi Place,stop_code: Wjz0C4B, lat: -35.4716198, lng: 149.1071563} - - { name: Kallista Place,stop_code: Wjz0Cpn, lat: -35.4735247, lng: 149.1110759} - - { name: Wollemi Place,stop_code: Wjz0Bv9, lat: -35.4753782, lng: 149.1107598} - - { name: Galbraith Close,stop_code: Wjz0t_T, lat: -35.4749148, lng: 149.1061448} - - { name: Bellchambers Crescent,stop_code: Wjz0tno, lat: -35.4754811, lng: 149.0988746} - - { name: Forsythe Street,stop_code: Wjz0u92, lat: -35.4739881, lng: 149.0969148} - - { name: Menzies Court,stop_code: Wjz0lYC, lat: -35.4770256, lng: 149.0948286} - - { name: Olive Pink Crescent,stop_code: Wjz0t9g, lat: -35.4795997, lng: 149.0972309} - - { name: Tharwa Drive,stop_code: Wjz0kHU, lat: -35.4837695, lng: 149.0925527} - - { name: Tharwa Drive,stop_code: Wjz0klX, lat: -35.4821222, lng: 149.0884434} - - { name: Tharwa Drive,stop_code: Wjz0lcW, lat: -35.477386, lng: 149.0870526} - - { name: McVilly Close,stop_code: Wjz0eVg, lat: -35.4740911, lng: 149.0835756} - - { name: Robert Lewis Court,stop_code: Wjz0m65, lat: -35.4702811, lng: 149.0845871} - - { name: Hickenbotham Street,stop_code: Wjz0n3A, lat: -35.4669344, lng: 149.0852193} - - { name: Oxenham Circuit,stop_code: Wjz1gnx, lat: -35.4589532, lng: 149.0880641} - - { name: Knoke Avenue,stop_code: Wjz1h9y, lat: -35.4574599, lng: 149.0866733} - - { name: McGilvray Close,stop_code: Wjz1h4G, lat: -35.4554516, lng: 149.0853457} - - { name: Woodcock Drive,stop_code: Wjz1heN, lat: -35.4541126, lng: 149.0869262} - - { name: Donohoe Place,stop_code: Wjz1ic5, lat: -35.4496838, lng: 149.0858515} - - { name: Dempsey Place,stop_code: Wjz1bTA, lat: -35.4422159, lng: 149.0824376} - - { name: Akhurst Grove,stop_code: Wjz1cI3, lat: -35.438868, lng: 149.0804778} - - { name: Mackennal Street,stop_code: Wjz5Lh-, lat: -35.248398, lng: 149.12138} - - { name: Dyson Street,stop_code: Wjz5Kve, lat: -35.2497723, lng: 149.1218849} - - { name: Miller Street,stop_code: Wjz5CW3, lat: -35.2534813, lng: 149.1160707} - - { name: Miller Street,stop_code: Wjz5BPB, lat: -35.2580866, lng: 149.1154899} - - { name: Fairfax Street,stop_code: Wjz5BaH, lat: -35.2589798, lng: 149.1087583} - - { name: Miller Street,stop_code: Wjz5ASf, lat: -35.2613846, lng: 149.1149009} - - { name: David Street,stop_code: Wjz5zJi, lat: -35.2679801, lng: 149.113807} - - { name: Nicholson Crescent,stop_code: Wjz5zOq, lat: -35.2700411, lng: 149.1153216} - - { name: Boldrewood Street,stop_code: Wjz5GeU, lat: -35.2729264, lng: 149.1200337} - - { name: Colville Street,stop_code: Wjz6EBY, lat: -35.2403577, lng: 149.1242409} - - { name: Northbourne Avenue,stop_code: Wjz6Myj, lat: -35.2424881, lng: 149.1344225} - - { name: Federal Highway,stop_code: Wjz6Vj2, lat: -35.2363715, lng: 149.1421638} - - { name: Claxton Crescent,stop_code: Wjz6Fze, lat: -35.2360279, lng: 149.123147} - - { name: Barsdell Place,stop_code: Wjz6cjg, lat: -35.2200412, lng: 149.0766172} - - { name: Bean Crescent,stop_code: Wjz6c8c, lat: -35.2217598, lng: 149.0751026} - - { name: Grover Crescent,stop_code: Wjz64Yc, lat: -35.2190101, lng: 149.0723258} - - { name: Bennetts Close,stop_code: Wjz6c7A, lat: -35.2169478, lng: 149.074177} - - { name: Pirani Place,stop_code: Wjz6eGq, lat: -35.2096321, lng: 149.0809063} - - { name: William Webb Drive,stop_code: Wjz6eoG, lat: -35.2110071, lng: 149.0784661} - - { name: Gleadow Street,stop_code: Wjz65_2, lat: -35.2116258, lng: 149.0722394} - - { name: William Webb Drive,stop_code: Wjz64CB, lat: -35.2176067, lng: 149.0687895} - - { name: Kerrigan Street,stop_code: Wjr_F9a, lat: -35.1938253, lng: 149.031231} - - { name: Tillyard Drive,stop_code: Wjr_NaX, lat: -35.1930428, lng: 149.043112} - - { name: Reuther Street,stop_code: Wjr_M6A, lat: -35.1956738, lng: 149.0413435} - - { name: Shakespeare Crescent,stop_code: Wjr_FV4, lat: -35.1935916, lng: 149.039268} - - { name: Lawrence Close,stop_code: Wjr-CnE, lat: -35.206318, lng: 149.0223041} - - { name: Pockley Close,stop_code: Wjr-D1B, lat: -35.2045158, lng: 149.0193788} - - { name: Osburn Drive,stop_code: Wjr-ux-, lat: -35.2099601, lng: 149.0143872} - - { name: Spofforth Street,stop_code: Wjr-kZV, lat: -35.2186221, lng: 149.0075381} - - { name: Fullagar Crescent,stop_code: Wjr-yDR, lat: -35.2278849, lng: 149.0252438} - - { name: Dethridge Street,stop_code: Wjr-G49, lat: -35.2302721, lng: 149.0298424} - - { name: Hodges Street,stop_code: Wjr-GcG, lat: -35.2301944, lng: 149.0319226} - - { name: Southern Cross Drive,stop_code: Wjr-Hi1, lat: -35.2261454, lng: 149.032398} - - { name: Albany Street,stop_code: WjzcgLt, lat: -35.3267279, lng: 149.1797667} - - { name: Collie Street,stop_code: Wjzcgzn, lat: -35.3293028, lng: 149.178368} - - { name: Faulding Street,stop_code: WjzbfzE, lat: -35.3354178, lng: 149.1678599} - - { name: Wormald Street,stop_code: Wjzbfr6, lat: -35.3349204, lng: 149.1655287} - - { name: Lithgow Street,stop_code: Wjzc8im, lat: -35.3300635, lng: 149.1644887} - - { name: Ipswich Street,stop_code: Wjzc8c1, lat: -35.3291272, lng: 149.1628031} - - { name: Whyalla Street,stop_code: Wjzbn5y, lat: -35.3338671, lng: 149.1730601} - - { name: Hamelin Crescent,stop_code: Wjz3TZj, lat: -35.3338162, lng: 149.1384399} - - { name: Sprent Street,stop_code: Wjz3_o2, lat: -35.3372978, lng: 149.1435685} - - { name: Goyder Street,stop_code: Wjz3-r-, lat: -35.3403989, lng: 149.1448954} - - { name: Jerrabomberra Avenue,stop_code: Wjzb5vw, lat: -35.3436462, lng: 149.155296} - - { name: Northbourne Avenue,stop_code: Wjz5N7c, lat: -35.2774279, lng: 149.1287001} - - { name: Crawford Street,stop_code: WjzbYnD, lat: -35.3485475, lng: 149.2307657} - - { name: Uriarra Road,stop_code: WjzbZ3m, lat: -35.3459335, lng: 149.227726} - - { name: Farrer Place,stop_code: WjzbXmQ, lat: -35.3550126, lng: 149.2311068} - - { name: Crawford Street,stop_code: WjzbYzg, lat: -35.3519226, lng: 149.2332104} - - { name: Yass Road,stop_code: Wjzj5BH, lat: -35.3447463, lng: 149.2446946} - - { name: Endurance Avenue,stop_code: Wjzj6z9, lat: -35.3407864, lng: 149.2440483} - - { name: Erin Street,stop_code: WjzbZqS, lat: -35.3465484, lng: 149.2325494} - - { name: Alinga Street,stop_code: Wjz5F-1, lat: -35.2783161, lng: 149.1271286} - - { name: Crawford Street,stop_code: WjzbZ77, lat: -35.3430401, lng: 149.2274615} - - { name: Alinga Street,stop_code: Wjz5N6V, lat: -35.2783725, lng: 149.1297843} - - { name: Uriarra Road,stop_code: WjzbRdl, lat: -35.3446304, lng: 149.2181472} - - { name: Uriarra Road,stop_code: WjzbJSj, lat: -35.3441148, lng: 149.2140644} - - { name: Uriarra Road,stop_code: WjzbZ3n, lat: -35.3458022, lng: 149.2277877} - - { name: Uriarra Road,stop_code: WjzbRBs, lat: -35.344722, lng: 149.2224303} - - { name: Alinga Street,stop_code: Wjz5N5_, lat: -35.2785242, lng: 149.1297348} - - { name: Alinga Street,stop_code: Wjz5Ndm, lat: -35.2785658, lng: 149.1301727} - - { name: Woodhill Link,stop_code: WjzaArS, lat: -35.3953167, lng: 149.1995002} - - { name: Nicholii Loop,stop_code: WjzaAXA, lat: -35.3954806, lng: 149.2047447} - - { name: Mariners Court,stop_code: WjzaAdv, lat: -35.3938794, lng: 149.1962366} - - { name: Canberra Avenue,stop_code: WjzbBu_, lat: -35.3437537, lng: 149.1997253} - - { name: Broughton Place,stop_code: WjzbPXf, lat: -35.3567667, lng: 149.2261434} - - { name: Tharwa Road,stop_code: WjzbPpi, lat: -35.3586252, lng: 149.2208441} - - { name: Hayes Street,stop_code: WjzbWDe, lat: -35.3596366, lng: 149.2330229} - - { name: Cooma Street,stop_code: WjzbXwk, lat: -35.3591416, lng: 149.2331706} - - { name: Cooma Street,stop_code: WjzbVxf, lat: -35.369131, lng: 149.233084} - - { name: Cooma Street,stop_code: WjzbVy2, lat: -35.3689098, lng: 149.232863} - - { name: Old Cooma Road,stop_code: Wjz9JdV, lat: -35.4328562, lng: 149.2080577} - - { name: Cooma Street,stop_code: WjzbXAb, lat: -35.3564366, lng: 149.2330826} - - { name: Kinlyside Avenue,stop_code: WjzbwuF, lat: -35.3717405, lng: 149.1994726} - - { name: Darmody Place,stop_code: WjzbwDR, lat: -35.37069, lng: 149.2008683} - - { name: Halloran Drive,stop_code: WjzbwMd, lat: -35.3755316, lng: 149.2028602} - - { name: Maloney Street,stop_code: WjzbG5c, lat: -35.3611934, lng: 149.2054955} - - { name: Kendall Avenue North,stop_code: WjzbJRl, lat: -35.3445935, lng: 149.2139248} - - { name: Canberra Avenue,stop_code: WjzbfPy, lat: -35.3352335, lng: 149.1703836} - - { name: Flinders Way,stop_code: Wjz4OqF, lat: -35.3195494, lng: 149.1335622} - - { name: Burbury Close,stop_code: Wjz4Pk_, lat: -35.3121631, lng: 149.1324213} - - { name: Mort Street,stop_code: Wjz5NeF, lat: -35.2783224, lng: 149.130726} - - { name: East Row,stop_code: Wjz5Ndz, lat: -35.2788601, lng: 149.130649} - - { name: East Row,stop_code: Wjz5NcA, lat: -35.2794346, lng: 149.1305879} - - { name: East Row,stop_code: Wjz5Nds, lat: -35.2787886, lng: 149.1304779} - - { name: Justinian Street,stop_code: Wjz3mPO, lat: -35.3407241, lng: 149.0937831} - - { name: Wisdom Street,stop_code: Wjz3mI_, lat: -35.3396179, lng: 149.0925471} - - { name: Birdwood Street,stop_code: Wjz3vrf, lat: -35.3348497, lng: 149.099817} - - { name: McNicoll Street,stop_code: Wjz3vqN, lat: -35.3360119, lng: 149.1006409} - - { name: Ingamells Street,stop_code: Wjz3C4O, lat: -35.3400601, lng: 149.1074834} - - { name: Ingamells Street,stop_code: Wjz3uQf, lat: -35.339661, lng: 149.1040329} - - { name: Ingamells Street,stop_code: Wjz3C4q, lat: -35.3400391, lng: 149.106977} - - { name: Dennis Street,stop_code: Wjz3B5o, lat: -35.344996, lng: 149.1070285} - - { name: Yamba Drive,stop_code: Wjz3lVM, lat: -35.3477625, lng: 149.0952366} - - { name: Yamba Drive,stop_code: Wjz3lVG, lat: -35.3476365, lng: 149.095065} - - { name: Kent Street,stop_code: Wjz3n-H, lat: -35.3331304, lng: 149.0950356} - - { name: Yamba Drive,stop_code: Wjz3mAg, lat: -35.3402021, lng: 149.0903851} - - { name: Kent Street,stop_code: Wjz4q8_, lat: -35.3203709, lng: 149.0981179} - - { name: Kent Street,stop_code: Wjz4p1K, lat: -35.325336, lng: 149.0963669} - - { name: Kent Street,stop_code: Wjz4p2R, lat: -35.3247128, lng: 149.0966244} - - { name: Kent Street,stop_code: Wjz4gYg, lat: -35.329258, lng: 149.0944878} - - { name: Barry Drive,stop_code: Wjz5G6U, lat: -35.2729086, lng: 149.1187429} - - { name: McCaughey Street,stop_code: Wjz5Hw8, lat: -35.2715996, lng: 149.1231371} - - { name: McCaughey Street,stop_code: Wjz5HDd, lat: -35.2662951, lng: 149.1231711} - - { name: Macpherson Street,stop_code: Wjz5Iqp, lat: -35.2646152, lng: 149.1221727} - - { name: Bluebell Street,stop_code: Wjz5IjX, lat: -35.2637604, lng: 149.1215219} - - { name: Macarthur Avenue,stop_code: Wjz5Jpp, lat: -35.2597672, lng: 149.1221194} - - { name: Hovea Street,stop_code: Wjz5Jyz, lat: -35.258945, lng: 149.123718} - - { name: Hovea Street,stop_code: Wjz5JzP, lat: -35.2582197, lng: 149.123961} - - { name: Scrivener Street,stop_code: Wjz5Juf, lat: -35.2558204, lng: 149.1217923} - - { name: Brigalow Street,stop_code: Wjz5KgQ, lat: -35.2547172, lng: 149.1212395} - - { name: Northbourne Avenue,stop_code: Wjz5N5k, lat: -35.2787905, lng: 149.1288627} - - { name: Northbourne Avenue,stop_code: Wjz5N4J, lat: -35.2793571, lng: 149.1293659} - - { name: Tillyard Drive,stop_code: Wjr-LNq, lat: -35.2048275, lng: 149.0383141} - - { name: College Street,stop_code: Wjz68W5, lat: -35.2423221, lng: 149.0831522} - - { name: College Street,stop_code: Wjz6gia, lat: -35.2425616, lng: 149.0874888} - - { name: Haydon Drive,stop_code: Wjz5maK, lat: -35.2532079, lng: 149.0867657} - - { name: Marcus Clarke Street,stop_code: Wjz5GMT, lat: -35.2764151, lng: 149.1267199} - - { name: Flynn Drive,stop_code: Wjz4KNu, lat: -35.2978611, lng: 149.1263289} - - { name: Beaconsfield Street,stop_code: WjzbnGh, lat: -35.3359862, lng: 149.1796321} - - { name: Flinders Way,stop_code: Wjz4Ox0, lat: -35.3203301, lng: 149.1339648} - - { name: Flinders Way,stop_code: Wjz4OpP, lat: -35.320064, lng: 149.1335699} - - { name: Captain Cook Crescent,stop_code: Wjz4NDP, lat: -35.3214366, lng: 149.1350462} - - { name: Dominion Circuit,stop_code: Wjz4Pa9, lat: -35.314076, lng: 149.1301281} - - { name: Summit Track,stop_code: Wjz5qbi, lat: -35.2748058, lng: 149.0972461} - - { name: Alpen Street,stop_code: Wjr-_Ua, lat: -35.2054509, lng: 149.0613315} - - { name: Keenan Street,stop_code: Wjz66kP, lat: -35.2081588, lng: 149.066382} - - { name: Copland Drive,stop_code: Wjz66lY, lat: -35.2073806, lng: 149.0665685} - - { name: Meagher Place,stop_code: Wjz664q, lat: -35.2082119, lng: 149.0631086} - - { name: Meagher Place,stop_code: Wjz664g, lat: -35.2083936, lng: 149.0629132} - - { name: Parkes Place,stop_code: Wjz4Rs-, lat: -35.3012441, lng: 149.1338254} - - { name: Alpen Street,stop_code: Wjr-_Uj, lat: -35.2054305, lng: 149.0615985} - - { name: Lennox Crossing,stop_code: Wjz4Lh5, lat: -35.2924038, lng: 149.1201999} - - { name: Russell Drive,stop_code: Wjzc54R, lat: -35.3013866, lng: 149.1515283} - - { name: Russell Drive,stop_code: Wjzc60A, lat: -35.2986953, lng: 149.151155} - - { name: Russell Drive,stop_code: Wjz4-WZ, lat: -35.2972194, lng: 149.1503113} - - { name: Catchpole Street,stop_code: Wjz56Hh, lat: -35.25291, lng: 149.0697814} - - { name: Russell Drive,stop_code: Wjz4-WL, lat: -35.2970826, lng: 149.149927} - - { name: Kings Avenue,stop_code: Wjz4RFJ, lat: -35.3034224, lng: 149.1361467} - - { name: Kings Avenue,stop_code: Wjz4RwH, lat: -35.3042846, lng: 149.1348585} - - { name: Bourke Street,stop_code: Wjz4PuC, lat: -35.3109115, lng: 149.1332413} - - { name: Sydney Avenue,stop_code: Wjz4P6x, lat: -35.3112617, lng: 149.1291119} - - { name: Waldock Street,stop_code: Wjz3bdj, lat: -35.3557447, lng: 149.0753424} - - { name: Russell Drive,stop_code: Wjz4-Rc, lat: -35.2952651, lng: 149.1479687} - - { name: Keenan Street,stop_code: Wjr--W0, lat: -35.2097244, lng: 149.0611869} - - { name: Keenan Street,stop_code: Wjr--W9, lat: -35.2096897, lng: 149.061394} - - { name: Chifley Place,stop_code: Wjz3cal, lat: -35.3521568, lng: 149.0752845} - - { name: Waldock Street,stop_code: Wjz3bdl, lat: -35.3556201, lng: 149.075221} - - { name: Wilsmore Crescent,stop_code: Wjz3b9v, lat: -35.3581498, lng: 149.0754026} - - { name: Brinsmead Street,stop_code: Wjz39RI, lat: -35.3666487, lng: 149.0827357} - - { name: McDonald Street,stop_code: Wjz3ceV, lat: -35.3497899, lng: 149.0761589} - - { name: Kingsford Smith Drive,stop_code: Wjr-RKi, lat: -35.2123821, lng: 149.0478391} - - { name: Conley Drive,stop_code: Wjr-RZx, lat: -35.213153, lng: 149.050965} - - { name: Grainger Circuit,stop_code: Wjr-RT-, lat: -35.2113153, lng: 149.0500244} - - { name: Horsley Crescent,stop_code: Wjr-Zk3, lat: -35.2136037, lng: 149.0543575} - - { name: Horsley Crescent,stop_code: Wjr-Zk5, lat: -35.2134943, lng: 149.0543506} - - { name: Verbrugghen Street,stop_code: Wjr-ZJc, lat: -35.2128875, lng: 149.0586429} - - { name: Copland Drive,stop_code: Wjr-ZRJ, lat: -35.2127453, lng: 149.0607491} - - { name: Clifford Crescent,stop_code: Wjz66fw, lat: -35.2063185, lng: 149.0646037} - - { name: Clifford Crescent,stop_code: Wjz66fx, lat: -35.2062629, lng: 149.0647145} - - { name: Crossley Close,stop_code: Wjr--Lw, lat: -35.2063011, lng: 149.059093} - - { name: Crossley Close,stop_code: Wjr--Ki, lat: -35.2068427, lng: 149.0588291} - - { name: Le Gallienne Street,stop_code: Wjr--md, lat: -35.2066211, lng: 149.0544526} - - { name: Henslowe Place,stop_code: Wjr--6k, lat: -35.2066759, lng: 149.0519744} - - { name: Pattinson Crescent,stop_code: Wjr-SS5, lat: -35.2065999, lng: 149.0489353} - - { name: Lathlain Street,stop_code: Wjz60d1, lat: -35.2406019, lng: 149.0638958} - - { name: Weedon Close,stop_code: Wjz60c5, lat: -35.2408972, lng: 149.0639885} - - { name: Lathlain Street,stop_code: Wjz605_, lat: -35.2400517, lng: 149.0637152} - - { name: Lathlain Street,stop_code: Wjz606I, lat: -35.2396656, lng: 149.0633992} - - { name: Daley Road,stop_code: Wjz5yXo, lat: -35.2749982, lng: 149.1166312} - - { name: Macarthur Avenue,stop_code: Wjz5Jaa, lat: -35.2590481, lng: 149.1191164} - - { name: Bimbimbie Street,stop_code: Wjz68Yy, lat: -35.2411603, lng: 149.0838439} - - { name: Carandini Street,stop_code: Wjr-_3A, lat: -35.2032823, lng: 149.0522538} - - { name: Kingsford Smith Drive,stop_code: Wjr-_Hp, lat: -35.2034703, lng: 149.0589653} - - { name: Alpen Street,stop_code: Wjr-_Og, lat: -35.2042571, lng: 149.0602273} - - { name: Colborne Place,stop_code: Wjz670_, lat: -35.205061, lng: 149.0637667} - - { name: Hancock Street,stop_code: Wjz67k1, lat: -35.2028461, lng: 149.0653269} - - { name: Hancock Street,stop_code: Wjz67kk, lat: -35.2025967, lng: 149.0657125} - - { name: Copland Drive,stop_code: Wjr-YdU, lat: -35.2186771, lng: 149.0542242} - - { name: Copland Drive,stop_code: Wjr-YcT, lat: -35.2187393, lng: 149.0539932} - - { name: John Cleland Crescent,stop_code: Wjr-Xno, lat: -35.2227935, lng: 149.0548844} - - { name: John Cleland Crescent,stop_code: Wjr-Xky, lat: -35.2247107, lng: 149.0549856} - - { name: Coulter Drive,stop_code: WjrZ_tn, lat: -35.2455787, lng: 149.0560808} - - { name: Coulter Drive,stop_code: WjrZ_so, lat: -35.2468109, lng: 149.0562979} - - { name: Wiseman Street,stop_code: Wjz56XB, lat: -35.2526099, lng: 149.0728793} - - { name: Fulton Street,stop_code: Wjz5711, lat: -35.2488233, lng: 149.0625779} - - { name: Melrose Drive,stop_code: Wjz3eRR, lat: -35.3390911, lng: 149.082759} - - { name: Furzer Street,stop_code: Wjz3m31, lat: -35.3408061, lng: 149.0844784} - - { name: Barton Highway,stop_code: Wjz79-a, lat: -35.1903384, lng: 149.0833628} - - { name: Akuna Street,stop_code: Wjz5Nht, lat: -35.281465, lng: 149.131837} - - { name: College Street,stop_code: Wjz6giR, lat: -35.2422899, lng: 149.0883846} - - { name: Wisdom Street,stop_code: Wjz3mQ5, lat: -35.339761, lng: 149.0927558} - - { name: Sharwood Crescent,stop_code: Wjr-ZXo, lat: -35.214551, lng: 149.0617978} - - { name: Deffell Street,stop_code: Wjz652H, lat: -35.2150139, lng: 149.0634241} - - { name: Callaghan Street,stop_code: Wjz65ik, lat: -35.2149321, lng: 149.0656677} - - { name: Alderman Street,stop_code: Wjz65rA, lat: -35.2142446, lng: 149.0673143} - - { name: Norton Street,stop_code: Wjz65Hy, lat: -35.2143691, lng: 149.0701627} - - { name: Norton Street,stop_code: Wjz65GS, lat: -35.2147682, lng: 149.0705542} - - { name: Stenhouse Close,stop_code: Wjz66oO, lat: -35.2109547, lng: 149.067737} - - { name: Pitcairn Street,stop_code: Wjz66Fg, lat: -35.2104421, lng: 149.0698018} - - { name: Clancy Street,stop_code: Wjz66XM, lat: -35.2090851, lng: 149.0732672} - - { name: Kissane Crescent,stop_code: Wjz6ec7, lat: -35.2077712, lng: 149.0749969} - - { name: Primmer Court,stop_code: WjrW_zy, lat: -35.3792073, lng: 149.0577944} - - { name: Marconi Crescent,stop_code: WjrW_Qk, lat: -35.3783254, lng: 149.0600973} - - { name: Marconi Crescent,stop_code: Wjz27d3, lat: -35.3777767, lng: 149.064033} - - { name: Sinclair Street,stop_code: Wjz27dd, lat: -35.3775909, lng: 149.0640777} - - { name: Marconi Crescent,stop_code: Wjz27k8, lat: -35.3787048, lng: 149.065524} - - { name: Lascelles Circuit,stop_code: Wjz26n5, lat: -35.3816653, lng: 149.0653041} - - { name: Summerland Circuit,stop_code: Wjz26tG, lat: -35.3833338, lng: 149.0674908} - - { name: Summerland Circuit,stop_code: Wjz26P8, lat: -35.3848854, lng: 149.0709314} - - { name: Summerland Circuit,stop_code: Wjz26Om, lat: -35.385045, lng: 149.0711386} - - { name: Mason Street,stop_code: Wjz26WN, lat: -35.3854988, lng: 149.073226} - - { name: Lee Steere Crescent,stop_code: Wjz2def, lat: -35.3876959, lng: 149.0750942} - - { name: Kingsmill Street,stop_code: Wjz2d34, lat: -35.3900029, lng: 149.0734943} - - { name: Summerland Circuit,stop_code: Wjz25Ox, lat: -35.3909341, lng: 149.0714764} - - { name: Summerland Circuit,stop_code: Wjz25NL, lat: -35.3911118, lng: 149.0716052} - - { name: O'Halloran Circuit,stop_code: Wjz24vP, lat: -35.3928088, lng: 149.0677265} - - { name: O'Halloran Circuit,stop_code: Wjz24lu, lat: -35.3939542, lng: 149.0657865} - - { name: O'Halloran Circuit,stop_code: Wjz24cK, lat: -35.3946419, lng: 149.0647484} - - { name: Pinkerton Circuit,stop_code: Wjz248n, lat: -35.3972727, lng: 149.064345} - - { name: Ragless Circuit,stop_code: Wjz2347, lat: -35.4000362, lng: 149.0625} - - { name: Learmonth Drive,stop_code: WjrWXON, lat: -35.4019182, lng: 149.060886} - - { name: Learmonth Drive,stop_code: WjrWXNL, lat: -35.4020721, lng: 149.0607315} - - { name: Learmonth Drive,stop_code: Wjz230G, lat: -35.4032475, lng: 149.0634951} - - { name: Driver Place,stop_code: Wjz66Cd, lat: -35.2065831, lng: 149.0682105} - - { name: Willis Street,stop_code: Wjz67xQ, lat: -35.2046532, lng: 149.0691406} - - { name: Kellway Street,stop_code: Wjz66KO, lat: -35.2068138, lng: 149.0704302} - - { name: Copland Drive,stop_code: Wjz67yW, lat: -35.2040813, lng: 149.0692143} - - { name: Edmunds Place,stop_code: Wjz67nz, lat: -35.2006201, lng: 149.0659965} - - { name: Crofts Crescent,stop_code: Wjz701y, lat: -35.1992909, lng: 149.0633518} - - { name: Standbridge Place,stop_code: Wjz701a, lat: -35.1992794, lng: 149.0628172} - - { name: Baddeley Crescent,stop_code: Wjr_UUU, lat: -35.2001327, lng: 149.0624944} - - { name: Goyder Street,stop_code: Wjzb705, lat: -35.3370433, lng: 149.1505109} - - { name: Kingsford Smith Drive,stop_code: Wjr_UPA, lat: -35.1977713, lng: 149.0605874} - - { name: Kingsford Smith Drive,stop_code: Wjr_UTL, lat: -35.1947749, lng: 149.060646} - - { name: Clarey Crescent,stop_code: Wjz707-, lat: -35.1947883, lng: 149.0637942} - - { name: Clarey Crescent,stop_code: Wjz707Z, lat: -35.1948745, lng: 149.0637273} - - { name: Healy Street,stop_code: Wjz70lp, lat: -35.1966753, lng: 149.0658519} - - { name: Boote Street,stop_code: Wjz70zB, lat: -35.1976784, lng: 149.0688026} - - { name: Scattergood Place,stop_code: Wjz70zz, lat: -35.1978567, lng: 149.0687555} - - { name: Owen Dixon Drive,stop_code: Wjz70IY, lat: -35.1970964, lng: 149.0706179} - - { name: Douglass Street,stop_code: Wjz70Wx, lat: -35.1986717, lng: 149.0728065} - - { name: Copland Drive,stop_code: Wjz67_t, lat: -35.200411, lng: 149.0727116} - - { name: Emerton Street,stop_code: Wjz67BD, lat: -35.2015929, lng: 149.0686908} - - { name: Scattergood Place,stop_code: Wjz67Dq, lat: -35.2006561, lng: 149.0686086} - - { name: Milne Bay Road,stop_code: Wjzce7O, lat: -35.2940494, lng: 149.162512} - - { name: Bimbimbie Street,stop_code: Wjz68Y0, lat: -35.2413091, lng: 149.0832098} - - { name: Bimbimbie Street,stop_code: Wjz68IH, lat: -35.2411129, lng: 149.0812786} - - { name: Bimbimbie Street,stop_code: Wjz68Ip, lat: -35.2412881, lng: 149.0809439} - - { name: Drakeford Drive,stop_code: WjrXUoV, lat: -35.3758661, lng: 149.0568376} - - { name: Tuggeranong Parkway,stop_code: WjrXUsW, lat: -35.3730527, lng: 149.0568719} - - { name: Banambila Street,stop_code: Wjz5dQt, lat: -35.2573605, lng: 149.0822652} - - { name: Bindaga Street,stop_code: Wjz5dcJ, lat: -35.2573868, lng: 149.075852} - - { name: Bandjalong Crescent,stop_code: Wjz5d81, lat: -35.2605056, lng: 149.0749293} - - { name: Cooyong Street,stop_code: Wjz5NAQ, lat: -35.2794375, lng: 149.1349942} - - { name: Kambah pool Road,stop_code: WjrXMN9, lat: -35.3751239, lng: 149.0489789} - - { name: Brierly Street,stop_code: WjrX-3w, lat: -35.340876, lng: 149.0522964} - - { name: Atkinson Street,stop_code: Wjzj4ju, lat: -35.351369, lng: 149.2416919} - - { name: Gungurra Crescent,stop_code: WjrXJ-g, lat: -35.3443528, lng: 149.0396647} - - { name: Comrie Street,stop_code: Wjz2qnG, lat: -35.4038881, lng: 149.0992283} - - { name: Pethebridge Street,stop_code: Wjz3i6e, lat: -35.3603188, lng: 149.084779} - - { name: Colbee Court,stop_code: Wjz3k1J, lat: -35.3528521, lng: 149.0854118} - - { name: Divine Court,stop_code: Wjz3kcA, lat: -35.3508773, lng: 149.0866243} - - { name: Amy Ackman Street,stop_code: Wjz7ZaH, lat: -35.171087, lng: 149.1418054} - - { name: Amy Ackman Street,stop_code: Wjz7ZaP, lat: -35.1710474, lng: 149.141884} - - { name: Amy Ackman Street,stop_code: Wjz7-xb, lat: -35.1662448, lng: 149.1450965} - - { name: Molonglo Drive,stop_code: WjzcrEu, lat: -35.3150059, lng: 149.190788} - - { name: Lochiel Street,stop_code: WjzbUQX, lat: -35.3729581, lng: 149.2368028} - - { name: Noonan Street,stop_code: Wjzi7mf, lat: -35.3766831, lng: 149.2412565} - - { name: Cooma Street,stop_code: WjzbUCp, lat: -35.3717241, lng: 149.2334526} - - { name: Cooma Street,stop_code: WjzbWBs, lat: -35.3611492, lng: 149.2334303} - - { name: Cooma Street,stop_code: WjzbWzE, lat: -35.3628765, lng: 149.2337473} - - { name: Hambly Place,stop_code: WjzbWyW, lat: -35.363411, lng: 149.2340547} - - { name: Gundaroo Drive,stop_code: Wjz7oZp, lat: -35.1966204, lng: 149.1057315} - - { name: Gundaroo Drive,stop_code: Wjz7xp9, lat: -35.193896, lng: 149.1108506} - - { name: Cowper Street,stop_code: Wjz5-6R, lat: -35.2505265, lng: 149.1404751} - - { name: David Walsh Avenue,stop_code: Wjz7YIc, lat: -35.1751298, lng: 149.1466086} - - { name: Barritt Street,stop_code: WjrWTWO, lat: -35.3798917, lng: 149.0512179} - - { name: Barritt Street,stop_code: WjrWTJo, lat: -35.3779591, lng: 149.0479511} - - { name: Constitution Avenue,stop_code: Wjz5MsT, lat: -35.2846782, lng: 149.133671} - - { name: Hindmarsh Drive,stop_code: WjrXBSS, lat: -35.3438051, lng: 149.0278253} - - { name: Hindmarsh Drive,stop_code: WjrXBSJ, lat: -35.3439387, lng: 149.0276931} - - { name: Mort Street,stop_code: Wjz5Oj2, lat: -35.2748472, lng: 149.131256} - - { name: Northbourne Avenue,stop_code: Wjz5P8K, lat: -35.2710632, lng: 149.1307122} - - { name: Northbourne Avenue,stop_code: Wjz5SrO, lat: -35.2528485, lng: 149.1336705} - - { name: Northbourne Avenue,stop_code: Wjz5Rsi, lat: -35.2576771, lng: 149.132889} - - { name: Northbourne Avenue,stop_code: Wjz5QmR, lat: -35.2615172, lng: 149.1322602} - - { name: Northbourne Avenue,stop_code: Wjz5Pl0, lat: -35.2681201, lng: 149.1312} - - { name: Northbourne Avenue,stop_code: Wjz5N5h, lat: -35.2790396, lng: 149.1288222} - - { name: Northbourne Avenue,stop_code: Wjz5O3Q, lat: -35.274617, lng: 149.1295599} - - { name: Northbourne Avenue,stop_code: Wjz5P8n, lat: -35.2710038, lng: 149.1301486} - - { name: Northbourne Avenue,stop_code: Wjz5Qi2, lat: -35.2645608, lng: 149.1311834} - - { name: Northbourne Avenue,stop_code: Wjz5RkN, lat: -35.2577065, lng: 149.1322899} - - { name: Morisset Street,stop_code: WjzbYAM, lat: -35.3512052, lng: 149.2339748} - - { name: Kitchener Street,stop_code: Wjz3uDU, lat: -35.338154, lng: 149.1022456} - - { name: Kitchener Street,stop_code: Wjz3uK7, lat: -35.3382669, lng: 149.1024969} - - { name: Black Mountain Summit Walk,stop_code: Wjz5xl6, lat: -35.278643, lng: 149.1093237} - - { name: Athllon Drive,stop_code: Wjz2mTK, lat: -35.3815863, lng: 149.0936139} - - { name: Baldwin Drive,stop_code: Wjz6keB, lat: -35.2175697, lng: 149.0866478} - - { name: Flierl Place,stop_code: Wjr_Mxy, lat: -35.1992913, lng: 149.0468658} - - { name: Fellows Street,stop_code: Wjr-InZ, lat: -35.2169003, lng: 149.0335258} - - { name: Moyes Crescent,stop_code: Wjr-Alc, lat: -35.2183514, lng: 149.021625} - - { name: Solomon Crescent,stop_code: Wjr-I4P, lat: -35.2191133, lng: 149.0306838} - - { name: Chambers Street,stop_code: Wjr-IGJ, lat: -35.2203467, lng: 149.0373003} - - { name: Maribyrnong Avenue,stop_code: Wjz6zth, lat: -35.2241129, lng: 149.1109391} - - { name: Macumba Place,stop_code: Wjz6yir, lat: -35.2314837, lng: 149.1098378} - - { name: Glossop Crescent,stop_code: Wjzd0oD, lat: -35.2874406, lng: 149.1552177} - - { name: Chewings Street,stop_code: Wjr-N9a, lat: -35.2377693, lng: 149.0421213} - - { name: Hinkler Street,stop_code: Wjr-EuB, lat: -35.2395683, lng: 149.034448} - - { name: Ratcliffe Crescent,stop_code: Wjr-VdI, lat: -35.2348097, lng: 149.0539156} - - { name: Krefft Street,stop_code: Wjr-PWf, lat: -35.225611, lng: 149.0504341} - - { name: Dungowan Street,stop_code: WjrZKnY, lat: -35.2498968, lng: 149.0336595} - - { name: Capital Circle,stop_code: Wjz4IrL, lat: -35.307326, lng: 149.1225503} - - { name: National Circuit,stop_code: Wjz4INj, lat: -35.3091118, lng: 149.1261312} - - { name: Theodore Street,stop_code: Wjz3fO2, lat: -35.3359729, lng: 149.0817737} - - { name: Newdegate Street,stop_code: Wjz4qtY, lat: -35.3172423, lng: 149.100878} - - { name: Hannah Place,stop_code: Wjz4y7z, lat: -35.3159129, lng: 149.1072689} - - { name: Hopetoun Circuit,stop_code: Wjz4yng, lat: -35.316172, lng: 149.1095953} - - { name: Stonehaven Crescent,stop_code: Wjz4yGG, lat: -35.3194308, lng: 149.1142224} - - { name: Melbourne Avenue,stop_code: Wjz4yQ-, lat: -35.3177825, lng: 149.1159796} - - { name: Melbourne Avenue,stop_code: Wjz4Hbx, lat: -35.3133913, lng: 149.1195724} - - { name: Freda Gibson Circuit,stop_code: Wjz1HOf, lat: -35.4453654, lng: 149.1258946} - - { name: Burdett Crescent,stop_code: Wjz1GsO, lat: -35.4499519, lng: 149.1226442} - - { name: Hartung Crescent,stop_code: Wjz1zWz, lat: -35.4457437, lng: 149.1168111} - - { name: Cochrane Crescent,stop_code: Wjz1ySn, lat: -35.4481315, lng: 149.1151569} - - { name: Conlon Crescent,stop_code: Wjz1G32, lat: -35.4506139, lng: 149.1174495} - - { name: Clift Crescent,stop_code: Wjz1CD8, lat: -35.4260286, lng: 149.1122294} - - { name: Meeson Street,stop_code: Wjz1Kiu, lat: -35.4289549, lng: 149.1207905} - - { name: Nina Jones Crescent,stop_code: Wjz1S2v, lat: -35.4289254, lng: 149.1290251} - - { name: Monaro Highway,stop_code: Wjz1TgM, lat: -35.4253782, lng: 149.1323625} - - { name: Baskerville Street,stop_code: Wjz1LBV, lat: -35.4218605, lng: 149.1241279} - - { name: McLorinan Street,stop_code: Wjz1DWq, lat: -35.4238411, lng: 149.1166188} - - { name: Barry Drive,stop_code: Wjz5G6B, lat: -35.2724804, lng: 149.1181797} - - { name: Chinner Crescent,stop_code: Wjr-SAW, lat: -35.2081966, lng: 149.0473834} - - { name: O'Halloran Circuit,stop_code: WjrWYDO, lat: -35.3929049, lng: 149.058196} - - { name: Chuculba Crescent,stop_code: Wjz6sdJ, lat: -35.21822, lng: 149.09782} - - { name: Tucana Street,stop_code: Wjz6t8_, lat: -35.21601, lng: 149.09817} - - { name: Tucana Street,stop_code: Wjz6t9w, lat: -35.21597, lng: 149.09763} - - { name: Canopus Crescent,stop_code: Wjz6t4U, lat: -35.21388, lng: 149.09676} - - { name: Purdie Street,stop_code: Wjz5nw6, lat: -35.2491082, lng: 149.0900504} - - { name: Haydon Drive,stop_code: Wjz6hxB, lat: -35.2374959, lng: 149.0907853} - - { name: Baldwin Drive,stop_code: Wjz6rsL, lat: -35.2242562, lng: 149.1005043} - - { name: Baldwin Drive,stop_code: Wjz6rrI, lat: -35.2252509, lng: 149.1005016} - - { name: Bindubi Street,stop_code: Wjz5eb2, lat: -35.252833, lng: 149.0749872} - - { name: Bindubi Street,stop_code: Wjz5ec7, lat: -35.2517641, lng: 149.0750194} - - { name: Bindubi Street,stop_code: Wjz5d57, lat: -35.256585, lng: 149.0734919} - - { name: College Street,stop_code: Wjz681S, lat: -35.2428905, lng: 149.0745728} - - { name: College Street,stop_code: Wjz689c, lat: -35.2430767, lng: 149.0750449} - - { name: Gwydir Square,stop_code: Wjz6pLi, lat: -35.2336222, lng: 149.1026958} - - { name: Maribyrnong Avenue,stop_code: Wjz6y90, lat: -35.2324006, lng: 149.1079069} - - { name: Moruya Circuit,stop_code: Wjz6Apq, lat: -35.2212504, lng: 149.1111434} - - { name: Ellenborough Street,stop_code: Wjz6yzQ, lat: -35.2307289, lng: 149.1130906} - - { name: Mouat Street,stop_code: Wjz5L_c, lat: -35.2444385, lng: 149.1272473} - - { name: Mouat Street,stop_code: Wjz5Ti2, lat: -35.2480353, lng: 149.1313351} - - { name: Aikman Drive,stop_code: Wjz69ht, lat: -35.2375061, lng: 149.0768646} - - { name: Aikman Drive,stop_code: Wjz69gA, lat: -35.2382334, lng: 149.0769344} - - { name: Broad Place,stop_code: WjrWZsS, lat: -35.3891768, lng: 149.0567055} - - { name: Boddington Crescent,stop_code: WjrWZA3, lat: -35.3893963, lng: 149.0571767} - - { name: Baldwin Drive,stop_code: Wjz6iYm, lat: -35.2298806, lng: 149.0944438} - - { name: Baldwin Drive,stop_code: Wjz6iYk, lat: -35.2300583, lng: 149.0945448} - - { name: Athllon Drive,stop_code: Wjz239F, lat: -35.4026063, lng: 149.0647649} - - { name: Anketell Street,stop_code: Wjz213w, lat: -35.4123171, lng: 149.0633299} - - { name: Anketell Street,stop_code: Wjz20ut, lat: -35.415325, lng: 149.0672593} - - { name: Athllon Drive,stop_code: Wjz3hL_, lat: -35.3650156, lng: 149.0926464} - - { name: Athllon Drive,stop_code: Wjz3gQn, lat: -35.3725942, lng: 149.0931105} - - { name: Athllon Drive,stop_code: Wjz3gMq, lat: -35.3757982, lng: 149.0932419} - - { name: Athllon Drive,stop_code: Wjz238T, lat: -35.4027681, lng: 149.0650277} - - { name: Athllon Drive,stop_code: Wjz3kwU, lat: -35.3539843, lng: 149.0913052} - - { name: Neales Street,stop_code: Wjz6rp1, lat: -35.2268254, lng: 149.0996755} - - { name: Neales Street,stop_code: Wjz6rhW, lat: -35.2267553, lng: 149.0994502} - - { name: Maribyrnong Avenue,stop_code: Wjz6qea, lat: -35.2288148, lng: 149.0970523} - - { name: Marcus Clarke Street,stop_code: Wjz5GNG, lat: -35.2762093, lng: 149.1265723} - - { name: Liversidge Street,stop_code: Wjz5E4O, lat: -35.2851023, lng: 149.1186022} - - { name: McDonald Place,stop_code: Wjz5w_S, lat: -35.2827048, lng: 149.117182} - - { name: Bowes Street,stop_code: Wjz3leq, lat: -35.344135, lng: 149.0864401} - - { name: Bradley Street,stop_code: Wjz3ldj, lat: -35.3447574, lng: 149.0862912} - - { name: Bradley Street,stop_code: Wjz3ldh, lat: -35.3449697, lng: 149.0863328} - - { name: Pitman,stop_code: Wjz20ni, lat: -35.4149428, lng: 149.0656523} - - { name: Pitman,stop_code: Wjz20nk, lat: -35.4147569, lng: 149.0657435} - - { name: Callam Street,stop_code: Wjz3lmt, lat: -35.3439501, lng: 149.0877369} - - { name: Bowes Street,stop_code: Wjz3ldC, lat: -35.344484, lng: 149.0866144} - - { name: Bradley Street,stop_code: Wjz3lm0, lat: -35.34438, lng: 149.0872661} - - { name: Bradley Street,stop_code: Wjz3ll7, lat: -35.3444741, lng: 149.0873533} - - { name: Bowes Street,stop_code: Wjz3lml, lat: -35.3439129, lng: 149.0876216} - - { name: Callam Street,stop_code: Wjz3lmi, lat: -35.3442093, lng: 149.0876443} - - { name: Bowes Street,stop_code: Wjz3leo, lat: -35.344368, lng: 149.0864991} - - { name: Callam Street,stop_code: Wjz3lmq, lat: -35.3442083, lng: 149.0877771} - - { name: Eileen Good Street,stop_code: Wjz21g2, lat: -35.414217, lng: 149.0653492} - - { name: Cohen Street,stop_code: Wjr-UJ-, lat: -35.240121, lng: 149.0597101} - - { name: Pitman,stop_code: Wjz20nd, lat: -35.4146761, lng: 149.0654565} - - { name: Cohen Street,stop_code: Wjr-USa, lat: -35.2398454, lng: 149.0600442} - - { name: David Walsh Avenue,stop_code: Wjz7YzW, lat: -35.1759253, lng: 149.1462691} - - { name: Kathner Street,stop_code: WjrXBWn, lat: -35.3465295, lng: 149.0286032} - - { name: Cohen Street,stop_code: Wjr-USy, lat: -35.2397639, lng: 149.0604531} - - { name: Rene Street,stop_code: WjrXHvw, lat: -35.3546272, lng: 149.0344542} - - { name: Perry Drive,stop_code: WjrXPbD, lat: -35.356823, lng: 149.0426424} - - { name: Darwinia Terrace,stop_code: WjrXIbT, lat: -35.351342, lng: 149.0321099} - - { name: Darwinia Terrace,stop_code: WjrXIqp, lat: -35.352473, lng: 149.0342718} - - { name: Rafferty Street,stop_code: WjrXIbK, lat: -35.3514081, lng: 149.0319332} - - { name: Kathner Street,stop_code: WjrXBWu, lat: -35.3466197, lng: 149.0287455} - - { name: Darwinia Terrace,stop_code: WjrXI5u, lat: -35.3499839, lng: 149.0301495} - - { name: Rene Street,stop_code: WjrXHuL, lat: -35.3547054, lng: 149.0346008} - - { name: Musgrove street,stop_code: WjrXHH7, lat: -35.3568349, lng: 149.0364585} - - { name: Musgrove street,stop_code: WjrXHHk, lat: -35.3570187, lng: 149.0369096} - - { name: Perry Drive,stop_code: WjrXHYJ, lat: -35.356246, lng: 149.0401055} - - { name: Bertel Crescent,stop_code: WjrXPgO, lat: -35.3592839, lng: 149.0444246} - - { name: Namatjira Drive,stop_code: WjrXPFr, lat: -35.3585046, lng: 149.0479415} - - { name: Namatjira Drive,stop_code: WjrXPFn, lat: -35.358206, lng: 149.0478792} - - { name: Streeton Drive,stop_code: WjrXPJX, lat: -35.3557253, lng: 149.0486263} - - { name: Fremantle Drive,stop_code: WjrXQO9, lat: -35.352521, lng: 149.0490119} - - { name: Bunbury Street,stop_code: WjrXQTq, lat: -35.348941, lng: 149.0494159} - - { name: Bunbury Street,stop_code: WjrXQTy, lat: -35.3489683, lng: 149.0495709} - - { name: McKail Crescent,stop_code: WjrXRFB, lat: -35.3473864, lng: 149.048202} - - { name: McKail Crescent,stop_code: WjrXRyK, lat: -35.3465911, lng: 149.0470392} - - { name: Streeton Drive,stop_code: WjrXRBQ, lat: -35.3446963, lng: 149.0471083} - - { name: Streeton Drive,stop_code: WjrXRBJ, lat: -35.344588, lng: 149.0469995} - - { name: Whitney Place,stop_code: WjrX-90, lat: -35.3423165, lng: 149.0529937} - - { name: Parkinson Street,stop_code: WjrXZv3, lat: -35.3434037, lng: 149.0557375} - - { name: Corinna Street,stop_code: Wjz3dXS, lat: -35.3459117, lng: 149.0842511} - - { name: Clode Crescent,stop_code: Wjr-uhM, lat: -35.2104818, lng: 149.0114129} - - { name: Gilmore Crescent,stop_code: Wjz3Bea, lat: -35.3442178, lng: 149.1080098} - - { name: Gonzaga Place,stop_code: Wjz2wGU, lat: -35.4184904, lng: 149.1145873} - - { name: Rischbieth Crescent,stop_code: Wjz2MYC, lat: -35.4166279, lng: 149.1388559} - - { name: Penton Place,stop_code: Wjz2Npv, lat: -35.4131394, lng: 149.1331606} - - { name: Carruthers Street,stop_code: Wjz4h1X, lat: -35.3255489, lng: 149.0857143} - - { name: Bunny Street,stop_code: WjrX_SL, lat: -35.3327937, lng: 149.0607695} - - { name: Davenport Street,stop_code: Wjz37Zc, lat: -35.3337407, lng: 149.0723488} - - { name: Isabella Drive,stop_code: Wjz1nzY, lat: -35.4229506, lng: 149.0912343} - - { name: Lake Tuggeranong cycle track,stop_code: Wjz20Vv, lat: -35.4185754, lng: 149.072661} - - { name: Taverner Street,stop_code: Wjz2b8J, lat: -35.4029944, lng: 149.0757807} - - { name: Nunan Crescent,stop_code: Wjz29-5, lat: -35.4098244, lng: 149.083123} - - { name: Laurens Street,stop_code: Wjz2i3o, lat: -35.4068322, lng: 149.0850166} - - { name: Taverner Street,stop_code: Wjz2aGG, lat: -35.4073408, lng: 149.0812511} - - { name: Taverner Street,stop_code: Wjz2azE, lat: -35.4068027, lng: 149.0799162} - - { name: Clutterbuck Crescent,stop_code: Wjz2arg, lat: -35.4068086, lng: 149.0779936} - - { name: Connibere Crescent,stop_code: Wjz2aaw, lat: -35.4075241, lng: 149.0756429} - - { name: Singleton Crescent,stop_code: Wjz29ea, lat: -35.4101319, lng: 149.0751278} - - { name: Maconochie Crescent,stop_code: Wjz29yh, lat: -35.4129642, lng: 149.0794301} - - { name: Checchi Place,stop_code: Wjz28Yv, lat: -35.4165651, lng: 149.0836163} - - { name: Forwood Street,stop_code: Wjz2haF, lat: -35.4129406, lng: 149.0867361} - - { name: Harricks Crescent,stop_code: Wjz2hlp, lat: -35.4109006, lng: 149.0878896} - - { name: Michell Street,stop_code: Wjz2hBQ, lat: -35.4106404, lng: 149.0911182} - - { name: Beirne Street,stop_code: Wjz2iEO, lat: -35.40876, lng: 149.0925039} - - { name: Amsinck Street,stop_code: Wjz2iPv, lat: -35.4062172, lng: 149.093302} - - { name: Mackinnon Street,stop_code: Wjz2izK, lat: -35.4062764, lng: 149.0909078} - - { name: Tuggeranong Parkway,stop_code: Wjz34Gq, lat: -35.352423, lng: 149.0699271} - - { name: Tuggeranong Parkway Onramp,stop_code: Wjz33LB, lat: -35.3542352, lng: 149.0701992} - - { name: Tuggeranong Parkway,stop_code: Wjz33EK, lat: -35.3589689, lng: 149.0702445} - - { name: Yambina Crescent,stop_code: WjrXXMe, lat: -35.3589023, lng: 149.0599784} - - { name: Araluen Street,stop_code: WjrXWsn, lat: -35.3616093, lng: 149.055979} - - { name: Guinness Place,stop_code: WjrXGDF, lat: -35.3600413, lng: 149.0360091} - - { name: Gulgong Place,stop_code: WjrXXb4, lat: -35.3570754, lng: 149.0530316} - - { name: Larakia Street,stop_code: Wjz34c4, lat: -35.3508697, lng: 149.0639869} - - { name: Cedrela Place,stop_code: WjrXR3f, lat: -35.3458397, lng: 149.040861} - - { name: Blowering Street,stop_code: WjrXLtK, lat: -35.3335671, lng: 149.0346289} - - { name: Mt Taylor Zig Zag,stop_code: Wjz39sA, lat: -35.3673329, lng: 149.0783636} - - { name: Beasley Street,stop_code: Wjz3hu6, lat: -35.3658261, lng: 149.0887408} - - { name: Marr Street,stop_code: Wjz3iuk, lat: -35.3604697, lng: 149.0889561} - - { name: Catalina Drive,stop_code: Wjzcuop, lat: -35.2989647, lng: 149.1881172} - - { name: Laverton Avenue,stop_code: WjzcJ38, lat: -35.3024713, lng: 149.2056109} - - { name: Horse Park Drive,stop_code: Wjz7smv, lat: -35.1734671, lng: 149.0988597} - - { name: Kerrigan Street,stop_code: Wjr_xY9, lat: -35.1918291, lng: 149.028508} - - { name: Yabsley Place,stop_code: Wjr_Ej0, lat: -35.1981116, lng: 149.0323079} - - { name: Rogers Street,stop_code: Wjr_GVA, lat: -35.188117, lng: 149.0399446} - - { name: Foskett Street,stop_code: Wjr_N-q, lat: -35.1903433, lng: 149.0507803} - - { name: Nott Street,stop_code: Wjr_NpJ, lat: -35.1935127, lng: 149.0455536} - - { name: Osburn Drive,stop_code: Wjr-uUL, lat: -35.210513, lng: 149.0180445} - - { name: Commonwealth Avenue,stop_code: Wjz4KO9, lat: -35.2975962, lng: 149.1259252} - - { name: Cowper Street,stop_code: Wjz5_0v, lat: -35.2490065, lng: 149.1400861} - - { name: Captain Cook Crescent,stop_code: Wjz4NDo, lat: -35.3217168, lng: 149.1344712} - - { name: Marcus Clarke Street,stop_code: Wjz5FIS, lat: -35.279312, lng: 149.1254166} - - { name: Keenan Street,stop_code: Wjz66kG, lat: -35.2081931, lng: 149.0662542} - - { name: Moor Place,stop_code: Wjz66t3, lat: -35.2074684, lng: 149.0667796} - - { name: Connah Street,stop_code: Wjr-Xhh, lat: -35.2268712, lng: 149.0546156} - - { name: Linger Place,stop_code: Wjr--r_, lat: -35.2084885, lng: 149.0569758} - - { name: Russell Drive,stop_code: Wjzc55s, lat: -35.3007195, lng: 149.1509863} - - { name: Reg Saunders Way,stop_code: Wjz4-YV, lat: -35.2961803, lng: 149.1503194} - - { name: Russell Drive,stop_code: Wjzc60i, lat: -35.2988201, lng: 149.1508684} - - { name: National Circuit,stop_code: Wjz4Quk, lat: -35.3055692, lng: 149.1330442} - - { name: Melrose Drive,stop_code: Wjz3eZ4, lat: -35.3392098, lng: 149.0831308} - - { name: Russell Drive,stop_code: Wjz4-KO, lat: -35.2946955, lng: 149.147399} - - { name: Chifley Place,stop_code: Wjz3caw, lat: -35.3525528, lng: 149.0755688} - - { name: Carslaw Street,stop_code: Wjz3ceY, lat: -35.3495185, lng: 149.0761236} - - { name: Threlfall Street,stop_code: Wjz3b9L, lat: -35.3581358, lng: 149.0757975} - - { name: Boult Place,stop_code: Wjr-SHc, lat: -35.2086969, lng: 149.0476925} - - { name: Conley Drive,stop_code: Wjr-RZE, lat: -35.2132014, lng: 149.0511677} - - { name: Grainger Circuit,stop_code: Wjr-R_3, lat: -35.2115401, lng: 149.0502887} - - { name: Verbrugghen Street,stop_code: Wjr-ZBY, lat: -35.2128526, lng: 149.0583185} - - { name: Copland Drive,stop_code: Wjr-ZSE, lat: -35.2124829, lng: 149.0606716} - - { name: Linger Place,stop_code: Wjr--sV, lat: -35.2083253, lng: 149.0568878} - - { name: Bishop Place,stop_code: Wjr--m3, lat: -35.2067416, lng: 149.0543264} - - { name: Henslowe Place,stop_code: Wjr--6t, lat: -35.2065912, lng: 149.0521439} - - { name: Lathlain Street,stop_code: Wjz605N, lat: -35.2405467, lng: 149.0636668} - - { name: Lathlain Street,stop_code: Wjz604Y, lat: -35.2410486, lng: 149.0638326} - - { name: Daley Road,stop_code: Wjz5xHC, lat: -35.2799871, lng: 149.1141335} - - { name: Macarthur Avenue,stop_code: Wjz5J9d, lat: -35.2594616, lng: 149.1190821} - - { name: Bainton Crescent,stop_code: Wjr-_kG, lat: -35.2027328, lng: 149.0551853} - - { name: Alpen Street,stop_code: Wjr-_Nn, lat: -35.2043934, lng: 149.0601598} - - { name: Broadby Close,stop_code: Wjz671V, lat: -35.204864, lng: 149.0637204} - - { name: Kingsford Smith Drive,stop_code: Wjr-_zv, lat: -35.2030129, lng: 149.0575605} - - { name: John Cleland Crescent,stop_code: Wjr-Yg7, lat: -35.2215188, lng: 149.0543538} - - { name: John Cleland Crescent,stop_code: Wjr-XyN, lat: -35.226202, lng: 149.0581637} - - { name: Wiseman Street,stop_code: Wjz56Xu, lat: -35.2524925, lng: 149.0726439} - - { name: Fulton Street,stop_code: Wjz571j, lat: -35.2486364, lng: 149.0628845} - - { name: Launceston Street,stop_code: Wjz3m3b, lat: -35.3406241, lng: 149.0847703} - - { name: O'Hanlon Place,stop_code: Wjz79ZQ, lat: -35.190906, lng: 149.0842116} - - { name: O'Hanlon Place,stop_code: Wjz7hb5, lat: -35.1921368, lng: 149.0859491} - - { name: O'Hanlon Place,stop_code: Wjz7hbe, lat: -35.1921183, lng: 149.0860955} - - { name: Jalanga Crescent,stop_code: Wjz5dCr, lat: -35.2561978, lng: 149.0795805} - - { name: Lyttleton Crescent,stop_code: Wjz54_B, lat: -35.2608235, lng: 149.0728514} - - { name: Lyttleton Crescent,stop_code: Wjz54_n, lat: -35.2606623, lng: 149.072551} - - { name: Cambridge Street,stop_code: Wjz54CS, lat: -35.2614333, lng: 149.0690577} - - { name: Templeton Street,stop_code: Wjz551Q, lat: -35.2595831, lng: 149.0636761} - - { name: Templeton Street,stop_code: Wjz5592, lat: -35.2596812, lng: 149.0639679} - - { name: Redfern Street,stop_code: WjrZZB7, lat: -35.2565133, lng: 149.0570071} - - { name: Coulter Drive,stop_code: WjrZ_o2, lat: -35.2493991, lng: 149.055711} - - { name: Coulter Drive,stop_code: WjrZ_o4, lat: -35.2492379, lng: 149.0556338} - - { name: Weetangera Place,stop_code: WjrZTMv, lat: -35.2489575, lng: 149.0493939} - - { name: Gillespie Street,stop_code: WjrZTua, lat: -35.2452775, lng: 149.0448362} - - { name: Gillespie Street,stop_code: WjrZTu1, lat: -35.2453967, lng: 149.044759} - - { name: Hawker Place,stop_code: Wjr-Mg6, lat: -35.2436162, lng: 149.0432913} - - { name: Hawker Place,stop_code: Wjr-Mgt, lat: -35.2436863, lng: 149.0438835} - - { name: Murranji Street,stop_code: WjrZT5e, lat: -35.245649, lng: 149.0408365} - - { name: Erldunda Circuit,stop_code: WjrZLXY, lat: -35.2471491, lng: 149.0403988} - - { name: Murranji Street,stop_code: WjrZT6b, lat: -35.2452004, lng: 149.0407936} - - { name: Wisdom Street,stop_code: Wjz3mI-, lat: -35.3396854, lng: 149.092654} - - { name: Hardwick Crescent,stop_code: Wjr-z7J, lat: -35.2223574, lng: 149.0195037} - - { name: Ligertwood Street,stop_code: Wjz65aB, lat: -35.2148653, lng: 149.0646456} - - { name: Alderman Street,stop_code: Wjz65rQ, lat: -35.2142653, lng: 149.0676927} - - { name: Hatfield Street,stop_code: Wjz66oJ, lat: -35.2107077, lng: 149.0674989} - - { name: Clancy Street,stop_code: Wjz66WS, lat: -35.2092634, lng: 149.0731992} - - { name: Marconi Crescent,stop_code: WjrW_zu, lat: -35.3788924, lng: 149.0576496} - - { name: Marconi Crescent,stop_code: WjrW_RH, lat: -35.3777568, lng: 149.0607135} - - { name: Marconi Crescent,stop_code: Wjz27k0, lat: -35.3786939, lng: 149.0653235} - - { name: Lascelles Circuit,stop_code: Wjz27gg, lat: -35.3814094, lng: 149.0656219} - - { name: Summerland Circuit,stop_code: Wjz26tw, lat: -35.38347, lng: 149.0674733} - - { name: Mason Street,stop_code: Wjz26WW, lat: -35.3853577, lng: 149.0733293} - - { name: Lee Steere Crescent,stop_code: Wjz2df1, lat: -35.3875049, lng: 149.0748933} - - { name: Kingsmill Street,stop_code: Wjz2d32, lat: -35.3901917, lng: 149.0734943} - - { name: Jenke Circuit,stop_code: Wjz24uT, lat: -35.3931517, lng: 149.0676751} - - { name: O'Halloran Circuit,stop_code: Wjz24lA, lat: -35.3941231, lng: 149.0659575} - - { name: Pinkerton Circuit,stop_code: Wjz2498, lat: -35.3972167, lng: 149.0640703} - - { name: Ragless Circuit,stop_code: Wjz234e, lat: -35.4001412, lng: 149.0627055} - - { name: Learmonth Drive,stop_code: Wjz230Q, lat: -35.4030936, lng: 149.0635466} - - { name: Lavan Place,stop_code: Wjz66C2, lat: -35.2068343, lng: 149.0681005} - - { name: Clancy Street,stop_code: Wjz66Lx, lat: -35.2062279, lng: 149.0700922} - - { name: Edmunds Place,stop_code: Wjz70go, lat: -35.2001419, lng: 149.0658463} - - { name: Baddeley Crescent,stop_code: Wjr_UUM, lat: -35.2001188, lng: 149.062303} - - { name: Captain Cook Crescent,stop_code: Wjz3_z-, lat: -35.3349223, lng: 149.1461306} - - { name: Kingsford Smith Drive,stop_code: Wjr_UPL, lat: -35.1975228, lng: 149.0606273} - - { name: Kingsford Smith Drive,stop_code: Wjr_UTJ, lat: -35.1949558, lng: 149.0607434} - - { name: Healy Street,stop_code: Wjz70kD, lat: -35.196836, lng: 149.0659887} - - { name: Heagney Crescent,stop_code: Wjz2EXs, lat: -35.4174557, lng: 149.1275741} - - { name: Monaro Highway,stop_code: Wjz2V0k, lat: -35.4140263, lng: 149.1397991} - - { name: Willoughby Crescent,stop_code: Wjz2NH0, lat: -35.4123115, lng: 149.1353734} - - { name: Theodore Street,stop_code: Wjz48Q1, lat: -35.3291744, lng: 149.0818599} - - { name: Martin Street,stop_code: Wjz49Ui, lat: -35.3262888, lng: 149.0835377} - - { name: Morgan Crescent,stop_code: Wjz4aMo, lat: -35.3209613, lng: 149.082268} - - { name: Jenkins Street,stop_code: Wjz49dp, lat: -35.3229961, lng: 149.075421} - - { name: Launceston Street,stop_code: Wjz3e8l, lat: -35.3425473, lng: 149.0752509} - - { name: McCubbin Street,stop_code: WjrX_bF, lat: -35.3353506, lng: 149.0538045} - - { name: Namatjira Drive,stop_code: WjrX-oT, lat: -35.3424053, lng: 149.0567937} - - { name: Mather Street,stop_code: WjrX-zT, lat: -35.3402984, lng: 149.0581286} - - { name: Nambir Court,stop_code: Wjz1edz, lat: -35.4271482, lng: 149.0757082} - - { name: Anketell Street,stop_code: Wjz20Eo, lat: -35.4198466, lng: 149.0699766} - - { name: Laurens Street,stop_code: Wjz2aVu, lat: -35.4076897, lng: 149.0836236} - - { name: Charleston Street,stop_code: Wjz28DH, lat: -35.4148504, lng: 149.0799887} - - { name: Mault Place,stop_code: Wjz2g6U, lat: -35.4157965, lng: 149.0857566} - - { name: Corlette Crescent,stop_code: Wjz2gvd, lat: -35.4146612, lng: 149.0888256} - - { name: Nemarang Crescent,stop_code: Wjz33CI, lat: -35.3549749, lng: 149.0689295} - - { name: Tuggeranong Parkway Onramp,stop_code: Wjz33KX, lat: -35.3550858, lng: 149.070698} - - { name: Wambaya Street,stop_code: Wjz33nk, lat: -35.3543462, lng: 149.0657554} - - { name: Wirangu Place,stop_code: WjrXXI2, lat: -35.3565059, lng: 149.058473} - - { name: Walpiri Place,stop_code: WjrXYtm, lat: -35.3499821, lng: 149.0560969} - - { name: Bangalay Crescent,stop_code: WjrXIKK, lat: -35.3493279, lng: 149.0374035} - - { name: Hindmarsh Drive,stop_code: WjrXJfw, lat: -35.3436463, lng: 149.031771} - - { name: Eppalock Street,stop_code: WjrYEg0, lat: -35.3320285, lng: 149.0323493} - - { name: Warragamba Avenue,stop_code: WjrYEWc, lat: -35.3302839, lng: 149.0394086} - - { name: Streeton Drive,stop_code: WjrX_1g, lat: -35.336799, lng: 149.0519909} - - { name: Hellyer Street,stop_code: WjrXLY1, lat: -35.3346674, lng: 149.0391656} - - { name: Paloona Place,stop_code: WjrXLEL, lat: -35.3369076, lng: 149.0374236} - - { name: Leighton Street,stop_code: Wjz39GV, lat: -35.369019, lng: 149.0816284} - - { name: Foskett Street,stop_code: Wjr_V6V, lat: -35.1904467, lng: 149.0528033} - - { name: Tillyard Drive,stop_code: Wjr_McO, lat: -35.1972013, lng: 149.0429389} - - { name: Spalding Street,stop_code: Wjr_MhY, lat: -35.1991196, lng: 149.0445095} - - { name: O'Shanassy Street,stop_code: Wjz4a9o, lat: -35.3203323, lng: 149.0754663} - - { name: Owen Dixon Drive,stop_code: Wjz70IW, lat: -35.197242, lng: 149.0706277} - - { name: Sport Way,stop_code: Wjr-DTC, lat: -35.2002855, lng: 149.0276101} - - { name: Lance Hill Avenue,stop_code: Wjr_wf4, lat: -35.1950004, lng: 149.0199737} - - { name: Kerrigan Street,stop_code: Wjr_pVW, lat: -35.1938099, lng: 149.0184155} - - { name: Douglass Street,stop_code: Wjz70Wi, lat: -35.1986355, lng: 149.0725952} - - { name: Copland Drive,stop_code: Wjz67_v, lat: -35.2002563, lng: 149.0727607} - - { name: Gallipoli Road,stop_code: Wjzcend, lat: -35.2937972, lng: 149.1643403} - - { name: Mileham Street,stop_code: Wjr-vNL, lat: -35.2043835, lng: 149.0167621} - - { name: Ginninderra Drive,stop_code: Wjr-Df8, lat: -35.2008175, lng: 149.0201835} - - { name: Clode Crescent,stop_code: Wjr-te3, lat: -35.2122382, lng: 149.0090273} - - { name: Handcock Crescent,stop_code: Wjr-CsO, lat: -35.2082115, lng: 149.0237453} - - { name: Prevost Place,stop_code: Wjr-sKW, lat: -35.2178207, lng: 149.0156953} - - { name: Plowman Place,stop_code: Wjr-S9y, lat: -35.2102797, lng: 149.0426899} - - { name: O'Loghlen Street,stop_code: Wjr-HbC, lat: -35.2250302, lng: 149.0316399} - - { name: Southern Cross Drive,stop_code: Wjr-sQ8, lat: -35.2193706, lng: 149.0159919} - - { name: Armstrong Crescent,stop_code: Wjr-rv7, lat: -35.2221818, lng: 149.0117611} - - { name: Spofforth Street,stop_code: Wjr-kVk, lat: -35.2210905, lng: 149.0066193} - - { name: Pickworth Street,stop_code: Wjr-rxG, lat: -35.2267918, lng: 149.0140227} - - { name: Macnaughton Street,stop_code: Wjr-qZg, lat: -35.2296561, lng: 149.0176617} - - { name: Powell Street,stop_code: Wjr-rUs, lat: -35.2272548, lng: 149.0178319} - - { name: Beaurepaire Crescent,stop_code: Wjr-rNr, lat: -35.226697, lng: 149.016389} - - { name: Hardwick Crescent,stop_code: Wjr-zcC, lat: -35.2243517, lng: 149.0207165} - - { name: Brazel Street,stop_code: Wjr-G5f, lat: -35.2290792, lng: 149.0298564} - - { name: Wearing Street,stop_code: Wjr-xRd, lat: -35.2347078, lng: 149.0270748} - - { name: Drake Brockman Drive,stop_code: Wjr-wDP, lat: -35.2389936, lng: 149.0252414} - - { name: Castieau Street,stop_code: Wjr-Gsq, lat: -35.2301636, lng: 149.0342818} - - { name: Ulm Street,stop_code: Wjr-GyJ, lat: -35.2312775, lng: 149.0359574} - - { name: Wirraway Crescent,stop_code: Wjr-GFM, lat: -35.2324613, lng: 149.03753} - - { name: Ross Smith Crescent,stop_code: Wjr-F_m, lat: -35.233261, lng: 149.039515} - - { name: Ross Smith Crescent,stop_code: Wjr-FCU, lat: -35.2344506, lng: 149.0363984} - - { name: Hinkler Street,stop_code: Wjr-Fzd, lat: -35.2360739, lng: 149.0353153} - - { name: Delamere Street,stop_code: Wjr-E8A, lat: -35.2437543, lng: 149.031741} - - { name: Tanumbirini Street,stop_code: WjrZLdA, lat: -35.245805, lng: 149.0316615} - - { name: Southwell Street,stop_code: WjrZSKp, lat: -35.2509203, lng: 149.0480636} - - { name: De Salis Street,stop_code: WjrZSWs, lat: -35.2533983, lng: 149.050782} - - { name: Hannaford Street,stop_code: Wjr-MCk, lat: -35.2396029, lng: 149.0464162} - - { name: Hannaford Street,stop_code: Wjr-M-x, lat: -35.2399127, lng: 149.0508416} - - { name: Shumack Street,stop_code: WjrZ-aT, lat: -35.2531402, lng: 149.053943} - - { name: Coulter Drive,stop_code: WjrZZeD, lat: -35.2558247, lng: 149.0536901} - - { name: Redfern Street,stop_code: WjrZZlR, lat: -35.2567539, lng: 149.055397} - - { name: Atkinson Street,stop_code: WjrZZH3, lat: -35.2583026, lng: 149.0584315} - - { name: Skinner Street,stop_code: Wjz54mj, lat: -35.2617096, lng: 149.0656385} - - { name: Allman Circuit,stop_code: Wjz55vN, lat: -35.2557214, lng: 149.0677248} - - { name: Redfern Street,stop_code: Wjz557P, lat: -35.2555149, lng: 149.0636155} - - { name: Goulburn Street,stop_code: WjrZ-WW, lat: -35.2535016, lng: 149.0623511} - - { name: Roberts Street,stop_code: WjrZ-GZ, lat: -35.2532951, lng: 149.0596327} - - { name: Erskine Street,stop_code: WjrZ-Jc, lat: -35.2513107, lng: 149.058664} - - { name: Erskine Street,stop_code: WjrZ_Fk, lat: -35.2485228, lng: 149.0588536} - - { name: Thurlow Place,stop_code: Wjz57Q7, lat: -35.2462221, lng: 149.0708857} - - { name: Maddison Close,stop_code: Wjz5fm2, lat: -35.2452775, lng: 149.0763507} - - { name: Vowels Crescent,stop_code: Wjz5nUz, lat: -35.2493715, lng: 149.094909} - - { name: Thynne Street,stop_code: Wjz6gUM, lat: -35.2441052, lng: 149.0951619} - - { name: Leverrier Crescent,stop_code: Wjz5vrT, lat: -35.2469189, lng: 149.1007523} - - { name: Braybrooke Street,stop_code: Wjz6oJz, lat: -35.2403705, lng: 149.1030403} - - { name: Temperley Street,stop_code: Wjz7hZW, lat: -35.1910485, lng: 149.0953265} - - { name: Dobbin Circuit,stop_code: Wjz7iKx, lat: -35.1849518, lng: 149.0920391} - - { name: Fitzsimmons Street,stop_code: Wjz7jaJ, lat: -35.1819033, lng: 149.0868551} - - { name: Kelleway Avenue,stop_code: Wjz7jW4, lat: -35.181955, lng: 149.0941886} - - { name: Whatmore Court,stop_code: Wjz7rzg, lat: -35.1815933, lng: 149.1014588} - - { name: Whitfield Circuit,stop_code: Wjz7pkV, lat: -35.1918235, lng: 149.0995622} - - { name: Lexcen Avenue,stop_code: Wjz7qSX, lat: -35.1847968, lng: 149.1050623} - - { name: Kelleway Avenue,stop_code: Wjz7rRa, lat: -35.1800948, lng: 149.1039243} - - { name: Jabanungga Avenue,stop_code: Wjz7B0w, lat: -35.1727054, lng: 149.107275} - - { name: Newlop Street,stop_code: Wjz7thn, lat: -35.1713618, lng: 149.0985507} - - { name: Bicentennial National Trail,stop_code: Wjz7uxi, lat: -35.1663489, lng: 149.1013956} - - { name: Mundang Crescent,stop_code: Wjz7tIt, lat: -35.169553, lng: 149.1029128} - - { name: Wanganeen Avenue,stop_code: Wjz7BsE, lat: -35.1699148, lng: 149.1115106} - - { name: College Street,stop_code: Wjz68W3, lat: -35.2425008, lng: 149.0831669} - - { name: Drakeford Drive,stop_code: WjrW_uo, lat: -35.3773291, lng: 149.056161} - - { name: Tuggeranong Parkway,stop_code: WjrXUAm, lat: -35.3726375, lng: 149.0574471} - - { name: Banambila Street,stop_code: Wjz5l2U, lat: -35.2592266, lng: 149.0857332} - - { name: Bindel Street,stop_code: Wjz5e8Y, lat: -35.2547235, lng: 149.0761202} - - { name: Kambah pool Road,stop_code: WjrXMFM, lat: -35.3752866, lng: 149.0485475} - - { name: Carbeen Street,stop_code: WjrXJZ6, lat: -35.3445279, lng: 149.0392999} - - { name: Collings Street,stop_code: Wjz3jaF, lat: -35.3579826, lng: 149.0867102} - - { name: Paramatta Street,stop_code: Wjz3jei, lat: -35.3551755, lng: 149.0862349} - - { name: Aikman Drive,stop_code: Wjz69uI, lat: -35.2341477, lng: 149.0784965} - - { name: Amy Ackman Street,stop_code: Wjz7-oI, lat: -35.1668191, lng: 149.1443901} - - { name: Barracks Flat Drive,stop_code: WjzbUGB, lat: -35.3740947, lng: 149.2349556} - - { name: Ling Place,stop_code: Wjzj0yX, lat: -35.3742978, lng: 149.2450265} - - { name: Knowles Place,stop_code: Wjz5FOn, lat: -35.2806054, lng: 149.1260452} - - { name: Gundaroo Drive,stop_code: Wjz7oYv, lat: -35.196789, lng: 149.1057064} - - { name: Gundaroo Drive,stop_code: Wjz7xpa, lat: -35.1938349, lng: 149.1107761} - - { name: Barritt Street,stop_code: WjrW_1f, lat: -35.3801683, lng: 149.051853} - - { name: Barritt Street,stop_code: WjrWTJq, lat: -35.3778081, lng: 149.0480034} - - { name: Constitution Avenue,stop_code: Wjz5MsD, lat: -35.2847121, lng: 149.1333531} - - { name: Mort Street,stop_code: Wjz5Ok1, lat: -35.2742265, lng: 149.1312268} - - { name: Northbourne Avenue,stop_code: Wjz5SDc, lat: -35.2499285, lng: 149.1341368} - - { name: Northbourne Avenue,stop_code: Wjz5Qgn, lat: -35.2655006, lng: 149.1316277} - - { name: Northbourne Avenue,stop_code: Wjz5Sqk, lat: -35.2533948, lng: 149.1329835} - - { name: Coranderrk Street,stop_code: Wjz5MI3, lat: -35.2850249, lng: 149.1353935} - - { name: Launceston Street,stop_code: Wjz3eje, lat: -35.3403963, lng: 149.0765097} - - { name: Streeton Drive,stop_code: WjrXQ2W, lat: -35.3523853, lng: 149.0417814} - - { name: Bangalay Crescent,stop_code: WjrXQeH, lat: -35.3495777, lng: 149.0428125} - - { name: Sidaway Street,stop_code: WjrXHZU, lat: -35.3560382, lng: 149.0404158} - - { name: Mirrabei Drive,stop_code: Wjz7BST, lat: -35.167951, lng: 149.1157463} - - { name: Saunders Street,stop_code: Wjz7AJS, lat: -35.174204, lng: 149.1143555} - - { name: Amagula Avenue,stop_code: Wjz7zzB, lat: -35.1811799, lng: 149.1126486} - - { name: Windradyne Street,stop_code: Wjz7CD7, lat: -35.1617492, lng: 149.1119532} - - { name: Mirrabei Drive,stop_code: Wjz7If2, lat: -35.1732221, lng: 149.1188441} - - { name: Paul Coe Crescent,stop_code: Wjz7Iax, lat: -35.1766844, lng: 149.1196027} - - { name: Mirrabei Drive,stop_code: Wjz7IFg, lat: -35.1774595, lng: 149.1246602} - - { name: Shoalhaven Avenue,stop_code: Wjz7J-7, lat: -35.167951, lng: 149.1270626} - - { name: Proserpine Circuit,stop_code: Wjz7RdE, lat: -35.169243, lng: 149.1307293} - - { name: Inglewood Street,stop_code: Wjz7Y0J, lat: -35.177732, lng: 149.1403005} - - { name: Obrien Place,stop_code: Wjz7GSc, lat: -35.1847451, lng: 149.1258614} - - { name: Anthony Rolfe Avenue,stop_code: Wjz7Ppw, lat: -35.1829884, lng: 149.1332581} - - { name: Swain Street,stop_code: Wjz7X2n, lat: -35.1817108, lng: 149.1398579} - - { name: Petersilka Street,stop_code: Wjz7XxD, lat: -35.1823825, lng: 149.1457373} - - { name: Thistle Lane,stop_code: Wjzf2rm, lat: -35.1865677, lng: 149.1549041} - - { name: Horse Park Drive,stop_code: Wjzf0ZL, lat: -35.1961257, lng: 149.1609099} - - { name: Morris West Street,stop_code: Wjz6_vY, lat: -35.2004651, lng: 149.1448522} - - { name: The Valley Avenue,stop_code: Wjz7Oal, lat: -35.1873286, lng: 149.1301603} - - { name: Gungahlin Drive,stop_code: Wjz7Fmf, lat: -35.1899217, lng: 149.1203537} - - { name: Freeling Crescent,stop_code: Wjz7xO6, lat: -35.1928051, lng: 149.1147348} - - { name: Kosciuszko Avenue,stop_code: Wjz7E3Z, lat: -35.1976337, lng: 149.1187656} - - { name: Kosciuszko Avenue,stop_code: Wjz7EJ7, lat: -35.1960839, lng: 149.1244553} - - { name: Hoskins Street,stop_code: Wjz6RQW, lat: -35.2136848, lng: 149.1379368} - - { name: Hoskins Street,stop_code: Wjz6QTd, lat: -35.2168483, lng: 149.1369095} - - { name: Sandford Street,stop_code: Wjz6Yaq, lat: -35.2205928, lng: 149.1414139} - - { name: Flemington Road,stop_code: Wjz6Wse, lat: -35.2298796, lng: 149.1438091} - - { name: Federal Highway,stop_code: Wjze3Fa, lat: -35.2267416, lng: 149.1575876} - - { name: Aspinall Street,stop_code: Wjzeaq_, lat: -35.2311306, lng: 149.1668636} - - { name: Antill Street,stop_code: Wjze0VY, lat: -35.2430274, lng: 149.1613003} - - { name: Knox Street,stop_code: Wjze1hB, lat: -35.2374923, lng: 149.1539669} - - { name: Molesworth Street,stop_code: Wjze17N, lat: -35.2336919, lng: 149.1515898} - - { name: Phillip Avenue,stop_code: Wjz6UQw, lat: -35.2413339, lng: 149.1484036} - - { name: Melba Street,stop_code: Wjz5_mg, lat: -35.2454644, lng: 149.1425874} - - { name: Antill Street,stop_code: Wjz5_O4, lat: -35.24786, lng: 149.147645} - - { name: Antill Street,stop_code: Wjzd7LX, lat: -35.2445144, lng: 149.1586198} - - { name: Grayson Street,stop_code: WjzdeeQ, lat: -35.2506237, lng: 149.1639253} - - { name: Stott Street,stop_code: Wjzd6Cq, lat: -35.2507889, lng: 149.1563997} - - { name: Hannan Crescent,stop_code: Wjzd68O, lat: -35.254952, lng: 149.1528797} - - { name: Officer Crescent,stop_code: Wjz5ZZQ, lat: -35.2567691, lng: 149.1500474} - - { name: Officer Crescent,stop_code: Wjz5ZO1, lat: -35.2591479, lng: 149.1477412} - - { name: Cowper Street,stop_code: Wjz5-5y, lat: -35.2514497, lng: 149.1400942} - - { name: Morphett Street,stop_code: Wjz5SWN, lat: -35.2535974, lng: 149.1390827} - - { name: Dooring Street,stop_code: Wjz5Z5c, lat: -35.2568022, lng: 149.1396491} - - { name: Majura Avenue,stop_code: Wjz5Za5, lat: -35.2588175, lng: 149.1409439} - - { name: Cowper Street,stop_code: Wjz5YfD, lat: -35.2606676, lng: 149.1416317} - - { name: Herbert Crescent,stop_code: Wjz5YKO, lat: -35.2618095, lng: 149.1473796} - - { name: Wakefield Gardens,stop_code: Wjz5YAK, lat: -35.2627902, lng: 149.1458623} - - { name: Campbell Street,stop_code: Wjz5Yq4, lat: -35.2643388, lng: 149.1435864} - - { name: Campbell Street,stop_code: Wjz5XnQ, lat: -35.2664452, lng: 149.1432384} - - { name: Leslie Street,stop_code: Wjz5XrS, lat: -35.2689744, lng: 149.1446925} - - { name: Campbell Street,stop_code: Wjz5XwW, lat: -35.2714003, lng: 149.1461465} - - { name: Gooreen Street,stop_code: Wjz5W3H, lat: -35.2747063, lng: 149.1403907} - - { name: Gooreen Street,stop_code: Wjz5W8l, lat: -35.276623, lng: 149.1411209} - - { name: Cox Street,stop_code: Wjz5Ycz, lat: -35.2631, lng: 149.1415634} - - { name: Foveaux Street,stop_code: Wjz5Y1_, lat: -35.2648034, lng: 149.1406151} - - { name: Limestone Avenue,stop_code: Wjz5QUd, lat: -35.2656089, lng: 149.1383392} - - { name: Ipima Street,stop_code: Wjz5PLJ, lat: -35.2663315, lng: 149.136253} - - { name: Ijong Street,stop_code: Wjz5PBC, lat: -35.2675907, lng: 149.1347357} - - { name: Torrens Street,stop_code: Wjz5Pwn, lat: -35.2709457, lng: 149.1344196} - - { name: Fawkner Street,stop_code: Wjz5OLh, lat: -35.2721844, lng: 149.135684} - - { name: Doonkuna Street,stop_code: Wjz5OOo, lat: -35.2757106, lng: 149.1372297} - - { name: Ainslie Avenue,stop_code: Wjz5NHD, lat: -35.2798744, lng: 149.1361266} - - { name: Limestone Avenue,stop_code: Wjz5VFA, lat: -35.2815441, lng: 149.146984} - - { name: Fairbairn Avenue,stop_code: Wjzd0CK, lat: -35.283446, lng: 149.156771} - - { name: White Crescent,stop_code: Wjzc7nq, lat: -35.2885152, lng: 149.1537353} - - { name: Anzac Parade,stop_code: Wjz5Urj, lat: -35.285706, lng: 149.144029} - - { name: Holmes Crescent,stop_code: Wjzc7Ay, lat: -35.2905765, lng: 149.1566757} - - { name: Borella Street,stop_code: Wjz4_Oj, lat: -35.2918933, lng: 149.1481428} - - { name: Parkes Way,stop_code: Wjz4T-X, lat: -35.2891325, lng: 149.1393476} - - { name: Miles Road,stop_code: WjzceHt, lat: -35.2965216, lng: 149.168833} - - { name: Vowels Road,stop_code: Wjzcdsn, lat: -35.3011446, lng: 149.1659502} - - { name: Morshead Drive,stop_code: Wjzcd2U, lat: -35.3031671, lng: 149.1626628} - - { name: Eyre Street,stop_code: Wjz4WnH, lat: -35.3159201, lng: 149.1430396} - - { name: Canberra Avenue,stop_code: Wjz4Ofi, lat: -35.3160439, lng: 149.1301934} - - { name: Flinders Way,stop_code: Wjz4EG2, lat: -35.3304213, lng: 149.1244262} - - { name: Scarborough Street,stop_code: Wjz3KLn, lat: -35.3376003, lng: 149.1247297} - - { name: Captain Cook Crescent,stop_code: Wjz4NWF, lat: -35.3250038, lng: 149.138898} - - { name: Carnegie Cresent,stop_code: Wjz3_sf, lat: -35.3341586, lng: 149.1437982} - - { name: McKinlay Street,stop_code: Wjz4UIv, lat: -35.328635, lng: 149.1467867} - - { name: Yamba Place,stop_code: Wjz4UYU, lat: -35.3292631, lng: 149.1503427} - - { name: Mugga Way,stop_code: Wjz3KB0, lat: -35.3395291, lng: 149.1229469} - - { name: Mugga Way,stop_code: Wjz3JQO, lat: -35.3455626, lng: 149.1268033} - - { name: La Perouse Street,stop_code: Wjz3Slx, lat: -35.3394651, lng: 149.131936} - - { name: Caley Crescent,stop_code: Wjz3TJe, lat: -35.3335378, lng: 149.135468} - - { name: Goyder Street,stop_code: Wjzb79X, lat: -35.3365565, lng: 149.1529783} - - { name: Sir Harold Raggatt Drive,stop_code: Wjzb6EM, lat: -35.342941, lng: 149.1583643} - - { name: Toolambi Street,stop_code: Wjzb7Cp, lat: -35.333286, lng: 149.156475} - - { name: Narrabundah Lane,stop_code: Wjz3YW3, lat: -35.3523419, lng: 149.1490844} - - { name: Newcastle Street,stop_code: Wjzc9PB, lat: -35.3239975, lng: 149.1704393} - - { name: Tennant Street,stop_code: Wjzcp0F, lat: -35.3263698, lng: 149.1843675} - - { name: Tennant Street,stop_code: Wjzcg-_, lat: -35.3272591, lng: 149.1832438} - - { name: Albany Street,stop_code: WjzcgSm, lat: -35.3273624, lng: 149.1809901} - - { name: Yamba Drive,stop_code: Wjz3rML, lat: -35.3588381, lng: 149.1045644} - - { name: Ellwood Crescent,stop_code: Wjz3y9z, lat: -35.3640453, lng: 149.1086104} - - { name: Julia Flynn Avenue,stop_code: Wjz3xi3, lat: -35.3688397, lng: 149.1093058} - - { name: Yamba Drive,stop_code: Wjz2DK6, lat: -35.3767783, lng: 149.1134151} - - { name: McAlpine Place,stop_code: Wjz2Dgb, lat: -35.381175, lng: 149.10938} - - { name: Pye Place,stop_code: Wjz2vzR, lat: -35.3789646, lng: 149.1019944} - - { name: Custance Street,stop_code: Wjz3ops, lat: -35.3749061, lng: 149.1001427} - - { name: Athllon Drive,stop_code: Wjz3hUs, lat: -35.370077, lng: 149.0946389} - - { name: Ward Place,stop_code: Wjz3gUQ, lat: -35.3755566, lng: 149.0951557} - - { name: Goode Street,stop_code: Wjz2f_R, lat: -35.3761632, lng: 149.0842481} - - { name: Hawker Street,stop_code: Wjz3g7D, lat: -35.3705636, lng: 149.085208} - - { name: Hyland Place,stop_code: Wjz2c-r, lat: -35.3935292, lng: 149.0837652} - - { name: Beaver Place,stop_code: Wjz2civ, lat: -35.3959622, lng: 149.0767882} - - { name: Athllon Drive,stop_code: Wjz2mGO, lat: -35.3853996, lng: 149.0925014} - - { name: Sulwood Drive,stop_code: Wjz2ttB, lat: -35.3885662, lng: 149.1004148} - - { name: Sternberg Crescent,stop_code: Wjz2rN0, lat: -35.4027536, lng: 149.1038057} - - { name: Sternberg Crescent,stop_code: Wjz2jPU, lat: -35.401368, lng: 149.0939538} - - { name: Harricks Crescent,stop_code: Wjz2iwA, lat: -35.4085873, lng: 149.0906768} - - { name: Leach Street,stop_code: Wjz2pmy, lat: -35.4100705, lng: 149.0990011} - - { name: Burston Place,stop_code: Wjz2xq1, lat: -35.4129044, lng: 149.1106334} - - { name: Garrick Street,stop_code: Wjz2yQZ, lat: -35.4057423, lng: 149.116007} - - { name: Larcombe Crescent,stop_code: Wjz2G9R, lat: -35.4077654, lng: 149.1199409} - - { name: Halley Street,stop_code: Wjz2N0r, lat: -35.4141264, lng: 149.128949} - - { name: Proctor Street,stop_code: Wjz2EB6, lat: -35.4159442, lng: 149.1230876} - - { name: Webber Crescent,stop_code: Wjz1BFG, lat: -35.4354872, lng: 149.1142337} - - { name: Tweddle Place,stop_code: Wjz1CS7, lat: -35.4261448, lng: 149.1147427} - - { name: Wentcher Place,stop_code: Wjz1Dap, lat: -35.4239297, lng: 149.1084839} - - { name: Laker Crescent,stop_code: Wjz1Dlj, lat: -35.4217144, lng: 149.1096219} - - { name: Kiddle Crescent,stop_code: Wjz1C75, lat: -35.4256297, lng: 149.1065242} - - { name: Clift Crescent,stop_code: Wjz1vMs, lat: -35.4250115, lng: 149.1042483} - - { name: Ashley Drive,stop_code: Wjz1vJN, lat: -35.4218175, lng: 149.1034264} - - { name: Isabella Drive,stop_code: Wjz2w0e, lat: -35.4193446, lng: 149.106777} - - { name: Barraclough Crescent,stop_code: Wjz2osQ, lat: -35.4167685, lng: 149.1006448} - - { name: Kneeshaw Street,stop_code: Wjz2o8V, lat: -35.4197567, lng: 149.0980528} - - { name: Isabella Drive,stop_code: Wjz1v6h, lat: -35.4211477, lng: 149.0958401} - - { name: Kerkeri Close,stop_code: Wjz1v2R, lat: -35.423569, lng: 149.0965355} - - { name: Oakwood Place,stop_code: Wjz1viP, lat: -35.4237236, lng: 149.0993804} - - { name: Johnson Drive,stop_code: Wjz1BrK, lat: -35.4337687, lng: 149.1114553} - - { name: Costello Circuit,stop_code: Wjz1B9T, lat: -35.4350564, lng: 149.1089897} - - { name: Johnson Drive,stop_code: Wjz1tYG, lat: -35.4334596, lng: 149.1060816} - - { name: Johnson Drive,stop_code: Wjz1tR7, lat: -35.4323264, lng: 149.1038057} - - { name: Carter Crescent,stop_code: Wjz1tE0, lat: -35.4363442, lng: 149.1024781} - - { name: Outtrim Avenue,stop_code: Wjz1tok, lat: -35.4359836, lng: 149.0999494} - - { name: Johnson Drive,stop_code: Wjz1tbe, lat: -35.4337687, lng: 149.0971677} - - { name: Marengo Place,stop_code: Wjz1lQS, lat: -35.4330991, lng: 149.0938171} - - { name: Heddon Place,stop_code: Wjz1lyA, lat: -35.4346444, lng: 149.0907826} - - { name: Pimpampa Close,stop_code: Wjz1lB8, lat: -35.4329445, lng: 149.0902136} - - { name: Abercrombie Circuit,stop_code: Wjz0nS3, lat: -35.4649778, lng: 149.0928056} - - { name: Youl Court,stop_code: Wjz0uuZ, lat: -35.4702296, lng: 149.1008976} - - { name: Milligan Street,stop_code: Wjz0CcV, lat: -35.4719802, lng: 149.1091794} - - { name: Galbraith Close,stop_code: Wjz0B6Y, lat: -35.4758415, lng: 149.1077253} - - { name: Olive Pink Crescent,stop_code: Wjz0tB4, lat: -35.4765623, lng: 149.1010241} - - { name: Bellchambers Crescent,stop_code: Wjz0mMT, lat: -35.474194, lng: 149.0937539} - - { name: Olive Pink Crescent,stop_code: Wjz0kYJ, lat: -35.482637, lng: 149.0950815} - - { name: Tharwa Drive,stop_code: Wjz0lhu, lat: -35.4790849, lng: 149.0878745} - - { name: Robert Lewis Court,stop_code: Wjz0eRx, lat: -35.4713109, lng: 149.0824376} - - { name: Ferry Place,stop_code: Wjz1gaC, lat: -35.4619398, lng: 149.0865469} - - { name: Charles Place,stop_code: Wjz19V7, lat: -35.4570479, lng: 149.0831962} - - { name: Gaylard Place,stop_code: Wjz1i2p, lat: -35.4513833, lng: 149.0850928} - - { name: Clare Dennis Avenue,stop_code: Wjz1jf0, lat: -35.442525, lng: 149.0859147} - - { name: Northbourne Avenue,stop_code: Wjz5RvC, lat: -35.2552151, lng: 149.1332875} - - { name: Northbourne Avenue,stop_code: Wjz5Oci, lat: -35.2741724, lng: 149.1302168} - - { name: Northbourne Avenue,stop_code: Wjz5N4m, lat: -35.279266, lng: 149.1287817} - - { name: Northbourne Avenue,stop_code: Wjz5PdJ, lat: -35.2676612, lng: 149.1306865} - - { name: Northbourne Avenue,stop_code: Wjz5Qmu, lat: -35.2613932, lng: 149.1316889} - - { name: Northbourne Avenue,stop_code: Wjz5Sux, lat: -35.2509191, lng: 149.1333899} - - { name: Cameron Avenue,stop_code: Wjz60QI, lat: -35.2410106, lng: 149.0717141} - - { name: Cameron Avenue,stop_code: Wjz60Y4, lat: -35.2410195, lng: 149.0722506} - - { name: Cameron Avenue,stop_code: Wjz60QW, lat: -35.241186, lng: 149.0720789} - - { name: Cameron Avenue,stop_code: Wjz60Qa, lat: -35.2411772, lng: 149.0709792} - - { name: Cameron Avenue,stop_code: Wjz60Qc, lat: -35.2410063, lng: 149.0710758} - - { name: Wilari Place,stop_code: Wjz6u3h, lat: -35.2089622, lng: 149.095889} - - { name: Mirrabucca Crescent,stop_code: Wjz6u32, lat: -35.2088899, lng: 149.09552} - - { name: Buriga Street,stop_code: Wjz6mOx, lat: -35.20966, lng: 149.0935299} - - { name: Georgina Crescent,stop_code: Wjz6sHv, lat: -35.21947, lng: 149.10295} - - { name: Staaten Crescent,stop_code: Wjz6sZ1, lat: -35.21859, lng: 149.10511} - - { name: Chuculba Crescent,stop_code: Wjz6uhX, lat: -35.2101981, lng: 149.0994957} - - { name: Antares Crescent,stop_code: Wjz6uwF, lat: -35.2110747, lng: 149.1018989} - - { name: Snodgrass Crescent,stop_code: WjrWYHH, lat: -35.3956133, lng: 149.0592665} - - { name: O'Halloran Circuit,stop_code: WjrWYDE, lat: -35.3931009, lng: 149.0580053} - - { name: Snodgrass Crescent,stop_code: WjrWYHE, lat: -35.3958129, lng: 149.0592983} - - { name: Chuculba Crescent,stop_code: Wjz6sdP, lat: -35.21844, lng: 149.0979199} - - { name: Canopus Crescent,stop_code: Wjz6t3F, lat: -35.21451, lng: 149.09646} - - { name: Purdie Street,stop_code: Wjz5nwb, lat: -35.2493711, lng: 149.0901523} - - { name: Haydon Drive,stop_code: Wjz5mbS, lat: -35.2525252, lng: 149.0869819} - - { name: Bindubi Street,stop_code: Wjz5e0m, lat: -35.2546115, lng: 149.0739747} - - { name: Morphy Place,stop_code: Wjz55V-, lat: -35.2594169, lng: 149.0733684} - - { name: Gwydir Square,stop_code: Wjz6pLk, lat: -35.2334807, lng: 149.1028323} - - { name: William Slim Drive,stop_code: Wjz6mip, lat: -35.2096535, lng: 149.0878294} - - { name: Ellenborough Street,stop_code: Wjz6yzH, lat: -35.2308034, lng: 149.1129136} - - { name: Moruya Circuit,stop_code: Wjz6Apy, lat: -35.2213073, lng: 149.1113204} - - { name: Aikman Drive,stop_code: Wjz69vO, lat: -35.2336108, lng: 149.0786617} - - { name: Baldwin Drive,stop_code: Wjz6iN7, lat: -35.2318153, lng: 149.0928498} - - { name: Baldwin Drive,stop_code: Wjz6iNm, lat: -35.2318811, lng: 149.0930643} - - { name: Anketell Street,stop_code: Wjz213q, lat: -35.4121336, lng: 149.063177} - - { name: Athllon Drive,stop_code: Wjz3gK-, lat: -35.3712753, lng: 149.0926679} - - { name: Athllon Drive,stop_code: Wjz3kAx, lat: -35.3511369, lng: 149.0906806} - - { name: Athllon Drive,stop_code: Wjz3iFK, lat: -35.3637163, lng: 149.0922629} - - { name: Maribyrnong Avenue,stop_code: Wjz6qe4, lat: -35.2286658, lng: 149.0969557} - - { name: Ashburton Circuit,stop_code: Wjz6zAP, lat: -35.2246234, lng: 149.113116} - - { name: Daley Road,stop_code: Wjz5yYV, lat: -35.2742188, lng: 149.1173067} - - { name: Bradley Street,stop_code: Wjz3ldS, lat: -35.3445222, lng: 149.0870435} - - { name: Bradley Street,stop_code: Wjz3ldT, lat: -35.3444271, lng: 149.0869631} - - { name: Bradley Street,stop_code: Wjz3ldJ, lat: -35.344566, lng: 149.086774} - - { name: Callam Street,stop_code: Wjz3llf, lat: -35.34445, lng: 149.0875371} - - { name: Athllon Drive,stop_code: Wjz3kyX, lat: -35.3523555, lng: 149.0913002} - - { name: Pitman,stop_code: Wjz20nf, lat: -35.4144924, lng: 149.0655423} - - { name: Eileen Good Street,stop_code: Wjz218U, lat: -35.4143897, lng: 149.0652364} - - { name: Cohen Street,stop_code: Wjr-USo, lat: -35.2400027, lng: 149.0603149} - - { name: Spinifex Street,stop_code: Wjzc24u, lat: -35.317722, lng: 149.1510115} - - { name: The Causeway,stop_code: Wjz4WZo, lat: -35.3175809, lng: 149.1496027} - - { name: Parbery Street,stop_code: Wjz4WY7, lat: -35.3176372, lng: 149.1491419} - - { name: Perry Drive,stop_code: WjrXPbu, lat: -35.3568919, lng: 149.0424224} - - { name: Darwinia Terrace,stop_code: WjrXI5s, lat: -35.3501807, lng: 149.0301549} - - { name: Darwinia Terrace,stop_code: WjrXIqk, lat: -35.3522608, lng: 149.0341457} - - { name: Perry Drive,stop_code: WjrXOn_, lat: -35.359526, lng: 149.0445552} - - { name: Streeton Drive,stop_code: WjrXPR4, lat: -35.3556673, lng: 149.048857} - - { name: Fremantle Drive,stop_code: WjrXQOh, lat: -35.3524926, lng: 149.049231} - - { name: Bunbury Street,stop_code: WjrXRMq, lat: -35.3483271, lng: 149.0492963} - - { name: Fremantle Drive,stop_code: WjrXRzE, lat: -35.3464066, lng: 149.0469632} - - { name: Parkinson Street,stop_code: WjrX-0-, lat: -35.3424839, lng: 149.052828} - - { name: Backler Place,stop_code: WjrXZv5, lat: -35.3432647, lng: 149.0558034} - - { name: Gilmore Crescent,stop_code: Wjz3BfO, lat: -35.3434784, lng: 149.1088951} - - { name: Edinburgh Avenue,stop_code: Wjz5EKJ, lat: -35.28346, lng: 149.1252} + - { name: Cowper Street,stop_code: Wjz5SWN, lat: -35.2535974, lng: 149.1390827, zone_id: Ainslie;Dickson;Lyneham;Unclassified ACT; } + - { name: Hurtle Avenue,stop_code: Wjz1dX2, lat: -35.4341379, lng: 149.0831762, zone_id: Bonython;Isabella Plains;Unclassified ACT; } + - { name: Learmonth Drive,stop_code: Wjz230G, lat: -35.4032475, lng: 149.0634951, zone_id: Greenway;Kambah;Unclassified ACT; } + - { name: Copland Drive,stop_code: Wjz67xQ, lat: -35.2046532, lng: 149.0691406, zone_id: Bonner;Evatt;Spence;Unclassified ACT; } + - { name: King Edward Terrace,stop_code: Wjz4S1U, lat: -35.2983385, lng: 149.1296979, zone_id: Parkes;Unclassified ACT; } + - { name: Baddeley Crescent,stop_code: Wjz67nz, lat: -35.2006201, lng: 149.0659965, zone_id: Bonner;Evatt;Spence;Unclassified ACT; } + - { name: Theodore Street,stop_code: Wjz3fCx, lat: -35.333256, lng: 149.0798309, zone_id: Curtin;Lyons;Unclassified ACT; } + - { name: Hopetoun Circuit,stop_code: Wjz4A7o, lat: -35.3052441, lng: 149.107042, zone_id: Yarralumla;Unclassified ACT; } + - { name: Langton Crescent,stop_code: Wjz4KVc, lat: -35.2979705, lng: 149.1272674, zone_id: Acton;Parkes;Unclassified ACT; } + - { name: Schlich Street,stop_code: Wjz4tpE, lat: -35.3038329, lng: 149.1005569, zone_id: Yarralumla;Unclassified ACT; } + - { name: Hopetoun Circuit,stop_code: Wjz4A2c, lat: -35.3082791, lng: 149.1066534, zone_id: Yarralumla;Unclassified ACT; } + - { name: Lawrence Wackett Crescent,stop_code: Wjz1HEb, lat: -35.4471149, lng: 149.1245306, zone_id: Theodore;Unclassified ACT; } + - { name: Chippindall Circuit,stop_code: Wjz1xWZ, lat: -35.4565002, lng: 149.1174205, zone_id: Conder;Theodore;Unclassified ACT; } + - { name: Clift Crescent,stop_code: Wjz1CdY, lat: -35.4270927, lng: 149.1090734, zone_id: Richardson;Unclassified ACT; } + - { name: Goyder Street,stop_code: Wjzb705, lat: -35.3370433, lng: 149.1505109, zone_id: Fyshwick;Narrabundah;Symonston;Unclassified ACT; } + - { name: Kingsford Smith Drive,stop_code: Wjr_UPA, lat: -35.1977713, lng: 149.0605874, zone_id: Spence;Unclassified ACT; } + - { name: Clarey Crescent,stop_code: Wjz707Z, lat: -35.1948745, lng: 149.0637273, zone_id: Bonner;Spence;Unclassified ACT; } + - { name: Owen Dixon Drive,stop_code: Wjz70IY, lat: -35.1970964, lng: 149.0706179, zone_id: Bonner;Spence;Unclassified ACT; } + - { name: Copland Drive,stop_code: Wjz67BD, lat: -35.2015929, lng: 149.0686908, zone_id: Bonner;Evatt;Spence;Unclassified ACT; } + - { name: Bimbimbie Street,stop_code: Wjz68Y0, lat: -35.2413091, lng: 149.0832098, zone_id: Bruce;Unclassified ACT; } + - { name: Bimbimbie Street,stop_code: Wjz68Ip, lat: -35.2412881, lng: 149.0809439, zone_id: Bruce;Unclassified ACT; } + - { name: Bandjalong Crescent,stop_code: Wjz5dQt, lat: -35.2573605, lng: 149.0822652, zone_id: Acton;Aranda;Bruce;Unclassified ACT; } + - { name: Cooyong Street,stop_code: Wjz5NAQ, lat: -35.2794375, lng: 149.1349942, zone_id: City;Unclassified ACT; } + - { name: Kambah pool Road,stop_code: WjrXMN9, lat: -35.3751239, lng: 149.0489789, zone_id: Kambah;Unclassified ACT; } + - { name: Hodgson Crescent,stop_code: Wjz3i6e, lat: -35.3603188, lng: 149.084779, zone_id: Pearce;Unclassified ACT; } + - { name: Melrose Drive,stop_code: Wjz3k1J, lat: -35.3528521, lng: 149.0854118, zone_id: Chifley;Phillip;Unclassified ACT; } + - { name: Amy Ackman Street,stop_code: Wjz7ZaP, lat: -35.1710474, lng: 149.141884, zone_id: Bonner;Unclassified ACT; } + - { name: Sainsbury Street,stop_code: Wjz2t4u, lat: -35.389126, lng: 149.096025, zone_id: Wanniassa;Unclassified ACT; } + - { name: Cowper Street,stop_code: Wjz5Za5, lat: -35.2588175, lng: 149.1409439, zone_id: Ainslie;Dickson;Lyneham;Unclassified ACT; } + - { name: Gundaroo Drive,stop_code: Wjz7xp9, lat: -35.193896, lng: 149.1108506, zone_id: Bonner;Franklin;Nicholls;Palmerston;Unclassified ACT; } + - { name: Constitution Avenue,stop_code: Wjz5MsT, lat: -35.2846782, lng: 149.133671, zone_id: City;Unclassified ACT; } + - { name: Hindmarsh Drive,stop_code: WjrXBSS, lat: -35.3438051, lng: 149.0278253, zone_id: Duffy;Unclassified ACT; } + - { name: Northbourne Avenue,stop_code: Wjz5SrO, lat: -35.2528485, lng: 149.1336705, zone_id: Dickson;Lyneham;Unclassified ACT; } + - { name: Northbourne Avenue,stop_code: Wjz5Pl0, lat: -35.2681201, lng: 149.1312, zone_id: Braddon;Turner;Unclassified ACT; } + - { name: Northbourne Avenue,stop_code: Wjz5N5h, lat: -35.2790396, lng: 149.1288222, zone_id: City;Unclassified ACT; } + - { name: Northbourne Avenue,stop_code: Wjz5RkN, lat: -35.2577065, lng: 149.1322899, zone_id: Lyneham;Unclassified ACT; } + - { name: Kitchener Street,stop_code: Wjz3uK7, lat: -35.3382669, lng: 149.1024969, zone_id: Garran;Hughes;Red Hill;Unclassified ACT; } + - { name: Baldwin Drive,stop_code: Wjz6keB, lat: -35.2175697, lng: 149.0866478, zone_id: McKellar;Bonner;Giralang;Lawson;Unclassified ACT; } + - { name: O'Loghlen Street,stop_code: Wjr-IGJ, lat: -35.2203467, lng: 149.0373003, zone_id: Florey;Latham;Unclassified ACT; } + - { name: White Crescent,stop_code: Wjzd0oD, lat: -35.2874406, lng: 149.1552177, zone_id: Campbell;Unclassified ACT; } + - { name: Parliament Drive,stop_code: Wjz4INj, lat: -35.3091118, lng: 149.1261312, zone_id: Parkes;Yarralumla;Unclassified ACT; } + - { name: Holman Street,stop_code: Wjz3fO2, lat: -35.3359729, lng: 149.0817737, zone_id: Curtin;Lyons;Unclassified ACT; } + - { name: Castleton Crescent,stop_code: Wjz2wnQ, lat: -35.4147625, lng: 149.1103909, zone_id: Fadden;Gowrie;Unclassified ACT; } + - { name: Scantlebury Crescent,stop_code: Wjz1HOf, lat: -35.4453654, lng: 149.1258946, zone_id: Theodore;Unclassified ACT; } + - { name: Lawrence Wackett Crescent,stop_code: Wjz1GsO, lat: -35.4499519, lng: 149.1226442, zone_id: Calwell;Theodore;Unclassified ACT; } + - { name: Louis Loder Street,stop_code: Wjz1G32, lat: -35.4506139, lng: 149.1174495, zone_id: Calwell;Conder;Theodore;Unclassified ACT; } + - { name: Heagney Crescent,stop_code: Wjz1TgM, lat: -35.4253782, lng: 149.1323625, zone_id: Chisholm;Unclassified ACT; } + - { name: Baskerville Street,stop_code: Wjz1LBV, lat: -35.4218605, lng: 149.1241279, zone_id: Chisholm;Richardson;Unclassified ACT; } + - { name: O'Halloran Circuit,stop_code: WjrWYDO, lat: -35.3929049, lng: 149.058196, zone_id: Kambah;Unclassified ACT; } + - { name: Canopus Crescent,stop_code: Wjz6t9w, lat: -35.21597, lng: 149.09763, zone_id: Bonner;Franklin;Giralang;Kaleen;Unclassified ACT; } + - { name: Haydon Drive,stop_code: Wjz6hxB, lat: -35.2374959, lng: 149.0907853, zone_id: Bruce;Unclassified ACT; } + - { name: Baldwin Drive,stop_code: Wjz6rrI, lat: -35.2252509, lng: 149.1005016, zone_id: Bonner;Franklin;Kaleen;Lawson;Unclassified ACT; } + - { name: College Street,stop_code: Wjz681S, lat: -35.2428905, lng: 149.0745728, zone_id: Belconnen;Bruce;Unclassified ACT; } + - { name: Maribyrnong Avenue,stop_code: Wjz6y90, lat: -35.2324006, lng: 149.1079069, zone_id: Bruce;Kaleen;Unclassified ACT; } + - { name: Ellenborough Street,stop_code: Wjz6yzQ, lat: -35.2307289, lng: 149.1130906, zone_id: Bonner;Kaleen;Unclassified ACT; } + - { name: Aikman Drive,stop_code: Wjz69ht, lat: -35.2375061, lng: 149.0768646, zone_id: Belconnen;Bruce;Unclassified ACT; } + - { name: Boddington Crescent,stop_code: WjrWZA3, lat: -35.3893963, lng: 149.0571767, zone_id: Kambah;Unclassified ACT; } + - { name: Anketell Street,stop_code: Wjz213w, lat: -35.4123171, lng: 149.0633299, zone_id: Greenway;Unclassified ACT; } + - { name: Athllon Drive,stop_code: Wjz3gQn, lat: -35.3725942, lng: 149.0931105, zone_id: Farrer;Kambah;Torrens;Unclassified ACT; } + - { name: Athllon Drive,stop_code: Wjz3gMq, lat: -35.3757982, lng: 149.0932419, zone_id: Farrer;Kambah;Torrens;Unclassified ACT; } + - { name: Baldwin Drive,stop_code: Wjz6rhW, lat: -35.2267553, lng: 149.0994502, zone_id: Bonner;Kaleen;Lawson;Unclassified ACT; } + - { name: Liversidge Street,stop_code: Wjz5E4O, lat: -35.2851023, lng: 149.1186022, zone_id: Acton;Unclassified ACT; } + - { name: Bradley Street,stop_code: Wjz3ldj, lat: -35.3447574, lng: 149.0862912, zone_id: Phillip;Unclassified ACT; } + - { name: Pitman,stop_code: Wjz20nk, lat: -35.4147569, lng: 149.0657435, zone_id: Greenway;Unclassified ACT; } + - { name: Bradley Street,stop_code: Wjz3lm0, lat: -35.34438, lng: 149.0872661, zone_id: Phillip;Unclassified ACT; } + - { name: Callam Street,stop_code: Wjz3lmi, lat: -35.3442093, lng: 149.0876443, zone_id: Phillip;Unclassified ACT; } + - { name: Pitman,stop_code: Wjz21g2, lat: -35.414217, lng: 149.0653492, zone_id: Greenway;Unclassified ACT; } + - { name: Cohen Street,stop_code: Wjr-USa, lat: -35.2398454, lng: 149.0600442, zone_id: Belconnen;Unclassified ACT; } + - { name: Darwinia Terrace,stop_code: WjrXBWn, lat: -35.3465295, lng: 149.0286032, zone_id: Chapman;Unclassified ACT; } + - { name: Perry Drive,stop_code: WjrXPbD, lat: -35.356823, lng: 149.0426424, zone_id: Chapman;Unclassified ACT; } + - { name: Darwinia Terrace,stop_code: WjrXIbK, lat: -35.3514081, lng: 149.0319332, zone_id: Chapman;Rivett;Unclassified ACT; } + - { name: Darwinia Terrace,stop_code: WjrXI5u, lat: -35.3499839, lng: 149.0301495, zone_id: Chapman;Rivett;Unclassified ACT; } + - { name: Namatjira Drive,stop_code: WjrXPFn, lat: -35.358206, lng: 149.0478792, zone_id: Chapman;Fisher;Unclassified ACT; } + - { name: Fremantle Drive,stop_code: WjrXQO9, lat: -35.352521, lng: 149.0490119, zone_id: Chapman;Stirling;Unclassified ACT; } + - { name: Parkinson Street,stop_code: WjrX-90, lat: -35.3423165, lng: 149.0529937, zone_id: Holder;Weston;Unclassified ACT; } + - { name: Parkinson Street,stop_code: WjrXZv3, lat: -35.3434037, lng: 149.0557375, zone_id: Stirling;Weston;Unclassified ACT; } + - { name: Hopetoun Circuit,stop_code: Wjz4z9H, lat: -35.3145885, lng: 149.1087065, zone_id: Deakin;Yarralumla;Unclassified ACT; } + - { name: Longmore Crescent,stop_code: Wjz2lAS, lat: -35.389126, lng: 149.0910254, zone_id: Kambah;Wanniassa;Unclassified ACT; } + - { name: Yiman Street,stop_code: WjrXYVm, lat: -35.3528022, lng: 149.0616284, zone_id: Waramanga;Unclassified ACT; } + - { name: Gladstone Street,stop_code: Wjzch4h, lat: -35.3236753, lng: 149.1727255, zone_id: Fyshwick;Pialligo;Unclassified ACT; } + - { name: Federal Highway,stop_code: Wjze3Fa, lat: -35.2267416, lng: 149.1575876, zone_id: Bonner;Watson;Unclassified ACT; } + - { name: Anthony Rolfe Avenue,stop_code: Wjzf24l, lat: -35.1860007, lng: 149.1507571, zone_id: Bonner;Gungahlin;Unclassified ACT; } + - { name: Badimara Street,stop_code: WjrXXNb, lat: -35.3584898, lng: 149.060019, zone_id: Fisher;Waramanga;Unclassified ACT; } + - { name: Denison Street,stop_code: Wjz4hPC, lat: -35.323921, lng: 149.0935136, zone_id: Deakin;Unclassified ACT; } + - { name: Groom Street,stop_code: Wjz4gou, lat: -35.3314972, lng: 149.0892541, zone_id: Curtin;Hughes;Unclassified ACT; } + - { name: Shiels Place,stop_code: Wjz4arc, lat: -35.3185933, lng: 149.0779149, zone_id: Curtin;Unclassified ACT; } + - { name: Mair Place,stop_code: Wjz48dZ, lat: -35.3281016, lng: 149.0761465, zone_id: Curtin;Unclassified ACT; } + - { name: Ratcliffe Crescent,stop_code: Wjr-Ws2, lat: -35.230167, lng: 149.0557628, zone_id: Florey;Unclassified ACT; } + - { name: Carruthers Street,stop_code: Wjz48qI, lat: -35.3302472, lng: 149.0785498, zone_id: Curtin;Unclassified ACT; } + - { name: Burnie Street,stop_code: Wjz3d3K, lat: -35.3459087, lng: 149.0743512, zone_id: Lyons;Unclassified ACT; } + - { name: Erldunda Circuit,stop_code: WjrZKZn, lat: -35.2510294, lng: 149.0396391, zone_id: Hawker;Unclassified ACT; } + - { name: Namatjira Drive,stop_code: WjrX-sE, lat: -35.3402511, lng: 149.0565615, zone_id: Weston;Unclassified ACT; } + - { name: Newman Morris Circuit,stop_code: Wjz29Ya, lat: -35.4114741, lng: 149.0833189, zone_id: Monash;Oxley;Unclassified ACT; } + - { name: Cusack Place,stop_code: Wjr_Ow3, lat: -35.1889085, lng: 149.0461463, zone_id: Fraser;Unclassified ACT; } + - { name: Southern Cross Drive,stop_code: Wjr-s5D, lat: -35.2180783, lng: 149.0083939, zone_id: Holt;Macgregor;Unclassified ACT; } + - { name: Longmore Crescent,stop_code: Wjz2sPc, lat: -35.3954933, lng: 149.1039, zone_id: Wanniassa;Unclassified ACT; } + - { name: Wiluna Street,stop_code: Wjzc8l0, lat: -35.3285713, lng: 149.1642018, zone_id: Fyshwick;Unclassified ACT; } + - { name: Daley Crescent,stop_code: Wjr_Nwy, lat: -35.1944531, lng: 149.0468698, zone_id: Fraser;Unclassified ACT; } + - { name: Norriss Street,stop_code: Wjz2E43, lat: -35.4169003, lng: 149.1175471, zone_id: Chisholm;Gowrie;Richardson;Unclassified ACT; } + - { name: Goyder Street,stop_code: Wjz3-aW, lat: -35.3414521, lng: 149.1420263, zone_id: Narrabundah;Symonston;Unclassified ACT; } + - { name: Bingley Crescent,stop_code: Wjr_Vbj, lat: -35.1923583, lng: 149.0533723, zone_id: Fraser;Unclassified ACT; } + - { name: Jarrahdale Street,stop_code: WjrXWQ8, lat: -35.3621767, lng: 149.0600261, zone_id: Fisher;Unclassified ACT; } + - { name: Adinda Street,stop_code: WjrXYL4, lat: -35.3488355, lng: 149.0584095, zone_id: Waramanga;Unclassified ACT; } + - { name: Bangalay Crescent,stop_code: WjrXQ65, lat: -35.349419, lng: 149.040696, zone_id: Chapman;Rivett;Unclassified ACT; } + - { name: Tantangara Street,stop_code: WjrXKBE, lat: -35.3395611, lng: 149.0360582, zone_id: Duffy;Unclassified ACT; } + - { name: Dixon Drive,stop_code: WjrYMHm, lat: -35.3294538, lng: 149.0477466, zone_id: Holder;Unclassified ACT; } + - { name: Blackwood Terrace,stop_code: WjrXTIp, lat: -35.3346742, lng: 149.0480789, zone_id: Holder;Unclassified ACT; } + - { name: Bingley Crescent,stop_code: Wjr_V2c, lat: -35.192985, lng: 149.0517177, zone_id: Fraser;Unclassified ACT; } + - { name: Glenmaggie Street,stop_code: WjrXLgs, lat: -35.3371612, lng: 149.0328459, zone_id: Duffy;Unclassified ACT; } + - { name: McCay Place,stop_code: Wjz39PE, lat: -35.3683683, lng: 149.0827167, zone_id: Pearce;Torrens;Unclassified ACT; } + - { name: Dakota Drive,stop_code: Wjzcuw1, lat: -35.2989793, lng: 149.188937, zone_id: Pialligo;Unclassified ACT; } + - { name: Kerrigan Street,stop_code: Wjr_xLL, lat: -35.1892698, lng: 149.0264062, zone_id: Dunlop;Unclassified ACT; } + - { name: Shakespeare Crescent,stop_code: Wjr_FXR, lat: -35.1922038, lng: 149.0402464, zone_id: Fraser;Unclassified ACT; } + - { name: Bingley Crescent,stop_code: Wjr_Vt9, lat: -35.191134, lng: 149.055871, zone_id: Fraser;Unclassified ACT; } + - { name: Tillyard Drive,stop_code: Wjr-Tf_, lat: -35.2002734, lng: 149.0432168, zone_id: Charnwood;Flynn;Fraser;Unclassified ACT; } + - { name: Osburn Drive,stop_code: Wjr-tbm, lat: -35.2140927, lng: 149.0093105, zone_id: Macgregor;Unclassified ACT; } + - { name: Heagney Crescent,stop_code: Wjz1Lxi, lat: -35.4244718, lng: 149.1234372, zone_id: Chisholm;Richardson;Unclassified ACT; } + - { name: Kerrigan Street,stop_code: Wjr_o_j, lat: -35.1950629, lng: 149.0175978, zone_id: Dunlop;Unclassified ACT; } + - { name: Kerrigan Street,stop_code: Wjr_oJA, lat: -35.1964177, lng: 149.0152805, zone_id: Dunlop;Unclassified ACT; } + - { name: Archdall Street,stop_code: Wjr-vJY, lat: -35.2019113, lng: 149.0157184, zone_id: Dunlop;Macgregor;Unclassified ACT; } + - { name: Brownless Street,stop_code: Wjr-s_F, lat: -35.2172009, lng: 149.0180976, zone_id: Holt;Macgregor;Unclassified ACT; } + - { name: Krefft Street,stop_code: Wjr-Q8c, lat: -35.2217975, lng: 149.042121, zone_id: Florey;Latham;Unclassified ACT; } + - { name: Starke Street,stop_code: Wjr-sV3, lat: -35.2212162, lng: 149.0172455, zone_id: Holt;Unclassified ACT; } + - { name: Spofforth Street,stop_code: Wjr-jRn, lat: -35.2235756, lng: 149.0053113, zone_id: Holt;Unclassified ACT; } + - { name: Beaurepaire Crescent,stop_code: Wjr-rjD, lat: -35.2249706, lng: 149.0111289, zone_id: Holt;Unclassified ACT; } + - { name: Fullagar Crescent,stop_code: Wjr-ywh, lat: -35.2330631, lng: 149.0245222, zone_id: Higgins;Unclassified ACT; } + - { name: Starke Street,stop_code: Wjr-zWb, lat: -35.2259772, lng: 149.0283569, zone_id: Higgins;Holt;Latham;Unclassified ACT; } + - { name: Fullagar Crescent,stop_code: Wjr-xLK, lat: -35.2332476, lng: 149.0263679, zone_id: Higgins;Unclassified ACT; } + - { name: Tanumbirini Street,stop_code: Wjr-Ekp, lat: -35.2412759, lng: 149.032879, zone_id: Hawker;Higgins;Unclassified ACT; } + - { name: Deamer Crescent,stop_code: Wjz1Kwp, lat: -35.4308013, lng: 149.1235016, zone_id: Chisholm;Richardson;Unclassified ACT; } + - { name: Clift Crescent,stop_code: Wjz1K3c, lat: -35.4284584, lng: 149.1176436, zone_id: Chisholm;Richardson;Unclassified ACT; } + - { name: Tharwa Drive,stop_code: Wjz1rQ2, lat: -35.4444028, lng: 149.1038463, zone_id: Calwell;Conder;Unclassified ACT; } + - { name: Heagney Crescent,stop_code: Wjz1KTJ, lat: -35.4256696, lng: 149.1266129, zone_id: Chisholm;Richardson;Unclassified ACT; } + - { name: Hennessy Street,stop_code: Wjz57T_, lat: -35.2441569, lng: 149.0719751, zone_id: Belconnen;Macquarie;Unclassified ACT; } + - { name: Crisp Circuit,stop_code: Wjz68g-, lat: -35.2436119, lng: 149.0775571, zone_id: Belconnen;Bruce;Unclassified ACT; } + - { name: Federal Highway,stop_code: Wjze2va, lat: -35.2281576, lng: 149.1547483, zone_id: Bonner;Watson;Unclassified ACT; } + - { name: Moonlight Avenue,stop_code: Wjzf1mZ, lat: -35.1901394, lng: 149.154362, zone_id: Bonner;Gungahlin;Unclassified ACT; } + - { name: Bugden Avenue,stop_code: Wjz2wcE, lat: -35.4171364, lng: 149.1088245, zone_id: Gowrie;Richardson;Unclassified ACT; } + - { name: Krantzcke Circuit,stop_code: Wjz7pfP, lat: -35.189616, lng: 149.0978803, zone_id: Bonner;Nicholls;Unclassified ACT; } + - { name: Temperley Street,stop_code: Wjz7iG_, lat: -35.1872252, lng: 149.0926713, zone_id: Bonner;Nicholls;Unclassified ACT; } + - { name: McClelland Avenue,stop_code: Wjz7i7r, lat: -35.1841251, lng: 149.0850218, zone_id: Bonner;Nicholls;Unclassified ACT; } + - { name: Oldershaw Court,stop_code: Wjz7qvq, lat: -35.1841768, lng: 149.1001944, zone_id: Bonner;Ngunnawal;Nicholls;Unclassified ACT; } + - { name: Biddell Place,stop_code: Wjz7rMm, lat: -35.1831434, lng: 149.104114, zone_id: Bonner;Ngunnawal;Nicholls;Unclassified ACT; } + - { name: Gilmore Crescent,stop_code: Wjz3Bea, lat: -35.3442178, lng: 149.1080098, zone_id: Garran;Red Hill;Unclassified ACT; } + - { name: Fincham Crescent,stop_code: Wjz2bJV, lat: -35.399901, lng: 149.0816269, zone_id: Kambah;Wanniassa;Unclassified ACT; } + - { name: Anthony Rolfe Avenue,stop_code: Wjz7WRq, lat: -35.1855476, lng: 149.1482315, zone_id: Bonner;Gungahlin;Unclassified ACT; } + - { name: Southern Cross Drive,stop_code: Wjr-HhG, lat: -35.2267451, lng: 149.033272, zone_id: Higgins;Latham;Unclassified ACT; } + - { name: Davenport Street,stop_code: Wjz3eeL, lat: -35.3382488, lng: 149.0758602, zone_id: Curtin;Lyons;Unclassified ACT; } + - { name: Longmore Crescent,stop_code: Wjz2lSC, lat: -35.387814, lng: 149.093493, zone_id: Wanniassa;Unclassified ACT; } + - { name: Downard Street,stop_code: Wjz1sjb, lat: -35.4395254, lng: 149.0985034, zone_id: Calwell;Unclassified ACT; } + - { name: Stuart Street,stop_code: Wjz4NQF, lat: -35.3236228, lng: 149.1376314, zone_id: Griffith;Red Hill;Unclassified ACT; } + - { name: Flemington Road,stop_code: Wjz7WVd, lat: -35.1880905, lng: 149.149283, zone_id: Bonner;Gungahlin;Unclassified ACT; } + - { name: Companion Crescent,stop_code: Wjr-Sbz, lat: -35.2087898, lng: 149.0426061, zone_id: Flynn;Latham;Unclassified ACT; } + - { name: Fremantle Drive,stop_code: WjrXQRP, lat: -35.3502995, lng: 149.0498588, zone_id: Stirling;Unclassified ACT; } + - { name: Namatjira Drive,stop_code: WjrXZw7, lat: -35.3478405, lng: 149.0570686, zone_id: Stirling;Waramanga;Weston;Unclassified ACT; } + - { name: Namatjira Drive,stop_code: WjrX-l4, lat: -35.3392378, lng: 149.0544079, zone_id: Weston;Unclassified ACT; } + - { name: Nemarang Crescent,stop_code: WjrXXSj, lat: -35.3550948, lng: 149.0601049, zone_id: Fisher;Waramanga;Unclassified ACT; } + - { name: Bangalay Crescent,stop_code: WjrXJxI, lat: -35.3474117, lng: 149.0359435, zone_id: Chapman;Rivett;Unclassified ACT; } + - { name: Marr Street,stop_code: Wjz3ilp, lat: -35.3614122, lng: 149.0878174, zone_id: Pearce;Unclassified ACT; } + - { name: Carruthers Street,stop_code: Wjz4h1M, lat: -35.3258199, lng: 149.0856502, zone_id: Curtin;Unclassified ACT; } + - { name: Starke Street,stop_code: Wjr-H48, lat: -35.2249002, lng: 149.0298281, zone_id: Higgins;Holt;Latham;Unclassified ACT; } + - { name: Fullagar Crescent,stop_code: Wjr-yt4, lat: -35.2293611, lng: 149.0227471, zone_id: Higgins;Holt;Unclassified ACT; } + - { name: Wheeler Crescent,stop_code: Wjz2khI, lat: -35.3968751, lng: 149.08815, zone_id: Kambah;Wanniassa;Unclassified ACT; } + - { name: Melba Street,stop_code: Wjz5_mg, lat: -35.2454644, lng: 149.1425874, zone_id: Downer;Lyneham;Unclassified ACT; } + - { name: Furneaux Street,stop_code: Wjz4O0J, lat: -35.3205589, lng: 149.1293434, zone_id: Forrest;Griffith;Red Hill;Unclassified ACT; } + - { name: Antill Street,stop_code: Wjzd72S, lat: -35.2476842, lng: 149.1515789, zone_id: Dickson;Downer;Unclassified ACT; } + - { name: Were Street,stop_code: Wjz1IhB, lat: -35.4407491, lng: 149.1209803, zone_id: Calwell;Theodore;Unclassified ACT; } + - { name: Gundaroo Drive,stop_code: Wjz7PQK, lat: -35.1804441, lng: 149.1376744, zone_id: Bonner;Gungahlin;Unclassified ACT; } + - { name: Jabanungga Avenue,stop_code: Wjz7tOr, lat: -35.1710517, lng: 149.1042404, zone_id: Bonner;Ngunnawal;Unclassified ACT; } + - { name: Horse Park Drive,stop_code: Wjz7tvK, lat: -35.1673308, lng: 149.1005105, zone_id: Bonner;Ngunnawal;Unclassified ACT; } + - { name: Wanganeen Avenue,stop_code: Wjz7Bg7, lat: -35.1720853, lng: 149.109298, zone_id: Bonner;Ngunnawal;Unclassified ACT; } + - { name: Wanganeen Avenue,stop_code: Wjz7BJK, lat: -35.1687262, lng: 149.1142923, zone_id: Bonner;Ngunnawal;Unclassified ACT; } + - { name: Amagula Avenue,stop_code: Wjz7AEw, lat: -35.1781829, lng: 149.1141659, zone_id: Bonner;Ngunnawal;Nicholls;Unclassified ACT; } + - { name: Milari Street,stop_code: Wjz7HfF, lat: -35.178803, lng: 149.1197924, zone_id: Amaroo;Bonner;Gungahlin;Ngunnawal;Unclassified ACT; } + - { name: Hurtle Avenue,stop_code: Wjz1lat, lat: -35.43454, lng: 149.0864163, zone_id: Bonython;Isabella Plains;Unclassified ACT; } + - { name: Tyenna Close,stop_code: Wjz7JP1, lat: -35.1705349, lng: 149.1257982, zone_id: Amaroo;Bonner;Ngunnawal;Unclassified ACT; } + - { name: Boddington Crescent,stop_code: WjrWSUa, lat: -35.3867455, lng: 149.0504459, zone_id: Kambah;Unclassified ACT; } + - { name: Katherine Avenue,stop_code: Wjz7R5z, lat: -35.1690363, lng: 149.1291488, zone_id: Amaroo;Bonner;Unclassified ACT; } + - { name: Mirrabei Drive,stop_code: Wjz7CKo, lat: -35.1631057, lng: 149.1139536, zone_id: Bonner;Ngunnawal;Unclassified ACT; } + - { name: Tesselaar Street,stop_code: Wjz7X3O, lat: -35.1814007, lng: 149.1404901, zone_id: Bonner;Gungahlin;Unclassified ACT; } + - { name: Brigalow Street,stop_code: Wjz5Krx, lat: -35.2529666, lng: 149.1223781, zone_id: Lyneham;O'Connor;Unclassified ACT; } + - { name: The Valley Avenue,stop_code: Wjz7Gxm, lat: -35.188002, lng: 149.1234035, zone_id: Bonner;Gungahlin;Palmerston;Unclassified ACT; } + - { name: Kosciuszko Avenue,stop_code: Wjz7F5C, lat: -35.1906966, lng: 149.118141, zone_id: Bonner;Nicholls;Palmerston;Unclassified ACT; } + - { name: Kosciuszko Avenue,stop_code: Wjz7Ezf, lat: -35.1975304, lng: 149.1231277, zone_id: Bonner;Franklin;Gungahlin;Palmerston;Unclassified ACT; } + - { name: Brookes Street,stop_code: Wjz6Z8D, lat: -35.216009, lng: 149.1414929, zone_id: Bonner;Franklin;Mitchell;Unclassified ACT; } + - { name: Brookes Street,stop_code: Wjz6Yc1, lat: -35.2193016, lng: 149.1407817, zone_id: Bonner;Franklin;Mitchell;Unclassified ACT; } + - { name: Flemington Road,stop_code: Wjz6XiO, lat: -35.226071, lng: 149.143256, zone_id: Bonner;Lyneham;Mitchell;Unclassified ACT; } + - { name: Federal Highway,stop_code: Wjze3Vq, lat: -35.2267416, lng: 149.1606727, zone_id: Bonner;Watson;Unclassified ACT; } + - { name: Fison Street,stop_code: Wjze8bf, lat: -35.2414165, lng: 149.1630705, zone_id: Hackett;Watson;Unclassified ACT; } + - { name: Dickinson Street,stop_code: Wjze1c2, lat: -35.2356747, lng: 149.1518427, zone_id: Watson;Unclassified ACT; } + - { name: Melba Street,stop_code: Wjz6Ugw, lat: -35.2441014, lng: 149.142992, zone_id: Downer;Lyneham;Unclassified ACT; } + - { name: Madigan Street,stop_code: Wjzdfaz, lat: -35.2479426, lng: 149.1635256, zone_id: Hackett;Unclassified ACT; } + - { name: Phillip Avenue,stop_code: Wjzd6Pn, lat: -35.2524079, lng: 149.1590701, zone_id: Ainslie;Hackett;Unclassified ACT; } + - { name: Nyrang Street,stop_code: Wjzc1qE, lat: -35.3251161, lng: 149.1555115, zone_id: Fyshwick;Narrabundah;Unclassified ACT; } + - { name: Yamba Drive,stop_code: Wjz3mQ4, lat: -35.3398419, lng: 149.0928819, zone_id: Garran;Phillip;Unclassified ACT; } + - { name: Gilmore Crescent,stop_code: Wjz3C9Q, lat: -35.3419855, lng: 149.108934, zone_id: Garran;Red Hill;Unclassified ACT; } + - { name: Kent Street,stop_code: Wjz4gXk, lat: -35.3296011, lng: 149.0945736, zone_id: Hughes;Unclassified ACT; } + - { name: McCaughey Street,stop_code: Wjz5Iw8, lat: -35.2660466, lng: 149.1231132, zone_id: Acton;O'Connor;Turner;Unclassified ACT; } + - { name: Scrivener Street,stop_code: Wjz5JuJ, lat: -35.2560391, lng: 149.1225279, zone_id: Lyneham;O'Connor;Unclassified ACT; } + - { name: Ainslie Avenue,stop_code: Wjz5V64, lat: -35.2780918, lng: 149.1394963, zone_id: Braddon;Reid;Unclassified ACT; } + - { name: Gooreen Street,stop_code: Wjz5Vls, lat: -35.2787911, lng: 149.1427895, zone_id: Braddon;Campbell;Reid;Unclassified ACT; } + - { name: Fairbairn Avenue,stop_code: Wjzd8br, lat: -35.2857037, lng: 149.16333, zone_id: Campbell;Unclassified ACT; } + - { name: Blamey Crescent,stop_code: Wjz5UHK, lat: -35.2854924, lng: 149.1472635, zone_id: Campbell;Unclassified ACT; } + - { name: Chauvel Street,stop_code: Wjzc7si, lat: -35.2905765, lng: 149.1549056, zone_id: Campbell;Unclassified ACT; } + - { name: Canberra Avenue,stop_code: Wjz4VRQ, lat: -35.3226878, lng: 149.148704, zone_id: Griffith;Unclassified ACT; } + - { name: Longmore Crescent,stop_code: Wjz2sN9, lat: -35.3971025, lng: 149.1039429, zone_id: Wanniassa;Unclassified ACT; } + - { name: Bremer Street,stop_code: Wjz4MAz, lat: -35.3290192, lng: 149.1346333, zone_id: Griffith;Red Hill;Unclassified ACT; } + - { name: McIntyre Street,stop_code: Wjz4UwD, lat: -35.3313913, lng: 149.1456952, zone_id: Griffith;Narrabundah;Symonston;Unclassified ACT; } + - { name: Kootara Crescent,stop_code: Wjzb7nW, lat: -35.3324815, lng: 149.1544899, zone_id: Fyshwick;Narrabundah;Symonston;Unclassified ACT; } + - { name: Partridge Street,stop_code: Wjz2zNZ, lat: -35.4023147, lng: 149.1160557, zone_id: Fadden;Unclassified ACT; } + - { name: Giles Street,stop_code: Wjz4OOr, lat: -35.3193771, lng: 149.1373203, zone_id: Griffith;Kingston;Red Hill;Unclassified ACT; } + - { name: Castleton Crescent,stop_code: Wjz2pW_, lat: -35.4123885, lng: 149.1062979, zone_id: Fadden;Gowrie;Unclassified ACT; } + - { name: Clive Steele Avenue,stop_code: Wjz2pC1, lat: -35.4101412, lng: 149.1011212, zone_id: Monash;Wanniassa;Unclassified ACT; } + - { name: Goyder Street,stop_code: Wjzb7wf, lat: -35.3368722, lng: 149.1561338, zone_id: Fyshwick;Narrabundah;Symonston;Unclassified ACT; } + - { name: Narrabundah Lane,stop_code: Wjzb4vx, lat: -35.3490259, lng: 149.1553622, zone_id: Symonston;Unclassified ACT; } + - { name: Newcastle Street,stop_code: Wjzc9WV, lat: -35.3250576, lng: 149.1722805, zone_id: Fyshwick;Unclassified ACT; } + - { name: Gladstone Street,stop_code: WjzchQP, lat: -35.3235189, lng: 149.1817987, zone_id: Fyshwick;Pialligo;Unclassified ACT; } + - { name: Clive Steele Avenue,stop_code: Wjz2o7y, lat: -35.414898, lng: 149.0962718, zone_id: Monash;Unclassified ACT; } + - { name: Clare Dennis Avenue,stop_code: Wjz1jim, lat: -35.4454866, lng: 149.0877316, zone_id: Bonython;Gordon;Unclassified ACT; } + - { name: Longmore Crescent,stop_code: Wjz2t7A, lat: -35.3872717, lng: 149.0961967, zone_id: Wanniassa;Unclassified ACT; } + - { name: Longmore Crescent,stop_code: Wjz2tl5, lat: -35.3885837, lng: 149.0982781, zone_id: Wanniassa;Unclassified ACT; } + - { name: Lambrigg Street,stop_code: Wjz3oih, lat: -35.3744422, lng: 149.0986886, zone_id: Farrer;Unclassified ACT; } + - { name: Beasley Street,stop_code: Wjz3gcu, lat: -35.3726637, lng: 149.0864364, zone_id: Kambah;Torrens;Unclassified ACT; } + - { name: Beasley Street,stop_code: Wjz3gB5, lat: -35.3720623, lng: 149.0900243, zone_id: Kambah;Torrens;Unclassified ACT; } + - { name: Coyne Street,stop_code: Wjz2F_q, lat: -35.4093651, lng: 149.1276548, zone_id: Fadden;Gilmore;Macarthur;Unclassified ACT; } + - { name: Mouat Street,stop_code: Wjz5L_c, lat: -35.2444379, lng: 149.1272298, zone_id: Lyneham;O'Connor;Unclassified ACT; } + - { name: Learmonth Drive,stop_code: WjrWQRL, lat: -35.3938608, lng: 149.049706, zone_id: Kambah;Unclassified ACT; } + - { name: Boddington Crescent,stop_code: WjrWSX9, lat: -35.3847561, lng: 149.0504459, zone_id: Kambah;Unclassified ACT; } + - { name: Stuart Street,stop_code: Wjz4NJT, lat: -35.3225023, lng: 149.1363654, zone_id: Griffith;Red Hill;Unclassified ACT; } + - { name: Tom Roberts Avenue,stop_code: Wjz1oP8, lat: -35.4617393, lng: 149.1040287, zone_id: Conder;Unclassified ACT; } + - { name: Templestowe Avenue,stop_code: Wjz1woz, lat: -35.4635395, lng: 149.1113243, zone_id: Conder;Unclassified ACT; } + - { name: Tom Roberts Avenue,stop_code: Wjz0vfE, lat: -35.4644832, lng: 149.0977524, zone_id: Banks;Conder;Unclassified ACT; } + - { name: Pocket Avenue,stop_code: Wjz0v2g, lat: -35.4679435, lng: 149.0958641, zone_id: Banks;Conder;Unclassified ACT; } + - { name: Knoke Avenue,stop_code: Wjz0mvg, lat: -35.4699707, lng: 149.0890405, zone_id: Gordon;Unclassified ACT; } + - { name: Murdoch Street,stop_code: Wjz5SjK, lat: -35.2525469, lng: 149.1321597, zone_id: Lyneham;Unclassified ACT; } + - { name: Archibald Street,stop_code: Wjz5LSr, lat: -35.2452046, lng: 149.1262374, zone_id: Lyneham;O'Connor;Unclassified ACT; } + - { name: Tyagarah Street,stop_code: Wjz3s-P, lat: -35.3495819, lng: 149.106153, zone_id: Garran;O'Malley;Unclassified ACT; } + - { name: Ngunawal Drive,stop_code: Wjz3yfH, lat: -35.3598722, lng: 149.1087065, zone_id: Isaacs;O'Malley;Unclassified ACT; } + - { name: Julia Flynn Avenue,stop_code: Wjz3wJD, lat: -35.3718847, lng: 149.1141353, zone_id: Farrer;Isaacs;Unclassified ACT; } + - { name: Lambrigg Street,stop_code: Wjz2D3z, lat: -35.3791456, lng: 149.1071508, zone_id: Farrer;Isaacs;Unclassified ACT; } + - { name: Jerrabomberra Avenue,stop_code: Wjz3_Ow, lat: -35.336122, lng: 149.1483495, zone_id: Griffith;Narrabundah;Symonston;Unclassified ACT; } + - { name: Antill Street,stop_code: Wjzd7LX, lat: -35.2445144, lng: 149.1586198, zone_id: Hackett;Watson;Unclassified ACT; } + - { name: Northbourne Avenue,stop_code: Wjz5N5k, lat: -35.2787905, lng: 149.1288627, zone_id: City;Unclassified ACT; } + - { name: Mackennal Street,stop_code: Wjz5Lpi, lat: -35.2487591, lng: 149.1218966, zone_id: Lyneham;O'Connor;Unclassified ACT; } + - { name: Kingscote Crescent,stop_code: Wjz1egm, lat: -35.4303788, lng: 149.076696, zone_id: Bonython;Greenway;Unclassified ACT; } + - { name: Lewis Luxton Avenue,stop_code: Wjz1imh, lat: -35.4486564, lng: 149.0876136, zone_id: Gordon;Unclassified ACT; } + - { name: Tillyard Drive,stop_code: Wjr-LNq, lat: -35.2048275, lng: 149.0383141, zone_id: Charnwood;Flynn;Unclassified ACT; } + - { name: Haydon Drive,stop_code: Wjz5maK, lat: -35.2532079, lng: 149.0867657, zone_id: Aranda;Bruce;Unclassified ACT; } + - { name: Flinders Way,stop_code: Wjz4Ox0, lat: -35.3203301, lng: 149.1339648, zone_id: Forrest;Griffith;Red Hill;Unclassified ACT; } + - { name: Flinders Way,stop_code: Wjz4OpP, lat: -35.320064, lng: 149.1335699, zone_id: Forrest;Griffith;Red Hill;Unclassified ACT; } + - { name: Ashkanasy Crescent,stop_code: Wjz66kP, lat: -35.2081588, lng: 149.066382, zone_id: Bonner;Evatt;Unclassified ACT; } + - { name: Copland Drive,stop_code: Wjz664q, lat: -35.2082119, lng: 149.0631086, zone_id: Melba;Bonner;Evatt;Unclassified ACT; } + - { name: Robert Campbell Road,stop_code: Wjzceyq, lat: -35.2975234, lng: 149.1674683, zone_id: Campbell;Unclassified ACT; } + - { name: Bateson Road,stop_code: Wjz3toH, lat: -35.3482518, lng: 149.1004882, zone_id: Garran;O'Malley;Phillip;Unclassified ACT; } + - { name: Angliss Place,stop_code: Wjz2rtc, lat: -35.3996562, lng: 149.0999088, zone_id: Wanniassa;Unclassified ACT; } + - { name: Barraclough Crescent,stop_code: Wjz2odG, lat: -35.416297, lng: 149.0977738, zone_id: Monash;Unclassified ACT; } + - { name: Miller Street,stop_code: Wjz5CW3, lat: -35.2534813, lng: 149.1160707, zone_id: Lyneham;O'Connor;Unclassified ACT; } + - { name: Fairfax Street,stop_code: Wjz5BaH, lat: -35.2589798, lng: 149.1087583, zone_id: Acton;Bruce;O'Connor;Unclassified ACT; } + - { name: Longmore Crescent,stop_code: Wjz2rKm, lat: -35.3987816, lng: 149.1026983, zone_id: Wanniassa;Unclassified ACT; } + - { name: Dumas Street,stop_code: Wjz6c8c, lat: -35.2217598, lng: 149.0751026, zone_id: McKellar;Belconnen;Bonner;Evatt;Lawson;Unclassified ACT; } + - { name: Bennetts Close,stop_code: Wjz6c7A, lat: -35.2169478, lng: 149.074177, zone_id: McKellar;Bonner;Evatt;Unclassified ACT; } + - { name: Kerrigan Street,stop_code: Wjr_F9a, lat: -35.1938253, lng: 149.031231, zone_id: Charnwood;Dunlop;Fraser;Unclassified ACT; } + - { name: Handcock Crescent,stop_code: Wjr-CnE, lat: -35.206318, lng: 149.0223041, zone_id: Latham;Macgregor;Unclassified ACT; } + - { name: Spofforth Street,stop_code: Wjr-kZV, lat: -35.2186221, lng: 149.0075381, zone_id: Holt;Macgregor;Unclassified ACT; } + - { name: Collie Street,stop_code: WjzcgLt, lat: -35.3267279, lng: 149.1797667, zone_id: Fyshwick;Pialligo;Unclassified ACT; } + - { name: Wormald Street,stop_code: Wjzbfr6, lat: -35.3349204, lng: 149.1655287, zone_id: Fyshwick;Symonston;Unclassified ACT; } + - { name: Ipswich Street,stop_code: Wjzc8c1, lat: -35.3291272, lng: 149.1628031, zone_id: Fyshwick;Unclassified ACT; } + - { name: Casey Crescent,stop_code: Wjz1I92, lat: -35.4409939, lng: 149.118856, zone_id: Calwell;Theodore;Unclassified ACT; } + - { name: Carnegie Cresent,stop_code: Wjz3_kV, lat: -35.3346691, lng: 149.1435001, zone_id: Griffith;Narrabundah;Symonston;Unclassified ACT; } + - { name: Ginninderra Drive,stop_code: Wjr-DF9, lat: -35.2048888, lng: 149.0256331, zone_id: Charnwood;Dunlop;Macgregor;Unclassified ACT; } + - { name: Yambina Crescent,stop_code: WjrXXGN, lat: -35.3580173, lng: 149.0594611, zone_id: Fisher;Waramanga;Unclassified ACT; } + - { name: Marrawah Street,stop_code: Wjz3eSa, lat: -35.3387126, lng: 149.0819166, zone_id: Lyons;Unclassified ACT; } + - { name: Fullagar Crescent,stop_code: Wjr-ypw, lat: -35.2324635, lng: 149.0233908, zone_id: Higgins;Unclassified ACT; } + - { name: National Circuit,stop_code: Wjz4Pk_, lat: -35.3121631, lng: 149.1324213, zone_id: Barton;Forrest;Parkes;Unclassified ACT; } + - { name: Yamba Drive,stop_code: Wjz3mPO, lat: -35.3407241, lng: 149.0937831, zone_id: Garran;Phillip;Unclassified ACT; } + - { name: Kitchener Street,stop_code: Wjz3vqN, lat: -35.3360119, lng: 149.1006409, zone_id: Garran;Hughes;Unclassified ACT; } + - { name: Gilmore Crescent,stop_code: Wjz3uQf, lat: -35.339661, lng: 149.1040329, zone_id: Garran;Red Hill;Unclassified ACT; } + - { name: Ainsworth Street,stop_code: Wjz3lVM, lat: -35.3477625, lng: 149.0952366, zone_id: Garran;Phillip;Unclassified ACT; } + - { name: Launceston Street,stop_code: Wjz3mAg, lat: -35.3402021, lng: 149.0903851, zone_id: Phillip;Unclassified ACT; } + - { name: Kent Street,stop_code: Wjz4p2R, lat: -35.3247128, lng: 149.0966244, zone_id: Deakin;Unclassified ACT; } + - { name: McCaughey Street,stop_code: Wjz5HDd, lat: -35.2662951, lng: 149.1231711, zone_id: Acton;O'Connor;Turner;Unclassified ACT; } + - { name: Macpherson Street,stop_code: Wjz5IjX, lat: -35.2637604, lng: 149.1215219, zone_id: Acton;O'Connor;Turner;Unclassified ACT; } + - { name: Hovea Street,stop_code: Wjz5JzP, lat: -35.2582197, lng: 149.123961, zone_id: Acton;Lyneham;O'Connor;Unclassified ACT; } + - { name: Alpen Street,stop_code: Wjr-_Uj, lat: -35.2054305, lng: 149.0615985, zone_id: Melba;Evatt;Spence;Unclassified ACT; } + - { name: Russell Drive,stop_code: Wjzc54R, lat: -35.3013866, lng: 149.1515283, zone_id: Barton;Campbell;Russell;Unclassified ACT; } + - { name: Russell Drive,stop_code: Wjz4-WZ, lat: -35.2972194, lng: 149.1503113, zone_id: Campbell;Russell;Unclassified ACT; } + - { name: Kings Avenue,stop_code: Wjz4RFJ, lat: -35.3034224, lng: 149.1361467, zone_id: Barton;Parkes;Unclassified ACT; } + - { name: Copland Drive,stop_code: Wjr--W0, lat: -35.2097244, lng: 149.0611869, zone_id: Melba;Evatt;Unclassified ACT; } + - { name: MacFarland Crescent,stop_code: Wjz3bdl, lat: -35.3556201, lng: 149.075221, zone_id: Chifley;Unclassified ACT; } + - { name: Eggleston Crescent,stop_code: Wjz3ceV, lat: -35.3497899, lng: 149.0761589, zone_id: Chifley;Unclassified ACT; } + - { name: Kingsford Smith Drive,stop_code: Wjr-RKi, lat: -35.2123821, lng: 149.0478391, zone_id: Melba;Flynn;Unclassified ACT; } + - { name: Verbrugghen Street,stop_code: Wjr-Zk5, lat: -35.2134943, lng: 149.0543506, zone_id: Melba;Evatt;Unclassified ACT; } + - { name: Alpen Street,stop_code: Wjz66fw, lat: -35.2063185, lng: 149.0646037, zone_id: Melba;Bonner;Evatt;Spence;Unclassified ACT; } + - { name: Alfred Hill Drive,stop_code: Wjr--Lw, lat: -35.2063011, lng: 149.059093, zone_id: Melba;Evatt;Spence;Unclassified ACT; } + - { name: Alfred Hill Drive,stop_code: Wjr--6k, lat: -35.2066759, lng: 149.0519744, zone_id: Melba;Flynn;Unclassified ACT; } + - { name: Lathlain Street,stop_code: Wjz60c5, lat: -35.2408972, lng: 149.0639885, zone_id: Belconnen;Unclassified ACT; } + - { name: Daley Road,stop_code: Wjz5yXo, lat: -35.2749982, lng: 149.1166312, zone_id: Acton;Turner;Unclassified ACT; } + - { name: Kingsford Smith Drive,stop_code: Wjr-_3A, lat: -35.2032823, lng: 149.0522538, zone_id: Melba;Flynn;Unclassified ACT; } + - { name: Baddeley Crescent,stop_code: Wjz67k1, lat: -35.2028461, lng: 149.0653269, zone_id: Bonner;Evatt;Spence;Unclassified ACT; } + - { name: Baddeley Crescent,stop_code: Wjz67kk, lat: -35.2025967, lng: 149.0657125, zone_id: Bonner;Evatt;Spence;Unclassified ACT; } + - { name: John Cleland Crescent,stop_code: Wjr-Xky, lat: -35.2247107, lng: 149.0549856, zone_id: Florey;Unclassified ACT; } + - { name: Bowman Street,stop_code: Wjz56XB, lat: -35.2526099, lng: 149.0728793, zone_id: Macquarie;Unclassified ACT; } + - { name: Fulton Street,stop_code: Wjz5711, lat: -35.2488233, lng: 149.0625779, zone_id: Belconnen;Macquarie;Unclassified ACT; } + - { name: London Circuit,stop_code: Wjz5Nht, lat: -35.281465, lng: 149.131837, zone_id: City;Unclassified ACT; } + - { name: Yamba Drive,stop_code: Wjz3mQ5, lat: -35.339761, lng: 149.0927558, zone_id: Garran;Phillip;Unclassified ACT; } + - { name: Moynihan Street,stop_code: Wjz65rA, lat: -35.2142446, lng: 149.0673143, zone_id: Bonner;Evatt;Unclassified ACT; } + - { name: Moynihan Street,stop_code: Wjz65Hy, lat: -35.2143691, lng: 149.0701627, zone_id: McKellar;Bonner;Evatt;Unclassified ACT; } + - { name: Clancy Street,stop_code: Wjz66XM, lat: -35.2090851, lng: 149.0732672, zone_id: Bonner;Evatt;Unclassified ACT; } + - { name: Marconi Crescent,stop_code: WjrW_Qk, lat: -35.3783254, lng: 149.0600973, zone_id: Kambah;Unclassified ACT; } + - { name: Marconi Crescent,stop_code: Wjz27k8, lat: -35.3787048, lng: 149.065524, zone_id: Kambah;Unclassified ACT; } + - { name: Summerland Circuit,stop_code: Wjz26P8, lat: -35.3848854, lng: 149.0709314, zone_id: Kambah;Unclassified ACT; } + - { name: Summerland Circuit,stop_code: Wjz2def, lat: -35.3876959, lng: 149.0750942, zone_id: Kambah;Wanniassa;Unclassified ACT; } + - { name: O'Halloran Circuit,stop_code: Wjz24vP, lat: -35.3928088, lng: 149.0677265, zone_id: Kambah;Unclassified ACT; } + - { name: O'Halloran Circuit,stop_code: Wjz24cK, lat: -35.3946419, lng: 149.0647484, zone_id: Kambah;Unclassified ACT; } + - { name: Vansittart Crescent,stop_code: Wjz2347, lat: -35.4000362, lng: 149.0625, zone_id: Greenway;Kambah;Unclassified ACT; } + - { name: Castieau Street,stop_code: Wjr-yYy, lat: -35.2301674, lng: 149.0289912, zone_id: Higgins;Holt;Unclassified ACT; } + - { name: Callaway Crescent,stop_code: Wjz18KG, lat: -35.459505, lng: 149.0813694, zone_id: Gordon;Unclassified ACT; } + - { name: Lewis Luxton Avenue,stop_code: Wjz1igo, lat: -35.4528675, lng: 149.0877906, zone_id: Gordon;Unclassified ACT; } + - { name: Cossington Smith Crescent,stop_code: Wjz6EIv, lat: -35.2407183, lng: 149.1248641, zone_id: Kaleen;Lyneham;Unclassified ACT; } + - { name: Goyder Street,stop_code: Wjz3-Jk, lat: -35.3392028, lng: 149.1466758, zone_id: Narrabundah;Symonston;Unclassified ACT; } + - { name: Canberra Avenue,stop_code: WjzbfPL, lat: -35.3348529, lng: 149.1706441, zone_id: Fyshwick;Symonston;Unclassified ACT; } + - { name: Cowper Street,stop_code: Wjz5Z5c, lat: -35.2568022, lng: 149.1396491, zone_id: Ainslie;Dickson;Lyneham;Unclassified ACT; } + - { name: Boldrewood Street,stop_code: Wjz5zOq, lat: -35.2700411, lng: 149.1153216, zone_id: Acton;Turner;Unclassified ACT; } + - { name: William Webb Drive,stop_code: Wjz6dtx, lat: -35.2131085, lng: 149.0784233, zone_id: McKellar;Bonner;Evatt;Unclassified ACT; } + - { name: Isabella Drive,stop_code: Wjz1nzY, lat: -35.4229506, lng: 149.0912343, zone_id: Isabella Plains;Monash;Unclassified ACT; } + - { name: Taverner Street,stop_code: Wjz2b8J, lat: -35.4029944, lng: 149.0757807, zone_id: Greenway;Kambah;Oxley;Wanniassa;Unclassified ACT; } + - { name: Officer Crescent,stop_code: Wjzd68O, lat: -35.254952, lng: 149.1528797, zone_id: Ainslie;Dickson;Unclassified ACT; } + - { name: Newman Morris Circuit,stop_code: Wjz2aGG, lat: -35.4073408, lng: 149.0812511, zone_id: Monash;Oxley;Wanniassa;Unclassified ACT; } + - { name: Newman Morris Circuit,stop_code: Wjz2arg, lat: -35.4068086, lng: 149.0779936, zone_id: Greenway;Monash;Oxley;Wanniassa;Unclassified ACT; } + - { name: Newman Morris Circuit,stop_code: Wjz29ea, lat: -35.4101319, lng: 149.0751278, zone_id: Greenway;Monash;Oxley;Wanniassa;Unclassified ACT; } + - { name: Hebblewhite Street,stop_code: Wjz2haF, lat: -35.4129406, lng: 149.0867361, zone_id: Monash;Oxley;Unclassified ACT; } + - { name: Harricks Crescent,stop_code: Wjz2iEO, lat: -35.40876, lng: 149.0925039, zone_id: Monash;Wanniassa;Unclassified ACT; } + - { name: Kalgoorlie Crescent,stop_code: WjrXWsn, lat: -35.3616093, lng: 149.055979, zone_id: Fisher;Unclassified ACT; } + - { name: Novar Street,stop_code: Wjz4t8Z, lat: -35.3041348, lng: 149.0981922, zone_id: Yarralumla;Unclassified ACT; } + - { name: Beasley Street,stop_code: Wjz3hu6, lat: -35.3658261, lng: 149.0887408, zone_id: Pearce;Torrens;Unclassified ACT; } + - { name: Laverton Avenue,stop_code: WjzcJ38, lat: -35.3024713, lng: 149.2056109, zone_id: Pialligo;Unclassified ACT; } + - { name: Bingley Crescent,stop_code: Wjr_N-q, lat: -35.1903433, lng: 149.0507803, zone_id: Fraser;Unclassified ACT; } + - { name: Commonwealth Avenue,stop_code: Wjz4KO9, lat: -35.2975962, lng: 149.1259252, zone_id: Acton;Parkes;Yarralumla;Unclassified ACT; } + - { name: Ashkanasy Crescent,stop_code: Wjz66kG, lat: -35.2081931, lng: 149.0662542, zone_id: Bonner;Evatt;Unclassified ACT; } + - { name: Alfred Hill Drive,stop_code: Wjr--r_, lat: -35.2084885, lng: 149.0569758, zone_id: Melba;Evatt;Unclassified ACT; } + - { name: Reg Saunders Way,stop_code: Wjz4-YV, lat: -35.2961803, lng: 149.1503194, zone_id: Campbell;Russell;Unclassified ACT; } + - { name: Melrose Drive,stop_code: Wjz3eZ4, lat: -35.3392098, lng: 149.0831308, zone_id: Lyons;Phillip;Unclassified ACT; } + - { name: Eggleston Crescent,stop_code: Wjz3ceY, lat: -35.3495185, lng: 149.0761236, zone_id: Chifley;Unclassified ACT; } + - { name: Verbrugghen Street,stop_code: Wjr-RZE, lat: -35.2132014, lng: 149.0511677, zone_id: Melba;Flynn;Unclassified ACT; } + - { name: Verbrugghen Street,stop_code: Wjr-ZBY, lat: -35.2128526, lng: 149.0583185, zone_id: Melba;Evatt;Unclassified ACT; } + - { name: Alfred Hill Drive,stop_code: Wjr--m3, lat: -35.2067416, lng: 149.0543264, zone_id: Melba;Evatt;Unclassified ACT; } + - { name: Lathlain Street,stop_code: Wjz604Y, lat: -35.2410486, lng: 149.0638326, zone_id: Belconnen;Unclassified ACT; } + - { name: Kingsford Smith Drive,stop_code: Wjr-_kG, lat: -35.2027328, lng: 149.0551853, zone_id: Melba;Evatt;Unclassified ACT; } + - { name: John Cleland Crescent,stop_code: Wjr-Yg7, lat: -35.2215188, lng: 149.0543538, zone_id: Evatt;Florey;Unclassified ACT; } + - { name: John Cleland Crescent,stop_code: Wjr-XyN, lat: -35.226202, lng: 149.0581637, zone_id: Belconnen;Florey;Unclassified ACT; } + - { name: Launceston Street,stop_code: Wjz3m3b, lat: -35.3406241, lng: 149.0847703, zone_id: Phillip;Unclassified ACT; } + - { name: Bandjalong Crescent,stop_code: Wjz5dCr, lat: -35.2561978, lng: 149.0795805, zone_id: Aranda;Bruce;Unclassified ACT; } + - { name: Lyttleton Crescent,stop_code: Wjz54CS, lat: -35.2614333, lng: 149.0690577, zone_id: Cook;Unclassified ACT; } + - { name: Templeton Street,stop_code: Wjz551Q, lat: -35.2595831, lng: 149.0636761, zone_id: Cook;Unclassified ACT; } + - { name: Coulter Drive,stop_code: WjrZ_o2, lat: -35.2493991, lng: 149.055711, zone_id: Macquarie;Weetangera;Unclassified ACT; } + - { name: Gillespie Street,stop_code: WjrZTu1, lat: -35.2453967, lng: 149.044759, zone_id: Hawker;Weetangera;Unclassified ACT; } + - { name: Beetaloo Street,stop_code: WjrZT5e, lat: -35.245649, lng: 149.0408365, zone_id: Hawker;Unclassified ACT; } + - { name: Yamba Drive,stop_code: Wjz3mI-, lat: -35.3396854, lng: 149.092654, zone_id: Garran;Phillip;Unclassified ACT; } + - { name: Moynihan Street,stop_code: Wjz65rQ, lat: -35.2142653, lng: 149.0676927, zone_id: Bonner;Evatt;Unclassified ACT; } + - { name: Ashkanasy Crescent,stop_code: Wjz66oJ, lat: -35.2107077, lng: 149.0674989, zone_id: Bonner;Evatt;Unclassified ACT; } + - { name: Marconi Crescent,stop_code: Wjz27k0, lat: -35.3786939, lng: 149.0653235, zone_id: Kambah;Unclassified ACT; } + - { name: Summerland Circuit,stop_code: Wjz26tw, lat: -35.38347, lng: 149.0674733, zone_id: Kambah;Unclassified ACT; } + - { name: Vowels Crescent,stop_code: Wjz5nUS, lat: -35.2490745, lng: 149.0952032, zone_id: Bruce;Unclassified ACT; } + - { name: O'Halloran Circuit,stop_code: Wjz24uT, lat: -35.3931517, lng: 149.0676751, zone_id: Kambah;Unclassified ACT; } + - { name: Vansittart Crescent,stop_code: Wjz234e, lat: -35.4001412, lng: 149.0627055, zone_id: Greenway;Kambah;Unclassified ACT; } + - { name: Learmonth Drive,stop_code: Wjz230Q, lat: -35.4030936, lng: 149.0635466, zone_id: Greenway;Kambah;Unclassified ACT; } + - { name: Kingsford Smith Drive,stop_code: Wjr_UUM, lat: -35.2001188, lng: 149.062303, zone_id: Evatt;Spence;Unclassified ACT; } + - { name: Kingsford Smith Drive,stop_code: Wjr_UTJ, lat: -35.1949558, lng: 149.0607434, zone_id: Spence;Unclassified ACT; } + - { name: Lousia Lawson Crescent,stop_code: Wjz2V0k, lat: -35.4140263, lng: 149.1397991, zone_id: Chisholm;Gilmore;Unclassified ACT; } + - { name: Martin Street,stop_code: Wjz49Ui, lat: -35.3262888, lng: 149.0835377, zone_id: Curtin;Unclassified ACT; } + - { name: Jenkins Street,stop_code: Wjz49dp, lat: -35.3229961, lng: 149.075421, zone_id: Curtin;Unclassified ACT; } + - { name: Badimara Street,stop_code: Wjz33CI, lat: -35.3549749, lng: 149.0689295, zone_id: Chifley;Waramanga;Unclassified ACT; } + - { name: Bangalay Crescent,stop_code: WjrXIKK, lat: -35.3493279, lng: 149.0374035, zone_id: Chapman;Rivett;Unclassified ACT; } + - { name: Warragamba Avenue,stop_code: WjrYEWc, lat: -35.3302839, lng: 149.0394086, zone_id: Duffy;Holder;Unclassified ACT; } + - { name: Tillyard Drive,stop_code: Wjr_McO, lat: -35.1972013, lng: 149.0429389, zone_id: Charnwood;Flynn;Fraser;Unclassified ACT; } + - { name: Lhotsky Street,stop_code: Wjr-DTC, lat: -35.2002855, lng: 149.0276101, zone_id: Charnwood;Dunlop;Unclassified ACT; } + - { name: Lance Hill Avenue,stop_code: Wjr_wf4, lat: -35.1950004, lng: 149.0199737, zone_id: Dunlop;Unclassified ACT; } + - { name: Copland Drive,stop_code: Wjz67_v, lat: -35.2002563, lng: 149.0727607, zone_id: Bonner;Evatt;Spence;Unclassified ACT; } + - { name: Osburn Drive,stop_code: Wjr-te3, lat: -35.2122382, lng: 149.0090273, zone_id: Macgregor;Unclassified ACT; } + - { name: Handcock Crescent,stop_code: Wjr-CsO, lat: -35.2082115, lng: 149.0237453, zone_id: Latham;Macgregor;Unclassified ACT; } + - { name: Southern Cross Drive,stop_code: Wjr-sQ8, lat: -35.2193706, lng: 149.0159919, zone_id: Holt;Macgregor;Unclassified ACT; } + - { name: Beaurepaire Crescent,stop_code: Wjr-rxG, lat: -35.2267918, lng: 149.0140227, zone_id: Holt;Unclassified ACT; } + - { name: Beaurepaire Crescent,stop_code: Wjr-rNr, lat: -35.226697, lng: 149.016389, zone_id: Holt;Unclassified ACT; } + - { name: Hardwick Crescent,stop_code: Wjr-zcC, lat: -35.2243517, lng: 149.0207165, zone_id: Higgins;Holt;Latham;Unclassified ACT; } + - { name: Drake Brockman Drive,stop_code: Wjr-wDP, lat: -35.2389936, lng: 149.0252414, zone_id: Higgins;Unclassified ACT; } + - { name: Ross Smith Crescent,stop_code: Wjr-F_m, lat: -35.233261, lng: 149.039515, zone_id: Florey;Scullin;Unclassified ACT; } + - { name: Murranji Street,stop_code: Wjr-E8A, lat: -35.2437543, lng: 149.031741, zone_id: Hawker;Unclassified ACT; } + - { name: Shumack Street,stop_code: WjrZSWs, lat: -35.2533983, lng: 149.050782, zone_id: Weetangera;Unclassified ACT; } + - { name: Coulter Drive,stop_code: WjrZZeD, lat: -35.2558247, lng: 149.0536901, zone_id: Weetangera;Unclassified ACT; } + - { name: Sternberg Crescent,stop_code: Wjz2ri7, lat: -35.4014577, lng: 149.0982244, zone_id: Wanniassa;Unclassified ACT; } + - { name: Bugden Avenue,stop_code: Wjz2Gu5, lat: -35.404351, lng: 149.1216336, zone_id: Fadden;Unclassified ACT; } + - { name: Bugden Avenue,stop_code: Wjz2z1O, lat: -35.4025246, lng: 149.1075156, zone_id: Fadden;Unclassified ACT; } + - { name: Bugden Avenue,stop_code: Wjz2F6x, lat: -35.4102199, lng: 149.118121, zone_id: Fadden;Gowrie;Unclassified ACT; } + - { name: Cockcroft Avenue,stop_code: Wjz2ob-, lat: -35.4173112, lng: 149.0981386, zone_id: Monash;Unclassified ACT; } + - { name: Charleston Street,stop_code: Wjz28Bd, lat: -35.4160434, lng: 149.0792451, zone_id: Monash;Unclassified ACT; } + - { name: Downard Street,stop_code: Wjz1sPq, lat: -35.4396128, lng: 149.1043506, zone_id: Calwell;Unclassified ACT; } + - { name: La Perouse Street,stop_code: Wjz3TDn, lat: -35.3320346, lng: 149.1342948, zone_id: Griffith;Red Hill;Symonston;Unclassified ACT; } + - { name: Ginninderra Drive,stop_code: Wjr-DqS, lat: -35.2037667, lng: 149.0237448, zone_id: Charnwood;Dunlop;Macgregor;Unclassified ACT; } + - { name: Larakia Street,stop_code: Wjz344h, lat: -35.3511395, lng: 149.0628944, zone_id: Waramanga;Unclassified ACT; } + - { name: Parkhill Street,stop_code: Wjz39tZ, lat: -35.3666092, lng: 149.0789018, zone_id: Pearce;Unclassified ACT; } + - { name: McGinness Street,stop_code: Wjr-Nfn, lat: -35.2332346, lng: 149.0422735, zone_id: Florey;Page;Scullin;Unclassified ACT; } + - { name: Bennelong Crescent,stop_code: WjrZ-GZ, lat: -35.2532951, lng: 149.0596327, zone_id: Macquarie;Unclassified ACT; } + - { name: Braybrooke Street,stop_code: Wjz6oJz, lat: -35.2403705, lng: 149.1030403, zone_id: Bruce;Kaleen;Unclassified ACT; } + - { name: MacFarland Crescent,stop_code: Wjz3bdj, lat: -35.3557447, lng: 149.0753424, zone_id: Chifley;Pearce;Unclassified ACT; } + - { name: Officer Crescent,stop_code: Wjz5ZO1, lat: -35.2591479, lng: 149.1477412, zone_id: Ainslie;Dickson;Lyneham;Unclassified ACT; } + - { name: Temperley Street,stop_code: Wjz7hZW, lat: -35.1910485, lng: 149.0953265, zone_id: Bonner;Nicholls;Unclassified ACT; } + - { name: Whatmore Court,stop_code: Wjz7rzg, lat: -35.1815933, lng: 149.1014588, zone_id: Bonner;Ngunnawal;Nicholls;Unclassified ACT; } + - { name: Freda Bennett Circuit,stop_code: Wjz7rRa, lat: -35.1800948, lng: 149.1039243, zone_id: Bonner;Ngunnawal;Nicholls;Unclassified ACT; } + - { name: Bicentennial National Trail,stop_code: Wjz7thn, lat: -35.1713618, lng: 149.0985507, zone_id: Bonner;Ngunnawal;Unclassified ACT; } + - { name: Wanganeen Avenue,stop_code: Wjz7BsE, lat: -35.1699148, lng: 149.1115106, zone_id: Bonner;Ngunnawal;Unclassified ACT; } + - { name: Tuggeranong Parkway,stop_code: WjrXUAm, lat: -35.3726375, lng: 149.0574471, zone_id: Kambah;Unclassified ACT; } + - { name: Kambah pool Road,stop_code: WjrXMFM, lat: -35.3752866, lng: 149.0485475, zone_id: Kambah;Unclassified ACT; } + - { name: Melrose Drive,stop_code: Wjz3jei, lat: -35.3551755, lng: 149.0862349, zone_id: Chifley;Phillip;Unclassified ACT; } + - { name: Bugden Avenue,stop_code: Wjz2ziM, lat: -35.4020349, lng: 149.1102622, zone_id: Fadden;Unclassified ACT; } + - { name: Gundaroo Drive,stop_code: Wjz7xpa, lat: -35.1938349, lng: 149.1107761, zone_id: Bonner;Franklin;Nicholls;Palmerston;Unclassified ACT; } + - { name: O'Connell Street,stop_code: Wjz5YAK, lat: -35.2627902, lng: 149.1458623, zone_id: Ainslie;Unclassified ACT; } + - { name: Campbell Street,stop_code: Wjz5XnQ, lat: -35.2664452, lng: 149.1432384, zone_id: Ainslie;Braddon;Unclassified ACT; } + - { name: Gooreen Street,stop_code: Wjz5W3H, lat: -35.2747063, lng: 149.1403907, zone_id: Ainslie;Braddon;Unclassified ACT; } + - { name: Foveaux Street,stop_code: Wjz5Y1_, lat: -35.2648034, lng: 149.1406151, zone_id: Ainslie;Braddon;Unclassified ACT; } + - { name: Ipima Street,stop_code: Wjz5PLJ, lat: -35.2663315, lng: 149.136253, zone_id: Ainslie;Braddon;Unclassified ACT; } + - { name: Fawkner Street,stop_code: Wjz5OLh, lat: -35.2721844, lng: 149.135684, zone_id: Braddon;Unclassified ACT; } + - { name: Doonkuna Street,stop_code: Wjz5OOo, lat: -35.2757106, lng: 149.1372297, zone_id: Ainslie;Braddon;City;Unclassified ACT; } + - { name: Fairbairn Avenue,stop_code: Wjzd0CK, lat: -35.283446, lng: 149.156771, zone_id: Campbell;Unclassified ACT; } + - { name: Vasey Crescent,stop_code: Wjzc7Ay, lat: -35.2905765, lng: 149.1566757, zone_id: Campbell;Unclassified ACT; } + - { name: Robert Campbell Road,stop_code: WjzceHt, lat: -35.2965216, lng: 149.168833, zone_id: Campbell;Unclassified ACT; } + - { name: Dominion Circuit,stop_code: Wjz4Ofi, lat: -35.3160439, lng: 149.1301934, zone_id: Barton;Forrest;Unclassified ACT; } + - { name: Knox Street,stop_code: Wjze1fs, lat: -35.2334888, lng: 149.1522978, zone_id: Watson;Unclassified ACT; } + - { name: Northbourne Avenue,stop_code: Wjz5SDc, lat: -35.2499285, lng: 149.1341368, zone_id: Dickson;Lyneham;Unclassified ACT; } + - { name: Coranderrk Street,stop_code: Wjz5MI3, lat: -35.2850249, lng: 149.1353935, zone_id: City;Reid;Unclassified ACT; } + - { name: Streeton Drive,stop_code: WjrXQeH, lat: -35.3495777, lng: 149.0428125, zone_id: Chapman;Rivett;Stirling;Unclassified ACT; } + - { name: Mirrabei Drive,stop_code: Wjz7BST, lat: -35.167951, lng: 149.1157463, zone_id: Amaroo;Bonner;Ngunnawal;Unclassified ACT; } + - { name: Gungahlin Cycleway,stop_code: Wjz7IFg, lat: -35.1774595, lng: 149.1246602, zone_id: Amaroo;Bonner;Gungahlin;Ngunnawal;Unclassified ACT; } + - { name: Cultivation Street,stop_code: Wjzf0Zf, lat: -35.1960839, lng: 149.1602736, zone_id: Bonner;Gungahlin;Harrison;Unclassified ACT; } + - { name: Kate Crace Street,stop_code: Wjz7W61, lat: -35.1849836, lng: 149.1395562, zone_id: Bonner;Gungahlin;Unclassified ACT; } + - { name: Kosciuszko Avenue,stop_code: Wjz7xO6, lat: -35.1928051, lng: 149.1147348, zone_id: Bonner;Nicholls;Palmerston;Unclassified ACT; } + - { name: Kosciuszko Avenue,stop_code: Wjz7EJ7, lat: -35.1960839, lng: 149.1244553, zone_id: Bonner;Franklin;Gungahlin;Palmerston;Unclassified ACT; } + - { name: Antill Street,stop_code: Wjze0VY, lat: -35.2430274, lng: 149.1613003, zone_id: Hackett;Watson;Unclassified ACT; } + - { name: Andrews Street,stop_code: Wjze0l8, lat: -35.2407007, lng: 149.1533599, zone_id: Downer;Watson;Unclassified ACT; } + - { name: Moonlight Avenue,stop_code: Wjzf2op, lat: -35.1890872, lng: 149.1551345, zone_id: Bonner;Gungahlin;Unclassified ACT; } + - { name: Stott Street,stop_code: Wjzd6Cq, lat: -35.2507889, lng: 149.1563997, zone_id: Ainslie;Hackett;Unclassified ACT; } + - { name: Bugden Avenue,stop_code: Wjz2Gi8, lat: -35.4075441, lng: 149.1204868, zone_id: Fadden;Unclassified ACT; } + - { name: Bugden Avenue,stop_code: Wjz2wuu, lat: -35.415274, lng: 149.1111044, zone_id: Fadden;Gowrie;Unclassified ACT; } + - { name: Sir Harold Raggatt Drive,stop_code: Wjzb6EM, lat: -35.342941, lng: 149.1583643, zone_id: Narrabundah;Symonston;Unclassified ACT; } + - { name: Narrabundah Lane,stop_code: Wjz3YW3, lat: -35.3523419, lng: 149.1490844, zone_id: Symonston;Unclassified ACT; } + - { name: Townsville Street,stop_code: Wjzcg-_, lat: -35.3272591, lng: 149.1832438, zone_id: Fyshwick;Pialligo;Unclassified ACT; } + - { name: Bugden Avenue,stop_code: Wjz2w2r, lat: -35.4182643, lng: 149.1070918, zone_id: Gowrie;Richardson;Unclassified ACT; } + - { name: Ellerston Avenue,stop_code: Wjz1u7M, lat: -35.4260193, lng: 149.0965722, zone_id: Isabella Plains;Unclassified ACT; } + - { name: Moodie Street,stop_code: Wjz3gUQ, lat: -35.3755566, lng: 149.0951557, zone_id: Farrer;Unclassified ACT; } + - { name: Basedow Street,stop_code: Wjz2f_R, lat: -35.3761632, lng: 149.0842481, zone_id: Kambah;Torrens;Unclassified ACT; } + - { name: Wheeler Crescent,stop_code: Wjz2civ, lat: -35.3959622, lng: 149.0767882, zone_id: Kambah;Wanniassa;Unclassified ACT; } + - { name: Sternberg Crescent,stop_code: Wjz2jPU, lat: -35.401368, lng: 149.0939538, zone_id: Wanniassa;Unclassified ACT; } + - { name: Antill Street,stop_code: Wjz5_N2, lat: -35.2487006, lng: 149.1476629, zone_id: Dickson;Downer;Lyneham;Unclassified ACT; } + - { name: Webber Crescent,stop_code: Wjz1BFG, lat: -35.4354872, lng: 149.1142337, zone_id: Calwell;Richardson;Unclassified ACT; } + - { name: Clift Crescent,stop_code: Wjz1vMs, lat: -35.4250115, lng: 149.1042483, zone_id: Isabella Plains;Richardson;Unclassified ACT; } + - { name: Froggatt Street,stop_code: Wjz5H0p, lat: -35.2714838, lng: 149.1180142, zone_id: Acton;Turner;Unclassified ACT; } + - { name: Macrossan Crescent,stop_code: Wjr-Jm9, lat: -35.2124379, lng: 149.0325045, zone_id: Latham;Unclassified ACT; } + - { name: Dalley Crescent,stop_code: Wjr-AY4, lat: -35.2190044, lng: 149.0282415, zone_id: Holt;Latham;Unclassified ACT; } + - { name: Maribyrnong Avenue,stop_code: Wjz6zon, lat: -35.2269858, lng: 149.1109391, zone_id: Bonner;Kaleen;Unclassified ACT; } + - { name: Belconnen Way,stop_code: Wjr-EYe, lat: -35.2408449, lng: 149.0394925, zone_id: Hawker;Scullin;Unclassified ACT; } + - { name: Krefft Street,stop_code: Wjr-PyX, lat: -35.2259882, lng: 149.0472724, zone_id: Florey;Unclassified ACT; } + - { name: King George Terrace,stop_code: Wjz4RbQ, lat: -35.3021238, lng: 149.1308574, zone_id: Barton;Parkes;Unclassified ACT; } + - { name: Musgrave Street,stop_code: Wjz4tUp, lat: -35.3044055, lng: 149.1056974, zone_id: Yarralumla;Unclassified ACT; } + - { name: Hartung Crescent,stop_code: Wjz1zN3, lat: -35.4464057, lng: 149.1147796, zone_id: Calwell;Conder;Theodore;Unclassified ACT; } + - { name: Chippindall Circuit,stop_code: Wjz1xRC, lat: -35.4544199, lng: 149.1154761, zone_id: Conder;Theodore;Unclassified ACT; } + - { name: Horse Park Drive,stop_code: Wjz7Y64, lat: -35.1737092, lng: 149.1394124, zone_id: Amaroo;Bonner;Gungahlin;Unclassified ACT; } + - { name: Mirrabei Drive,stop_code: Wjz7If9, lat: -35.1733145, lng: 149.1190391, zone_id: Amaroo;Bonner;Ngunnawal;Unclassified ACT; } + - { name: Johnson Drive,stop_code: Wjz1BrK, lat: -35.4337687, lng: 149.1114553, zone_id: Calwell;Richardson;Unclassified ACT; } + - { name: Outtrim Avenue,stop_code: Wjz1tE0, lat: -35.4363442, lng: 149.1024781, zone_id: Calwell;Isabella Plains;Unclassified ACT; } + - { name: Constitution Avenue,stop_code: Wjz4_kA, lat: -35.290428, lng: 149.1429573, zone_id: Campbell;Parkes;Unclassified ACT; } + - { name: Gundaroo Drive,stop_code: Wjz7PcG, lat: -35.1807394, lng: 149.1308015, zone_id: Bonner;Gungahlin;Unclassified ACT; } + - { name: Anthony Rolfe Avenue,stop_code: Wjz7WeI, lat: -35.1846679, lng: 149.1417449, zone_id: Bonner;Gungahlin;Unclassified ACT; } + - { name: Goodwin Street,stop_code: Wjz5Sk7, lat: -35.2517234, lng: 149.1312585, zone_id: Lyneham;Unclassified ACT; } + - { name: Bromby Street,stop_code: Wjz3y3C, lat: -35.3623309, lng: 149.107183, zone_id: Mawson;Isaacs;O'Malley;Unclassified ACT; } + - { name: Hawkesbury Crescent,stop_code: Wjz2CDy, lat: -35.3819798, lng: 149.1127298, zone_id: Farrer;Isaacs;Unclassified ACT; } + - { name: Stuart Street,stop_code: Wjz4V11, lat: -35.3256973, lng: 149.1394661, zone_id: Griffith;Narrabundah;Unclassified ACT; } + - { name: Barraclough Crescent,stop_code: Wjz2osM, lat: -35.4171276, lng: 149.1006384, zone_id: Monash;Unclassified ACT; } + - { name: Downard Street,stop_code: Wjz1sG6, lat: -35.4399974, lng: 149.1023765, zone_id: Calwell;Unclassified ACT; } + - { name: Brisbane Avenue,stop_code: Wjz4Qhl, lat: -35.3089153, lng: 149.1316018, zone_id: Barton;Parkes;Unclassified ACT; } + - { name: Hambidge Crescent,stop_code: Wjz2ExG, lat: -35.4190337, lng: 149.1238556, zone_id: Chisholm;Richardson;Unclassified ACT; } + - { name: Johnson Drive,stop_code: Wjz1tbe, lat: -35.4337687, lng: 149.0971677, zone_id: Calwell;Isabella Plains;Unclassified ACT; } + - { name: Bugden Avenue,stop_code: Wjz2zGA, lat: -35.4016851, lng: 149.1141675, zone_id: Fadden;Unclassified ACT; } + - { name: Noarlunga Crescent,stop_code: Wjz1kv5, lat: -35.4365971, lng: 149.0887401, zone_id: Bonython;Isabella Plains;Unclassified ACT; } + - { name: Drumston Street,stop_code: Wjz1mDW, lat: -35.4258444, lng: 149.0913151, zone_id: Isabella Plains;Unclassified ACT; } + - { name: Ellerston Avenue,stop_code: Wjz1uHh, lat: -35.428677, lng: 149.1028378, zone_id: Isabella Plains;Unclassified ACT; } + - { name: Wilson Crescent,stop_code: Wjz0udw, lat: -35.4713366, lng: 149.0976343, zone_id: Banks;Conder;Unclassified ACT; } + - { name: Northbourne Avenue,stop_code: Wjz5RvC, lat: -35.2552151, lng: 149.1332875, zone_id: Dickson;Lyneham;Unclassified ACT; } + - { name: Northbourne Avenue,stop_code: Wjz5PdJ, lat: -35.2676612, lng: 149.1306865, zone_id: Braddon;O'Connor;Turner;Unclassified ACT; } + - { name: Cameron Avenue,stop_code: Wjz60QI, lat: -35.2410106, lng: 149.0717141, zone_id: Belconnen;Unclassified ACT; } + - { name: Cameron Avenue,stop_code: Wjz60Qc, lat: -35.2410063, lng: 149.0710758, zone_id: Belconnen;Unclassified ACT; } + - { name: Chuculba Crescent,stop_code: Wjz6u3h, lat: -35.2089622, lng: 149.095889, zone_id: Bonner;Franklin;Giralang;Unclassified ACT; } + - { name: Maribyrnong Avenue,stop_code: Wjz6sZ1, lat: -35.21859, lng: 149.10511, zone_id: Bonner;Franklin;Giralang;Kaleen;Unclassified ACT; } + - { name: O'Halloran Circuit,stop_code: WjrWYHH, lat: -35.3956133, lng: 149.0592665, zone_id: Kambah;Unclassified ACT; } + - { name: O'Halloran Circuit,stop_code: WjrWYHE, lat: -35.3958129, lng: 149.0592983, zone_id: Kambah;Unclassified ACT; } + - { name: Haydon Drive,stop_code: Wjz5nwb, lat: -35.2493711, lng: 149.0901523, zone_id: Bruce;Unclassified ACT; } + - { name: Bindubi Street,stop_code: Wjz55V-, lat: -35.2594169, lng: 149.0733684, zone_id: Acton;Cook;Unclassified ACT; } + - { name: William Slim Drive,stop_code: Wjz6mip, lat: -35.2096535, lng: 149.0878294, zone_id: Bonner;Giralang;Unclassified ACT; } + - { name: Aikman Drive,stop_code: Wjz69vO, lat: -35.2336108, lng: 149.0786617, zone_id: Belconnen;Bruce;Lawson;Unclassified ACT; } + - { name: Anketell Street,stop_code: Wjz213q, lat: -35.4121336, lng: 149.063177, zone_id: Greenway;Unclassified ACT; } + - { name: Baldwin Drive,stop_code: Wjz6qe4, lat: -35.2286658, lng: 149.0969557, zone_id: Bonner;Kaleen;Lawson;Unclassified ACT; } + - { name: Bradley Street,stop_code: Wjz3ldS, lat: -35.3445222, lng: 149.0870435, zone_id: Phillip;Unclassified ACT; } + - { name: Bradley Street,stop_code: Wjz3ldT, lat: -35.3444271, lng: 149.0869631, zone_id: Phillip;Unclassified ACT; } + - { name: Athllon Drive,stop_code: Wjz3kyX, lat: -35.3523555, lng: 149.0913002, zone_id: Phillip;Unclassified ACT; } + - { name: Dalley Crescent,stop_code: Wjr-AHx, lat: -35.2199899, lng: 149.0262529, zone_id: Holt;Latham;Unclassified ACT; } + - { name: Wheeler Crescent,stop_code: Wjz2jFt, lat: -35.4023147, lng: 149.0919266, zone_id: Kambah;Wanniassa;Unclassified ACT; } + - { name: Darwinia Terrace,stop_code: WjrXIqk, lat: -35.3522608, lng: 149.0341457, zone_id: Chapman;Rivett;Unclassified ACT; } + - { name: Downard Street,stop_code: Wjz1srs, lat: -35.4394729, lng: 149.1002307, zone_id: Calwell;Unclassified ACT; } + - { name: Clift Crescent,stop_code: Wjz1CRl, lat: -35.4269745, lng: 149.1151677, zone_id: Chisholm;Richardson;Unclassified ACT; } + - { name: Heagney Crescent,stop_code: Wjz1TLL, lat: -35.4199685, lng: 149.1361715, zone_id: Chisholm;Gilmore;Unclassified ACT; } + - { name: Groom Street,stop_code: Wjz3nLq, lat: -35.3325054, lng: 149.0919265, zone_id: Curtin;Hughes;Unclassified ACT; } + - { name: Ellerston Avenue,stop_code: Wjz1lKC, lat: -35.4317601, lng: 149.0920382, zone_id: Isabella Plains;Unclassified ACT; } + - { name: Dyson Street,stop_code: Wjz5Kve, lat: -35.2497723, lng: 149.1218849, zone_id: Lyneham;O'Connor;Unclassified ACT; } + - { name: Carruthers Street,stop_code: Wjz49Wd, lat: -35.324698, lng: 149.0833563, zone_id: Curtin;Unclassified ACT; } + - { name: Miller Street,stop_code: Wjz5zJi, lat: -35.2679801, lng: 149.113807, zone_id: Acton;O'Connor;Turner;Unclassified ACT; } + - { name: Dumas Street,stop_code: Wjz6cjg, lat: -35.2200412, lng: 149.0766172, zone_id: McKellar;Bonner;Evatt;Lawson;Unclassified ACT; } + - { name: Kerrigan Street,stop_code: Wjr_FV4, lat: -35.1935916, lng: 149.039268, zone_id: Charnwood;Fraser;Unclassified ACT; } + - { name: Starke Street,stop_code: Wjr-yDR, lat: -35.2278849, lng: 149.0252438, zone_id: Higgins;Holt;Latham;Unclassified ACT; } + - { name: Gilmore Crescent,stop_code: Wjz3tCe, lat: -35.3438411, lng: 149.1012607, zone_id: Garran;Unclassified ACT; } + - { name: Southern Cross Drive,stop_code: Wjr-Hi1, lat: -35.2261454, lng: 149.032398, zone_id: Higgins;Latham;Unclassified ACT; } + - { name: Badimara Street,stop_code: WjrXXqW, lat: -35.3578948, lng: 149.056972, zone_id: Fisher;Waramanga;Unclassified ACT; } + - { name: Blackwood Terrace,stop_code: WjrXTgl, lat: -35.3370298, lng: 149.0436997, zone_id: Duffy;Holder;Unclassified ACT; } + - { name: Mulley Street,stop_code: WjrXTSe, lat: -35.3328347, lng: 149.0489873, zone_id: Holder;Weston;Unclassified ACT; } + - { name: Kerrigan Street,stop_code: Wjr_xnT, lat: -35.1892671, lng: 149.0223682, zone_id: Dunlop;Unclassified ACT; } + - { name: Osburn Drive,stop_code: Wjr-thp, lat: -35.2158247, lng: 149.0109263, zone_id: Macgregor;Unclassified ACT; } + - { name: Tillyard Drive,stop_code: Wjr_MjV, lat: -35.1979805, lng: 149.0445264, zone_id: Charnwood;Flynn;Fraser;Unclassified ACT; } + - { name: Florey Drive,stop_code: Wjr-CS2, lat: -35.2068071, lng: 149.0268212, zone_id: Charnwood;Latham;Macgregor;Unclassified ACT; } + - { name: Lithgow Street,stop_code: Wjzc8im, lat: -35.3300635, lng: 149.1644887, zone_id: Fyshwick;Unclassified ACT; } + - { name: Caley Crescent,stop_code: Wjz3_o2, lat: -35.3372978, lng: 149.1435685, zone_id: Narrabundah;Symonston;Unclassified ACT; } + - { name: Jerrabomberra Avenue,stop_code: Wjzb5vw, lat: -35.3436462, lng: 149.155296, zone_id: Narrabundah;Symonston;Unclassified ACT; } + - { name: Alinga Street,stop_code: Wjz5F-1, lat: -35.2783161, lng: 149.1271286, zone_id: Acton;City;Unclassified ACT; } + - { name: Canberra Avenue;Manuka Circle,stop_code: Wjz4OqF, lat: -35.3195494, lng: 149.1335622, zone_id: Forrest;Griffith;Red Hill;Unclassified ACT; } + - { name: East Row,stop_code: Wjz5Nds, lat: -35.2787886, lng: 149.1304779, zone_id: Braddon;City;Unclassified ACT; } + - { name: Gilmore Crescent,stop_code: Wjz3C4O, lat: -35.3400601, lng: 149.1074834, zone_id: Garran;Red Hill;Unclassified ACT; } + - { name: Ainsworth Street,stop_code: Wjz3lVG, lat: -35.3476365, lng: 149.095065, zone_id: Garran;Phillip;Unclassified ACT; } + - { name: Kent Street,stop_code: Wjz4gYg, lat: -35.329258, lng: 149.0944878, zone_id: Hughes;Unclassified ACT; } + - { name: McCaughey Street,stop_code: Wjz5Hw8, lat: -35.2715996, lng: 149.1231371, zone_id: Acton;Turner;Unclassified ACT; } + - { name: Macarthur Avenue,stop_code: Wjz5Jpp, lat: -35.2597672, lng: 149.1221194, zone_id: Acton;Lyneham;O'Connor;Unclassified ACT; } + - { name: Scrivener Street,stop_code: Wjz5Juf, lat: -35.2558204, lng: 149.1217923, zone_id: Lyneham;O'Connor;Unclassified ACT; } + - { name: Marcus Clarke Street,stop_code: Wjz5GMT, lat: -35.2764151, lng: 149.1267199, zone_id: Acton;City;Unclassified ACT; } + - { name: Iron Knob Street,stop_code: WjzbnGh, lat: -35.3359862, lng: 149.1796321, zone_id: Fyshwick;Pialligo;Symonston;Unclassified ACT; } + - { name: Alpen Street,stop_code: Wjr-_Ua, lat: -35.2054509, lng: 149.0613315, zone_id: Melba;Evatt;Spence;Unclassified ACT; } + - { name: Copland Drive,stop_code: Wjz66lY, lat: -35.2073806, lng: 149.0665685, zone_id: Bonner;Evatt;Spence;Unclassified ACT; } + - { name: Lennox Crossing,stop_code: Wjz4Lh5, lat: -35.2924038, lng: 149.1201999, zone_id: Acton;Parkes;Yarralumla;Unclassified ACT; } + - { name: Russell Drive,stop_code: Wjz4-WL, lat: -35.2970826, lng: 149.149927, zone_id: Campbell;Russell;Unclassified ACT; } + - { name: National Circuit,stop_code: Wjz4PuC, lat: -35.3109115, lng: 149.1332413, zone_id: Barton;Forrest;Parkes;Unclassified ACT; } + - { name: Sydney Avenue,stop_code: Wjz4P6x, lat: -35.3112617, lng: 149.1291119, zone_id: Barton;Forrest;Parkes;Unclassified ACT; } + - { name: Ellerston Avenue,stop_code: Wjz1lun, lat: -35.4316552, lng: 149.0890556, zone_id: Bonython;Isabella Plains;Unclassified ACT; } + - { name: Hambidge Crescent,stop_code: Wjz2Ep9, lat: -35.4191211, lng: 149.1218171, zone_id: Chisholm;Richardson;Unclassified ACT; } + - { name: Box Hill Avenue,stop_code: Wjz1p8y, lat: -35.4581564, lng: 149.0976236, zone_id: Conder;Unclassified ACT; } + - { name: Templestowe Avenue,stop_code: Wjz1whX, lat: -35.4629103, lng: 149.1104982, zone_id: Conder;Unclassified ACT; } + - { name: Pocket Avenue,stop_code: Wjz0mNo, lat: -35.4741647, lng: 149.0932462, zone_id: Banks;Gordon;Unclassified ACT; } + - { name: Jim Pike Avenue,stop_code: Wjz18th, lat: -35.4602703, lng: 149.078022, zone_id: Gordon;Unclassified ACT; } + - { name: Tharwa Drive,stop_code: Wjz1ixR, lat: -35.4517314, lng: 149.0910093, zone_id: Conder;Gordon;Unclassified ACT; } + - { name: Jenolan Street,stop_code: Wjzf0LE, lat: -35.1953415, lng: 149.1582308, zone_id: Bonner;Gungahlin;Harrison;Unclassified ACT; } + - { name: Goodwin Street,stop_code: Wjz5Tho, lat: -35.2488671, lng: 149.1317091, zone_id: Lyneham;Unclassified ACT; } + - { name: Northbourne Avenue,stop_code: Wjz6MyH, lat: -35.2424532, lng: 149.1348634, zone_id: Downer;Lyneham;Unclassified ACT; } + - { name: La Perouse Street,stop_code: Wjz3S3t, lat: -35.340463, lng: 149.1289947, zone_id: Red Hill;Symonston;Unclassified ACT; } + - { name: Cunningham Street,stop_code: Wjz4WYQ, lat: -35.3179239, lng: 149.150152, zone_id: Fyshwick;Griffith;Kingston;Unclassified ACT; } + - { name: Giles Street,stop_code: Wjz4OYm, lat: -35.3177313, lng: 149.1384361, zone_id: Griffith;Kingston;Unclassified ACT; } + - { name: Campbell Street,stop_code: Wjz5XwW, lat: -35.2714003, lng: 149.1461465, zone_id: Ainslie;Unclassified ACT; } + - { name: Shakespeare Crescent,stop_code: Wjr_O0I, lat: -35.1888592, lng: 149.0415483, zone_id: Fraser;Unclassified ACT; } + - { name: Bugden Avenue,stop_code: Wjz2z-1, lat: -35.3992364, lng: 149.1161738, zone_id: Fadden;Unclassified ACT; } + - { name: Heagney Crescent,stop_code: Wjz1LhA, lat: -35.4243494, lng: 149.1210339, zone_id: Chisholm;Richardson;Unclassified ACT; } + - { name: Torrens Street,stop_code: Wjz5Pwn, lat: -35.2709457, lng: 149.1344196, zone_id: Braddon;Unclassified ACT; } + - { name: Streeton Drive,stop_code: WjrXPR4, lat: -35.3556673, lng: 149.048857, zone_id: Chapman;Fisher;Stirling;Unclassified ACT; } + - { name: Parkinson Street,stop_code: WjrX-0-, lat: -35.3424839, lng: 149.052828, zone_id: Stirling;Weston;Unclassified ACT; } + - { name: Edinburgh Avenue,stop_code: Wjz5EKJ, lat: -35.28346, lng: 149.1252, zone_id: Acton;City;Unclassified ACT; } + - { name: Chippindall Circuit,stop_code: Wjz1F5W, lat: -35.4547272, lng: 149.1186974, zone_id: Conder;Theodore;Unclassified ACT; } + - { name: Fullagar Crescent,stop_code: Wjr-yQP, lat: -35.2301148, lng: 149.0278969, zone_id: Higgins;Holt;Unclassified ACT; } + - { name: Harrison Street,stop_code: Wjr-Nmt, lat: -35.2340935, lng: 149.0438829, zone_id: Florey;Page;Scullin;Unclassified ACT; } + - { name: Larakia Street,stop_code: Wjz351q, lat: -35.3476392, lng: 149.0630875, zone_id: Waramanga;Weston;Unclassified ACT; } + - { name: Dunstan Street,stop_code: Wjz4aH6, lat: -35.3184453, lng: 149.0804542, zone_id: Curtin;Unclassified ACT; } + - { name: O'Loghlen Street,stop_code: Wjr-IMR, lat: -35.2216889, lng: 149.0389433, zone_id: Florey;Latham;Unclassified ACT; } + - { name: Bunbury Street,stop_code: WjrXZhO, lat: -35.3476305, lng: 149.0552983, zone_id: Stirling;Waramanga;Weston;Unclassified ACT; } + - { name: Drakeford Drive,stop_code: Wjz2a26, lat: -35.4069683, lng: 149.0736259, zone_id: Greenway;Oxley;Wanniassa;Unclassified ACT; } + - { name: Whyalla Street,stop_code: Wjzbnmb, lat: -35.3331064, lng: 149.1753196, zone_id: Fyshwick;Pialligo;Symonston;Unclassified ACT; } + - { name: Kalgoorlie Crescent,stop_code: WjrXW7A, lat: -35.3597972, lng: 149.0523061, zone_id: Fisher;Unclassified ACT; } + - { name: Kalgoorlie Crescent,stop_code: WjrXXk0, lat: -35.3567398, lng: 149.0543328, zone_id: Fisher;Waramanga;Unclassified ACT; } + - { name: Gungurra Crescent,stop_code: WjrXRmc, lat: -35.3440337, lng: 149.0435395, zone_id: Chapman;Duffy;Rivett;Stirling;Unclassified ACT; } + - { name: Hindmarsh Drive,stop_code: Wjz3knt, lat: -35.3486981, lng: 149.0879033, zone_id: Phillip;Unclassified ACT; } + - { name: Warragamba Avenue,stop_code: WjrYEpn, lat: -35.3306598, lng: 149.0341649, zone_id: Duffy;Unclassified ACT; } + - { name: Beaurepaire Crescent,stop_code: Wjr-syd, lat: -35.2203046, lng: 149.0133355, zone_id: Holt;Unclassified ACT; } + - { name: Duggan Street,stop_code: Wjz1scZ, lat: -35.4387125, lng: 149.0981386, zone_id: Calwell;Unclassified ACT; } + - { name: Hardwick Crescent,stop_code: Wjr-zom, lat: -35.2270626, lng: 149.0231771, zone_id: Higgins;Holt;Latham;Unclassified ACT; } + - { name: Kareelah Vista,stop_code: Wjz3z3D, lat: -35.3568273, lng: 149.1071615, zone_id: Mawson;Isaacs;O'Malley;Unclassified ACT; } + - { name: Brindabella Circuit,stop_code: Wjzcrp_, lat: -35.3142011, lng: 149.1887666, zone_id: Fyshwick;Pialligo;Unclassified ACT; } + - { name: Brazel Street,stop_code: Wjr-GeX, lat: -35.2287693, lng: 149.0321955, zone_id: Higgins;Scullin;Unclassified ACT; } + - { name: Lhotsky Street,stop_code: Wjr_Es4, lat: -35.1970405, lng: 149.0338265, zone_id: Charnwood;Fraser;Unclassified ACT; } + - { name: Alinga Street,stop_code: Wjz5FSY, lat: -35.2780524, lng: 149.1269928, zone_id: Acton;City;Unclassified ACT; } + - { name: Fincham Crescent,stop_code: Wjz2cy0, lat: -35.3964903, lng: 149.0791164, zone_id: Kambah;Wanniassa;Unclassified ACT; } + - { name: Brindabella Circuit,stop_code: WjzcrrQ, lat: -35.3131274, lng: 149.188611, zone_id: Fyshwick;Pialligo;Unclassified ACT; } + - { name: Leverrier Crescent,stop_code: Wjz6oEz, lat: -35.243821, lng: 149.1030282, zone_id: Bruce;O'Connor;Unclassified ACT; } + - { name: Curran Drive,stop_code: Wjz7ilp, lat: -35.1856235, lng: 149.0877402, zone_id: Bonner;Nicholls;Unclassified ACT; } + - { name: McClelland Avenue,stop_code: Wjz7jsi, lat: -35.1807665, lng: 149.0890046, zone_id: Bonner;Nicholls;Unclassified ACT; } + - { name: Ryder Place,stop_code: Wjz7qkM, lat: -35.1864502, lng: 149.0992461, zone_id: Bonner;Nicholls;Unclassified ACT; } + - { name: Anne Clark Avenue,stop_code: Wjz7rOj, lat: -35.1820066, lng: 149.104114, zone_id: Bonner;Ngunnawal;Nicholls;Unclassified ACT; } + - { name: Kelleway Avenue,stop_code: Wjz7r-a, lat: -35.1793714, lng: 149.1053784, zone_id: Bonner;Ngunnawal;Nicholls;Unclassified ACT; } + - { name: Battye Street,stop_code: Wjz5vj2, lat: -35.2473747, lng: 149.0982287, zone_id: Bruce;O'Connor;Unclassified ACT; } + - { name: William Webb Drive,stop_code: Wjz6ddQ, lat: -35.212863, lng: 149.0759771, zone_id: McKellar;Bonner;Evatt;Unclassified ACT; } + - { name: Kingsford Smith Drive,stop_code: Wjr-Rry, lat: -35.2143707, lng: 149.0454751, zone_id: Melba;Flynn;Unclassified ACT; } + - { name: Jabanungga Avenue,stop_code: Wjz7tLG, lat: -35.1677443, lng: 149.1032921, zone_id: Bonner;Ngunnawal;Unclassified ACT; } + - { name: Deumonga Court,stop_code: Wjz7BED, lat: -35.1720853, lng: 149.1141026, zone_id: Bonner;Ngunnawal;Unclassified ACT; } + - { name: Genoa Street,stop_code: Wjz7JZQ, lat: -35.1689499, lng: 149.1281264, zone_id: Amaroo;Bonner;Ngunnawal;Unclassified ACT; } + - { name: Naas Close,stop_code: Wjz7IDY, lat: -35.1730154, lng: 149.1242809, zone_id: Amaroo;Bonner;Ngunnawal;Unclassified ACT; } + - { name: Shoalhaven Avenue,stop_code: Wjz7IuJ, lat: -35.1736356, lng: 149.1225108, zone_id: Amaroo;Bonner;Ngunnawal;Unclassified ACT; } + - { name: Oodgeroo Avenue,stop_code: Wjz6_7M, lat: -35.2008784, lng: 149.1404901, zone_id: Bonner;Franklin;Gungahlin;Unclassified ACT; } + - { name: Burrowa Street,stop_code: Wjz7xJz, lat: -35.191011, lng: 149.1141277, zone_id: Bonner;Nicholls;Palmerston;Unclassified ACT; } + - { name: Kosciuszko Avenue,stop_code: Wjz7EjH, lat: -35.1978404, lng: 149.1211679, zone_id: Bonner;Franklin;Gungahlin;Palmerston;Unclassified ACT; } + - { name: Grimwade Street,stop_code: Wjz6QPM, lat: -35.2200763, lng: 149.1377788, zone_id: Bonner;Franklin;Mitchell;Unclassified ACT; } + - { name: Federal Highway,stop_code: Wjzebjj, lat: -35.2253369, lng: 149.1645164, zone_id: Bonner;Watson;Unclassified ACT; } + - { name: Officer Crescent,stop_code: Wjzd6lW, lat: -35.2515158, lng: 149.1544172, zone_id: Ainslie;Dickson;Hackett;Unclassified ACT; } + - { name: National Circuit,stop_code: Wjz4Pt5, lat: -35.3116531, lng: 149.1326324, zone_id: Barton;Forrest;Parkes;Unclassified ACT; } + - { name: Gilmore Crescent,stop_code: Wjz3uJV, lat: -35.339486, lng: 149.1035524, zone_id: Garran;Red Hill;Unclassified ACT; } + - { name: McCaughey Street,stop_code: Wjz5Guy, lat: -35.2727878, lng: 149.1223747, zone_id: Acton;Turner;Unclassified ACT; } + - { name: Brigalow Street,stop_code: Wjz5KgT, lat: -35.2544701, lng: 149.1213129, zone_id: Lyneham;O'Connor;Unclassified ACT; } + - { name: Ainslie Avenue,stop_code: Wjz5NRJ, lat: -35.2787111, lng: 149.1375365, zone_id: Braddon;City;Reid;Unclassified ACT; } + - { name: White Crescent,stop_code: Wjzd0yM, lat: -35.2866868, lng: 149.1570161, zone_id: Campbell;Unclassified ACT; } + - { name: Blamey Crescent,stop_code: Wjzc7bs, lat: -35.2911202, lng: 149.1523397, zone_id: Campbell;Unclassified ACT; } + - { name: Morshead Drive,stop_code: Wjzcd8D, lat: -35.3039101, lng: 149.1635732, zone_id: Campbell;Fyshwick;Unclassified ACT; } + - { name: Joynton Smith Drive,stop_code: Wjr-WVG, lat: -35.2322356, lng: 149.062079, zone_id: Belconnen;Florey;Unclassified ACT; } + - { name: Kootara Crescent,stop_code: Wjzc090, lat: -35.3312849, lng: 149.15186, zone_id: Fyshwick;Griffith;Narrabundah;Symonston;Unclassified ACT; } + - { name: Monaro Crescent,stop_code: Wjz3ShE, lat: -35.3422498, lng: 149.1321257, zone_id: Red Hill;Symonston;Unclassified ACT; } + - { name: Gladstone Street,stop_code: Wjzcod5, lat: -35.3281204, lng: 149.1848684, zone_id: Fyshwick;Pialligo;Unclassified ACT; } + - { name: Gouger Street,stop_code: Wjz2nug, lat: -35.3773453, lng: 149.0890124, zone_id: Kambah;Torrens;Unclassified ACT; } + - { name: Combes Road,stop_code: Wjzcdvn, lat: -35.2991044, lng: 149.1658966, zone_id: Campbell;Unclassified ACT; } + - { name: Julia Flynn Avenue,stop_code: Wjz3xDo, lat: -35.3656556, lng: 149.1125474, zone_id: Isaacs;Unclassified ACT; } + - { name: Julia Flynn Avenue,stop_code: Wjz3wEM, lat: -35.3759264, lng: 149.1143713, zone_id: Farrer;Isaacs;Unclassified ACT; } + - { name: Bradfield Street,stop_code: Wjz6Upw, lat: -35.2433821, lng: 149.1442189, zone_id: Downer;Lyneham;Watson;Unclassified ACT; } + - { name: Yamba Drive,stop_code: Wjz3tp2, lat: -35.3475867, lng: 149.0997372, zone_id: Garran;Phillip;Unclassified ACT; } + - { name: Golden Grove,stop_code: Wjz4M0c, lat: -35.3316757, lng: 149.1286729, zone_id: Griffith;Red Hill;Symonston;Unclassified ACT; } + - { name: Knox Street,stop_code: Wjze0vc, lat: -35.2389219, lng: 149.1547225, zone_id: Watson;Unclassified ACT; } + - { name: Arthur Circle,stop_code: Wjz4F-D, lat: -35.3217932, lng: 149.127895, zone_id: Forrest;Griffith;Red Hill;Unclassified ACT; } + - { name: Sturt Avenue,stop_code: Wjz3_JM, lat: -35.3340521, lng: 149.1474054, zone_id: Griffith;Narrabundah;Symonston;Unclassified ACT; } + - { name: Lhotsky Street,stop_code: Wjr-L8R, lat: -35.2052394, lng: 149.0319524, zone_id: Charnwood;Dunlop;Unclassified ACT; } + - { name: Shumack Street,stop_code: WjrZSQm, lat: -35.251846, lng: 149.0492258, zone_id: Weetangera;Unclassified ACT; } + - { name: Antill Street,stop_code: Wjzd7Av, lat: -35.2462823, lng: 149.1564391, zone_id: Hackett;Watson;Unclassified ACT; } + - { name: Tipiloura Street,stop_code: Wjz7CqS, lat: -35.1653247, lng: 149.1116147, zone_id: Bonner;Ngunnawal;Unclassified ACT; } + - { name: Eggleston Crescent,stop_code: Wjz3cal, lat: -35.3521568, lng: 149.0752845, zone_id: Chifley;Unclassified ACT; } + - { name: Partridge Street,stop_code: Wjz2yJp, lat: -35.4053755, lng: 149.11391, zone_id: Fadden;Gowrie;Unclassified ACT; } + - { name: Verbrugghen Street,stop_code: Wjr-RZx, lat: -35.213153, lng: 149.050965, zone_id: Melba;Flynn;Unclassified ACT; } + - { name: Gawler Crescent,stop_code: Wjz4yIs, lat: -35.3178977, lng: 149.1139422, zone_id: Deakin;Unclassified ACT; } + - { name: Copland Drive,stop_code: Wjr-ZRJ, lat: -35.2127453, lng: 149.0607491, zone_id: Melba;Evatt;Unclassified ACT; } + - { name: Alpen Street,stop_code: Wjz66fx, lat: -35.2062629, lng: 149.0647145, zone_id: Melba;Bonner;Evatt;Spence;Unclassified ACT; } + - { name: Cockle Street,stop_code: Wjz5AGB, lat: -35.2642702, lng: 149.1141435, zone_id: Acton;O'Connor;Turner;Unclassified ACT; } + - { name: Kingsford Smith Drive,stop_code: Wjr-SS5, lat: -35.2065999, lng: 149.0489353, zone_id: Melba;Flynn;Unclassified ACT; } + - { name: Ellenborough Street,stop_code: Wjz6FEI, lat: -35.2382959, lng: 149.1252507, zone_id: Lyneham;Unclassified ACT; } + - { name: Macarthur Avenue,stop_code: Wjz5Jaa, lat: -35.2590481, lng: 149.1191164, zone_id: Acton;Lyneham;O'Connor;Unclassified ACT; } + - { name: Kingsford Smith Drive,stop_code: Wjr-_Hp, lat: -35.2034703, lng: 149.0589653, zone_id: Melba;Evatt;Spence;Unclassified ACT; } + - { name: Copland Drive,stop_code: Wjr-YdU, lat: -35.2186771, lng: 149.0542242, zone_id: Melba;Evatt;Florey;Unclassified ACT; } + - { name: Dumas Street,stop_code: Wjz64OE, lat: -35.2207286, lng: 149.0717368, zone_id: McKellar;Bonner;Evatt;Unclassified ACT; } + - { name: Coulter Drive,stop_code: WjrZ_so, lat: -35.2468109, lng: 149.0562979, zone_id: Belconnen;Macquarie;Unclassified ACT; } + - { name: O'Hanlon Place,stop_code: Wjz79-a, lat: -35.1903384, lng: 149.0833628, zone_id: Bonner;Nicholls;Unclassified ACT; } + - { name: Moynihan Street,stop_code: Wjr-ZXo, lat: -35.214551, lng: 149.0617978, zone_id: Melba;Evatt;Unclassified ACT; } + - { name: William Webb Drive,stop_code: Wjz6eNd, lat: -35.2100405, lng: 149.0820067, zone_id: McKellar;Bonner;Evatt;Unclassified ACT; } + - { name: Moynihan Street,stop_code: Wjz65GS, lat: -35.2147682, lng: 149.0705542, zone_id: McKellar;Bonner;Evatt;Unclassified ACT; } + - { name: Ashkanasy Crescent,stop_code: Wjz66Fg, lat: -35.2104421, lng: 149.0698018, zone_id: McKellar;Bonner;Evatt;Unclassified ACT; } + - { name: Marconi Crescent,stop_code: Wjz27dd, lat: -35.3775909, lng: 149.0640777, zone_id: Kambah;Unclassified ACT; } + - { name: Summerland Circuit,stop_code: Wjz26WN, lat: -35.3854988, lng: 149.073226, zone_id: Kambah;Wanniassa;Unclassified ACT; } + - { name: Summerland Circuit,stop_code: Wjz25Ox, lat: -35.3909341, lng: 149.0714764, zone_id: Kambah;Unclassified ACT; } + - { name: Learmonth Drive,stop_code: WjrWXNL, lat: -35.4020721, lng: 149.0607315, zone_id: Greenway;Kambah;Unclassified ACT; } + - { name: Copland Drive,stop_code: Wjz66Cd, lat: -35.2065831, lng: 149.0682105, zone_id: Bonner;Evatt;Spence;Unclassified ACT; } + - { name: Copland Drive,stop_code: Wjz67yW, lat: -35.2040813, lng: 149.0692143, zone_id: Bonner;Evatt;Spence;Unclassified ACT; } + - { name: Baddeley Crescent,stop_code: Wjz701y, lat: -35.1992909, lng: 149.0633518, zone_id: Bonner;Spence;Unclassified ACT; } + - { name: Kingsford Smith Drive,stop_code: Wjr_UTL, lat: -35.1947749, lng: 149.060646, zone_id: Spence;Unclassified ACT; } + - { name: Clarey Crescent,stop_code: Wjz70zz, lat: -35.1978567, lng: 149.0687555, zone_id: Bonner;Spence;Unclassified ACT; } + - { name: Copland Drive,stop_code: Wjz67_t, lat: -35.200411, lng: 149.0727116, zone_id: Bonner;Evatt;Spence;Unclassified ACT; } + - { name: Bimbimbie Street,stop_code: Wjz68IH, lat: -35.2411129, lng: 149.0812786, zone_id: Bruce;Unclassified ACT; } + - { name: Bandjalong Crescent,stop_code: Wjz5d81, lat: -35.2605056, lng: 149.0749293, zone_id: Acton;Aranda;Unclassified ACT; } + - { name: Carbeen Street,stop_code: WjrXJ-g, lat: -35.3443528, lng: 149.0396647, zone_id: Chapman;Duffy;Rivett;Unclassified ACT; } + - { name: Amy Ackman Street,stop_code: Wjz7-xb, lat: -35.1662448, lng: 149.1450965, zone_id: Bonner;Unclassified ACT; } + - { name: Beattie Crescent,stop_code: Wjz2wOo, lat: -35.418544, lng: 149.1153584, zone_id: Chisholm;Gowrie;Richardson;Unclassified ACT; } + - { name: Gundaroo Drive,stop_code: Wjz7oZp, lat: -35.1966204, lng: 149.1057315, zone_id: Bonner;Franklin;Nicholls;Unclassified ACT; } + - { name: Barritt Street,stop_code: WjrWTJo, lat: -35.3779591, lng: 149.0479511, zone_id: Kambah;Unclassified ACT; } + - { name: Northbourne Avenue,stop_code: Wjz5P8K, lat: -35.2710632, lng: 149.1307122, zone_id: Braddon;Turner;Unclassified ACT; } + - { name: Northbourne Avenue,stop_code: Wjz5O3Q, lat: -35.274617, lng: 149.1295599, zone_id: Turner;Unclassified ACT; } + - { name: Northbourne Avenue,stop_code: Wjz5Qi2, lat: -35.2645608, lng: 149.1311834, zone_id: Braddon;Turner;Unclassified ACT; } + - { name: Dalley Crescent,stop_code: Wjr-I4P, lat: -35.2191133, lng: 149.0306838, zone_id: Holt;Latham;Unclassified ACT; } + - { name: Maribyrnong Avenue,stop_code: Wjz6zth, lat: -35.2241129, lng: 149.1109391, zone_id: Bonner;Franklin;Kaleen;Unclassified ACT; } + - { name: Le Souef Crescent,stop_code: Wjr-PWf, lat: -35.225611, lng: 149.0504341, zone_id: Florey;Unclassified ACT; } + - { name: Bugden Avenue,stop_code: Wjz2I99, lat: -35.3971025, lng: 149.119092, zone_id: Fadden;Unclassified ACT; } + - { name: Vonwiller Crescent,stop_code: Wjz1zWz, lat: -35.4457437, lng: 149.1168111, zone_id: Calwell;Conder;Theodore;Unclassified ACT; } + - { name: Deamer Crescent,stop_code: Wjz1S2v, lat: -35.4289254, lng: 149.1290251, zone_id: Chisholm;Richardson;Unclassified ACT; } + - { name: Chuculba Crescent,stop_code: Wjz6sdJ, lat: -35.21822, lng: 149.09782, zone_id: Bonner;Franklin;Giralang;Kaleen;Lawson;Unclassified ACT; } + - { name: Baldwin Drive,stop_code: Wjz6rsL, lat: -35.2242562, lng: 149.1005043, zone_id: Bonner;Franklin;Kaleen;Lawson;Unclassified ACT; } + - { name: Bindubi Street,stop_code: Wjz5eb2, lat: -35.252833, lng: 149.0749872, zone_id: Aranda;Bruce;Macquarie;Unclassified ACT; } + - { name: Maribyrnong Avenue,stop_code: Wjz6pLi, lat: -35.2336222, lng: 149.1026958, zone_id: Bruce;Kaleen;Unclassified ACT; } + - { name: Maribyrnong Avenue,stop_code: Wjz6Apq, lat: -35.2212504, lng: 149.1111434, zone_id: Bonner;Franklin;Kaleen;Unclassified ACT; } + - { name: Baldwin Drive,stop_code: Wjz6iYm, lat: -35.2298806, lng: 149.0944438, zone_id: Bonner;Kaleen;Lawson;Unclassified ACT; } + - { name: Athllon Drive,stop_code: Wjz239F, lat: -35.4026063, lng: 149.0647649, zone_id: Greenway;Kambah;Unclassified ACT; } + - { name: Athllon Drive,stop_code: Wjz238T, lat: -35.4027681, lng: 149.0650277, zone_id: Greenway;Kambah;Unclassified ACT; } + - { name: Baldwin Drive,stop_code: Wjz6qea, lat: -35.2288148, lng: 149.0970523, zone_id: Bonner;Kaleen;Lawson;Unclassified ACT; } + - { name: Pitman,stop_code: Wjz20ni, lat: -35.4149428, lng: 149.0656523, zone_id: Greenway;Unclassified ACT; } + - { name: Bradley Street,stop_code: Wjz3ll7, lat: -35.3444741, lng: 149.0873533, zone_id: Phillip;Unclassified ACT; } + - { name: Cohen Street,stop_code: Wjr-UJ-, lat: -35.240121, lng: 149.0597101, zone_id: Belconnen;Unclassified ACT; } + - { name: David Walsh Avenue,stop_code: Wjz7YzW, lat: -35.1759253, lng: 149.1462691, zone_id: Bonner;Gungahlin;Unclassified ACT; } + - { name: Darwinia Terrace,stop_code: WjrXIbT, lat: -35.351342, lng: 149.0321099, zone_id: Chapman;Rivett;Unclassified ACT; } + - { name: Perry Drive,stop_code: WjrXHuL, lat: -35.3547054, lng: 149.0346008, zone_id: Chapman;Unclassified ACT; } + - { name: Perry Drive,stop_code: WjrXPgO, lat: -35.3592839, lng: 149.0444246, zone_id: Chapman;Unclassified ACT; } + - { name: Streeton Drive,stop_code: WjrXPJX, lat: -35.3557253, lng: 149.0486263, zone_id: Chapman;Fisher;Stirling;Unclassified ACT; } + - { name: Fremantle Drive,stop_code: WjrXQTy, lat: -35.3489683, lng: 149.0495709, zone_id: Chapman;Stirling;Unclassified ACT; } + - { name: Streeton Drive,stop_code: WjrXRBJ, lat: -35.344588, lng: 149.0469995, zone_id: Chapman;Rivett;Stirling;Unclassified ACT; } + - { name: McBryde Crescent,stop_code: Wjz2i3o, lat: -35.4068322, lng: 149.0850166, zone_id: Monash;Oxley;Wanniassa;Unclassified ACT; } + - { name: Newman Morris Circuit,stop_code: Wjz2aaw, lat: -35.4075241, lng: 149.0756429, zone_id: Greenway;Monash;Oxley;Wanniassa;Unclassified ACT; } + - { name: Newman Morris Circuit,stop_code: Wjz29yh, lat: -35.4129642, lng: 149.0794301, zone_id: Monash;Oxley;Unclassified ACT; } + - { name: Amsinck Street,stop_code: Wjz2iPv, lat: -35.4062172, lng: 149.093302, zone_id: Wanniassa;Unclassified ACT; } + - { name: Burrinjuck Crescent,stop_code: WjrXLtK, lat: -35.3335671, lng: 149.0346289, zone_id: Duffy;Unclassified ACT; } + - { name: Horse Park Drive,stop_code: Wjz7smv, lat: -35.1734671, lng: 149.0988597, zone_id: Bonner;Ngunnawal;Unclassified ACT; } + - { name: Lhotsky Street,stop_code: Wjr_Ej0, lat: -35.1981116, lng: 149.0323079, zone_id: Charnwood;Dunlop;Fraser;Unclassified ACT; } + - { name: Antill Street,stop_code: Wjz5_0v, lat: -35.2490065, lng: 149.1400861, zone_id: Dickson;Lyneham;Unclassified ACT; } + - { name: Ratcliffe Crescent,stop_code: Wjr-Xhh, lat: -35.2268712, lng: 149.0546156, zone_id: Florey;Unclassified ACT; } + - { name: Wattle Place,stop_code: Wjz5KHe, lat: -35.2524812, lng: 149.124612, zone_id: Lyneham;O'Connor;Unclassified ACT; } + - { name: Cossington Smith Crescent,stop_code: Wjz6Es1, lat: -35.2412615, lng: 149.1216026, zone_id: Kaleen;Lyneham;Unclassified ACT; } + - { name: Giles Street,stop_code: Wjz4OZS, lat: -35.3170485, lng: 149.1391013, zone_id: Griffith;Kingston;Unclassified ACT; } + - { name: Mugga Lane,stop_code: Wjz3RXq, lat: -35.3462565, lng: 149.1385756, zone_id: Red Hill;Symonston;Unclassified ACT; } + - { name: Mulley Street,stop_code: WjrXTX5, lat: -35.3350148, lng: 149.0502343, zone_id: Holder;Weston;Unclassified ACT; } + - { name: Ellerston Avenue,stop_code: Wjz1mTF, lat: -35.4259406, lng: 149.0936003, zone_id: Isabella Plains;Unclassified ACT; } + - { name: Russell Drive,stop_code: Wjzc55s, lat: -35.3007195, lng: 149.1509863, zone_id: Barton;Campbell;Russell;Unclassified ACT; } + - { name: White Crescent,stop_code: Wjzc7nq, lat: -35.2885152, lng: 149.1537353, zone_id: Campbell;Unclassified ACT; } + - { name: Russell Drive,stop_code: Wjz4-KO, lat: -35.2946955, lng: 149.147399, zone_id: Campbell;Parkes;Russell;Unclassified ACT; } + - { name: Blamey Crescent,stop_code: Wjz4_Oj, lat: -35.2918933, lng: 149.1481428, zone_id: Campbell;Unclassified ACT; } + - { name: Verbrugghen Street,stop_code: Wjr-R_3, lat: -35.2115401, lng: 149.0502887, zone_id: Melba;Flynn;Unclassified ACT; } + - { name: Alfred Hill Drive,stop_code: Wjr--6t, lat: -35.2065912, lng: 149.0521439, zone_id: Melba;Flynn;Unclassified ACT; } + - { name: Macarthur Avenue,stop_code: Wjz5J9d, lat: -35.2594616, lng: 149.1190821, zone_id: Acton;Lyneham;O'Connor;Unclassified ACT; } + - { name: Kingsford Smith Drive,stop_code: Wjr-_zv, lat: -35.2030129, lng: 149.0575605, zone_id: Melba;Evatt;Spence;Unclassified ACT; } + - { name: O'Hanlon Place,stop_code: Wjz79ZQ, lat: -35.190906, lng: 149.0842116, zone_id: Bonner;Nicholls;Unclassified ACT; } + - { name: Lyttleton Crescent,stop_code: Wjz54_n, lat: -35.2606623, lng: 149.072551, zone_id: Acton;Cook;Unclassified ACT; } + - { name: Redfern Street,stop_code: WjrZZB7, lat: -35.2565133, lng: 149.0570071, zone_id: Cook;Macquarie;Unclassified ACT; } + - { name: Gillespie Street,stop_code: WjrZTua, lat: -35.2452775, lng: 149.0448362, zone_id: Hawker;Weetangera;Unclassified ACT; } + - { name: Beetaloo Street,stop_code: WjrZT6b, lat: -35.2452004, lng: 149.0407936, zone_id: Hawker;Unclassified ACT; } + - { name: Moynihan Street,stop_code: Wjz65aB, lat: -35.2148653, lng: 149.0646456, zone_id: Melba;Bonner;Evatt;Unclassified ACT; } + - { name: Marconi Crescent,stop_code: WjrW_RH, lat: -35.3777568, lng: 149.0607135, zone_id: Kambah;Unclassified ACT; } + - { name: Summerland Circuit,stop_code: Wjz2df1, lat: -35.3875049, lng: 149.0748933, zone_id: Kambah;Wanniassa;Unclassified ACT; } + - { name: Summerland Circuit,stop_code: Wjz2d32, lat: -35.3901917, lng: 149.0734943, zone_id: Kambah;Wanniassa;Unclassified ACT; } + - { name: Copland Drive,stop_code: Wjz66C2, lat: -35.2068343, lng: 149.0681005, zone_id: Bonner;Evatt;Spence;Unclassified ACT; } + - { name: Captain Cook Crescent,stop_code: Wjz3_z-, lat: -35.3349223, lng: 149.1461306, zone_id: Griffith;Narrabundah;Symonston;Unclassified ACT; } + - { name: La Perouse Street,stop_code: Wjz4Mq1, lat: -35.3305291, lng: 149.1325996, zone_id: Griffith;Red Hill;Symonston;Unclassified ACT; } + - { name: Kidston Crescent,stop_code: Wjz4aMo, lat: -35.3209613, lng: 149.082268, zone_id: Curtin;Unclassified ACT; } + - { name: Taverner Street,stop_code: Wjz2aVu, lat: -35.4076897, lng: 149.0836236, zone_id: Monash;Oxley;Wanniassa;Unclassified ACT; } + - { name: Gibbons Street,stop_code: Wjz2E0l, lat: -35.4194359, lng: 149.117826, zone_id: Chisholm;Gowrie;Richardson;Unclassified ACT; } + - { name: Matina Street,stop_code: Wjzb7Hz, lat: -35.3351417, lng: 149.1580162, zone_id: Fyshwick;Narrabundah;Symonston;Unclassified ACT; } + - { name: Hellyer Street,stop_code: WjrXLY1, lat: -35.3346674, lng: 149.0391656, zone_id: Duffy;Holder;Unclassified ACT; } + - { name: Tillyard Drive,stop_code: Wjr_MhY, lat: -35.1991196, lng: 149.0445095, zone_id: Charnwood;Flynn;Fraser;Unclassified ACT; } + - { name: Kerrigan Street,stop_code: Wjr_pVW, lat: -35.1938099, lng: 149.0184155, zone_id: Dunlop;Unclassified ACT; } + - { name: Ginninderra Drive,stop_code: Wjr-Df8, lat: -35.2008175, lng: 149.0201835, zone_id: Dunlop;Unclassified ACT; } + - { name: Brownless Street,stop_code: Wjr-sKW, lat: -35.2178207, lng: 149.0156953, zone_id: Holt;Macgregor;Unclassified ACT; } + - { name: Spofforth Street,stop_code: Wjr-kVk, lat: -35.2210905, lng: 149.0066193, zone_id: Holt;Unclassified ACT; } + - { name: Brazel Street,stop_code: Wjr-G5f, lat: -35.2290792, lng: 149.0298564, zone_id: Higgins;Holt;Unclassified ACT; } + - { name: Anketell Street,stop_code: Wjz17Xr, lat: -35.4230293, lng: 149.0727434, zone_id: Greenway;Unclassified ACT; } + - { name: Ross Smith Crescent,stop_code: Wjr-Fzd, lat: -35.2360739, lng: 149.0353153, zone_id: Scullin;Unclassified ACT; } + - { name: Davenport Street,stop_code: Wjz3f1S, lat: -35.3363058, lng: 149.074562, zone_id: Curtin;Lyons;Unclassified ACT; } + - { name: Redfern Street,stop_code: Wjz55vN, lat: -35.2557214, lng: 149.0677248, zone_id: Cook;Macquarie;Unclassified ACT; } + - { name: Goulburn Street,stop_code: WjrZ-WW, lat: -35.2535016, lng: 149.0623511, zone_id: Cook;Macquarie;Unclassified ACT; } + - { name: Crisp Circuit,stop_code: Wjz5fm2, lat: -35.2452775, lng: 149.0763507, zone_id: Belconnen;Bruce;Unclassified ACT; } + - { name: Dobbin Circuit,stop_code: Wjz7iKx, lat: -35.1849518, lng: 149.0920391, zone_id: Bonner;Nicholls;Unclassified ACT; } + - { name: Kelleway Avenue,stop_code: Wjz7jW4, lat: -35.181955, lng: 149.0941886, zone_id: Bonner;Nicholls;Unclassified ACT; } + - { name: Bandjalong Crescent,stop_code: Wjz5l2U, lat: -35.2592266, lng: 149.0857332, zone_id: Acton;Aranda;Bruce;Unclassified ACT; } + - { name: Carbeen Street,stop_code: WjrXJZ6, lat: -35.3445279, lng: 149.0392999, zone_id: Chapman;Rivett;Unclassified ACT; } + - { name: Bugden Avenue,stop_code: Wjz2Ioh, lat: -35.3978546, lng: 149.1219888, zone_id: Fadden;Unclassified ACT; } + - { name: Barritt Street,stop_code: WjrW_1f, lat: -35.3801683, lng: 149.051853, zone_id: Kambah;Unclassified ACT; } + - { name: Mort Street,stop_code: Wjz5Ok1, lat: -35.2742265, lng: 149.1312268, zone_id: Braddon;Turner;Unclassified ACT; } + - { name: Northbourne Avenue,stop_code: Wjz5Sqk, lat: -35.2533948, lng: 149.1329835, zone_id: Dickson;Lyneham;Unclassified ACT; } + - { name: Perry Drive,stop_code: WjrXHZU, lat: -35.3560382, lng: 149.0404158, zone_id: Chapman;Unclassified ACT; } + - { name: Cowper Street,stop_code: Wjz5-5y, lat: -35.2514497, lng: 149.1400942, zone_id: Ainslie;Dickson;Lyneham;Unclassified ACT; } + - { name: Blacklock Close,stop_code: Wjz7qZT, lat: -35.1851647, lng: 149.1061108, zone_id: Bonner;Ngunnawal;Nicholls;Unclassified ACT; } + - { name: Paul Coe Crescent,stop_code: Wjz7Iax, lat: -35.1766844, lng: 149.1196027, zone_id: Amaroo;Bonner;Gungahlin;Ngunnawal;Unclassified ACT; } + - { name: Cowper Street,stop_code: Wjz5YfD, lat: -35.2606676, lng: 149.1416317, zone_id: Ainslie;Braddon;Dickson;Unclassified ACT; } + - { name: Herbert Crescent,stop_code: Wjz5YKO, lat: -35.2618095, lng: 149.1473796, zone_id: Ainslie;Unclassified ACT; } + - { name: Mavis Latham Street,stop_code: Wjz6_vY, lat: -35.2004651, lng: 149.1448522, zone_id: Bonner;Franklin;Gungahlin;Unclassified ACT; } + - { name: Wattle Street,stop_code: Wjz5KBe, lat: -35.2511276, lng: 149.123169, zone_id: Lyneham;O'Connor;Unclassified ACT; } + - { name: Hambidge Crescent,stop_code: Wjz2EWD, lat: -35.4178621, lng: 149.1278682, zone_id: Chisholm;Gilmore;Richardson;Unclassified ACT; } + - { name: Belconnen Way,stop_code: Wjr-EeE, lat: -35.2399953, lng: 149.0319202, zone_id: Hawker;Higgins;Scullin;Unclassified ACT; } + - { name: Casey Crescent,stop_code: Wjz1AvL, lat: -35.4364397, lng: 149.1114638, zone_id: Calwell;Theodore;Unclassified ACT; } + - { name: Giles Street,stop_code: Wjz4Xhv, lat: -35.3142208, lng: 149.1427384, zone_id: Barton;Kingston;Unclassified ACT; } + - { name: Hindmarsh Drive,stop_code: Wjz3slg, lat: -35.3505095, lng: 149.0986214, zone_id: Garran;Phillip;Unclassified ACT; } + - { name: Springvale Drive,stop_code: WjrZRPq, lat: -35.2583292, lng: 149.0493331, zone_id: Weetangera;Unclassified ACT; } + - { name: Petterd Street,stop_code: Wjr-Mfb, lat: -35.2390183, lng: 149.0422199, zone_id: Page;Scullin;Unclassified ACT; } + - { name: Namatjira Drive,stop_code: WjrXZy7, lat: -35.3465366, lng: 149.0571652, zone_id: Stirling;Waramanga;Weston;Unclassified ACT; } + - { name: Ellerston Avenue,stop_code: Wjz1mJc, lat: -35.4271296, lng: 149.0915833, zone_id: Isabella Plains;Unclassified ACT; } + - { name: Kingsford Smith Drive,stop_code: Wjr-Hwn, lat: -35.2269992, lng: 149.0354339, zone_id: Florey;Latham;Unclassified ACT; } + - { name: Badimara Street,stop_code: WjrXXl5, lat: -35.3556198, lng: 149.0543328, zone_id: Fisher;Stirling;Waramanga;Unclassified ACT; } + - { name: Castieau Street,stop_code: Wjr-GkU, lat: -35.2303952, lng: 149.033551, zone_id: Higgins;Scullin;Unclassified ACT; } + - { name: Petterd Street,stop_code: Wjr-U5B, lat: -35.2402319, lng: 149.0522728, zone_id: Page;Unclassified ACT; } + - { name: Monaro Crescent,stop_code: Wjz4FRP, lat: -35.3227824, lng: 149.1267256, zone_id: Forrest;Red Hill;Unclassified ACT; } + - { name: Davenport Street,stop_code: Wjz37RN, lat: -35.3339689, lng: 149.0718047, zone_id: Curtin;Lyons;Unclassified ACT; } + - { name: La Perouse Street,stop_code: Wjz3SjZ, lat: -35.3405155, lng: 149.1324333, zone_id: Red Hill;Symonston;Unclassified ACT; } + - { name: Heagney Crescent,stop_code: Wjz2MHq, lat: -35.4176172, lng: 149.1359148, zone_id: Chisholm;Gilmore;Unclassified ACT; } + - { name: Namatjira Drive,stop_code: WjrXP_E, lat: -35.3546397, lng: 149.0510497, zone_id: Fisher;Stirling;Unclassified ACT; } + - { name: Chewings Street,stop_code: Wjr-Njs, lat: -35.2362142, lng: 149.0439258, zone_id: Page;Scullin;Unclassified ACT; } + - { name: Arrabri Street,stop_code: Wjz7uwD, lat: -35.166579, lng: 149.1018085, zone_id: Bonner;Ngunnawal;Unclassified ACT; } + - { name: Majura Avenue,stop_code: Wjz5-wb, lat: -35.2548248, lng: 149.145206, zone_id: Ainslie;Dickson;Lyneham;Unclassified ACT; } + - { name: Heysen Street,stop_code: WjrYUxL, lat: -35.3307129, lng: 149.0578894, zone_id: Weston;Unclassified ACT; } + - { name: Wakelin Crescent,stop_code: Wjz35am, lat: -35.3465716, lng: 149.0643106, zone_id: Lyons;Waramanga;Weston;Unclassified ACT; } + - { name: Hilder Street,stop_code: WjrX_xU, lat: -35.3368309, lng: 149.0583346, zone_id: Weston;Unclassified ACT; } + - { name: Badimara Street,stop_code: Wjz33z1, lat: -35.3573173, lng: 149.0681086, zone_id: Fisher;Waramanga;Unclassified ACT; } + - { name: Renmark Street,stop_code: WjrXCZu, lat: -35.3390452, lng: 149.0287016, zone_id: Duffy;Unclassified ACT; } + - { name: Windradyne Street,stop_code: Wjz7CDa, lat: -35.162176, lng: 149.1122262, zone_id: Bonner;Ngunnawal;Unclassified ACT; } + - { name: Kosciuszko Avenue,stop_code: Wjz7Fmf, lat: -35.1899217, lng: 149.1203537, zone_id: Bonner;Gungahlin;Palmerston;Unclassified ACT; } + - { name: Norriss Street,stop_code: Wjz2EB2, lat: -35.4162358, lng: 149.1229758, zone_id: Chisholm;Fadden;Unclassified ACT; } + - { name: Carnegie Cresent,stop_code: Wjz3_sf, lat: -35.3341586, lng: 149.1437982, zone_id: Griffith;Narrabundah;Symonston;Unclassified ACT; } + - { name: Bugden Avenue,stop_code: Wjz2HEe, lat: -35.4028569, lng: 149.1245208, zone_id: Fadden;Macarthur;Unclassified ACT; } + - { name: Hoskins Street,stop_code: Wjz6RQW, lat: -35.2136848, lng: 149.1379368, zone_id: Bonner;Franklin;Mitchell;Unclassified ACT; } + - { name: Kootara Crescent,stop_code: Wjz4UYU, lat: -35.3292631, lng: 149.1503427, zone_id: Fyshwick;Griffith;Narrabundah;Unclassified ACT; } + - { name: Caley Crescent,stop_code: Wjz3TJe, lat: -35.3335378, lng: 149.135468, zone_id: Griffith;Narrabundah;Red Hill;Symonston;Unclassified ACT; } + - { name: Sandford Street,stop_code: Wjz6Yaq, lat: -35.2205928, lng: 149.1414139, zone_id: Bonner;Franklin;Mitchell;Unclassified ACT; } + - { name: Gladstone Street,stop_code: Wjzcp0F, lat: -35.3263698, lng: 149.1843675, zone_id: Fyshwick;Pialligo;Unclassified ACT; } + - { name: Ellerston Avenue,stop_code: Wjz1mqt, lat: -35.429085, lng: 149.0892702, zone_id: Bonython;Isabella Plains;Unclassified ACT; } + - { name: Antill Street,stop_code: Wjz5Tx_, lat: -35.2483326, lng: 149.1351531, zone_id: Dickson;Downer;Lyneham;Unclassified ACT; } + - { name: Casey Crescent,stop_code: Wjz1AkS, lat: -35.4385726, lng: 149.1102836, zone_id: Calwell;Theodore;Unclassified ACT; } + - { name: Albany Street,stop_code: WjzcgSm, lat: -35.3273624, lng: 149.1809901, zone_id: Fyshwick;Pialligo;Unclassified ACT; } + - { name: Crisp Circuit,stop_code: Wjz5fcz, lat: -35.2466065, lng: 149.0756831, zone_id: Belconnen;Bruce;Macquarie;Unclassified ACT; } + - { name: Costello Circuit,stop_code: Wjz1B9N, lat: -35.4355831, lng: 149.1088889, zone_id: Calwell;Richardson;Unclassified ACT; } + - { name: Kingsford Smith Drive,stop_code: Wjr-FaP, lat: -35.2369634, lng: 149.032049, zone_id: Higgins;Scullin;Unclassified ACT; } + - { name: Kennedy Street,stop_code: Wjz4WdC, lat: -35.3170135, lng: 149.1415045, zone_id: Griffith;Kingston;Unclassified ACT; } + - { name: Springvale Drive,stop_code: WjrZRBn, lat: -35.256577, lng: 149.0465007, zone_id: Weetangera;Unclassified ACT; } + - { name: Bugden Avenue,stop_code: Wjz2oPY, lat: -35.4174773, lng: 149.1050319, zone_id: Gowrie;Richardson;Unclassified ACT; } + - { name: Beasley Street,stop_code: Wjz3g7D, lat: -35.3705636, lng: 149.085208, zone_id: Kambah;Torrens;Unclassified ACT; } + - { name: Lansell Circuit,stop_code: Wjz2rN0, lat: -35.4027536, lng: 149.1038057, zone_id: Wanniassa;Unclassified ACT; } + - { name: McLorinan Street,stop_code: Wjz1CS7, lat: -35.4261448, lng: 149.1147427, zone_id: Chisholm;Richardson;Unclassified ACT; } + - { name: Clift Crescent,stop_code: Wjz1C75, lat: -35.4256297, lng: 149.1065242, zone_id: Richardson;Unclassified ACT; } + - { name: Ashley Drive,stop_code: Wjz1vJN, lat: -35.4218175, lng: 149.1034264, zone_id: Isabella Plains;Richardson;Unclassified ACT; } + - { name: Knox Street,stop_code: Wjze0GR, lat: -35.2422868, lng: 149.1583488, zone_id: Hackett;Watson;Unclassified ACT; } + - { name: Isabella Drive,stop_code: Wjz1v6h, lat: -35.4211477, lng: 149.0958401, zone_id: Isabella Plains;Monash;Unclassified ACT; } + - { name: Beattie Crescent,stop_code: Wjz1DF5, lat: -35.4242445, lng: 149.1134701, zone_id: Chisholm;Richardson;Unclassified ACT; } + - { name: Johnson Drive,stop_code: Wjz1tR7, lat: -35.4323264, lng: 149.1038057, zone_id: Isabella Plains;Richardson;Unclassified ACT; } + - { name: Castleton Crescent,stop_code: Wjz2pSV, lat: -35.4102112, lng: 149.1049192, zone_id: Gowrie;Wanniassa;Unclassified ACT; } + - { name: Clive Steele Avenue,stop_code: Wjz2phl, lat: -35.4133066, lng: 149.0986965, zone_id: Monash;Unclassified ACT; } + - { name: Carnegie Cresent,stop_code: Wjz3TEu, lat: -35.3369272, lng: 149.1358665, zone_id: Narrabundah;Red Hill;Symonston;Unclassified ACT; } + - { name: Heagney Crescent,stop_code: Wjz2MAp, lat: -35.4170052, lng: 149.1344986, zone_id: Chisholm;Gilmore;Unclassified ACT; } + - { name: Streeton Drive,stop_code: WjrXRgw, lat: -35.3484443, lng: 149.0440974, zone_id: Chapman;Rivett;Stirling;Unclassified ACT; } + - { name: Canberra Avenue,stop_code: Wjzc1ak, lat: -35.3247957, lng: 149.1522656, zone_id: Fyshwick;Narrabundah;Unclassified ACT; } + - { name: Luke Street,stop_code: Wjr-r_9, lat: -35.2227135, lng: 149.0173907, zone_id: Holt;Unclassified ACT; } + - { name: Ellerston Avenue,stop_code: Wjz1ulj, lat: -35.4271383, lng: 149.0986536, zone_id: Isabella Plains;Unclassified ACT; } + - { name: Woodcock Drive,stop_code: Wjz1k8i, lat: -35.4416582, lng: 149.0862081, zone_id: Bonython;Gordon;Unclassified ACT; } + - { name: Longmore Crescent,stop_code: Wjz2lju, lat: -35.3898257, lng: 149.0878711, zone_id: Kambah;Wanniassa;Unclassified ACT; } + - { name: Bramston Street,stop_code: Wjz2y-L, lat: -35.4041512, lng: 149.1169838, zone_id: Fadden;Gowrie;Unclassified ACT; } + - { name: Hawdon Street,stop_code: Wjz5-Oz, lat: -35.2534932, lng: 149.1484676, zone_id: Ainslie;Dickson;Lyneham;Unclassified ACT; } + - { name: Hodgson Crescent,stop_code: Wjz3aPr, lat: -35.3626721, lng: 149.0822706, zone_id: Pearce;Unclassified ACT; } + - { name: Castieau Street,stop_code: Wjr-G4U, lat: -35.2303339, lng: 149.030901, zone_id: Higgins;Scullin;Unclassified ACT; } + - { name: William Webb Drive,stop_code: Wjz64L1, lat: -35.217196, lng: 149.0694819, zone_id: McKellar;Bonner;Evatt;Unclassified ACT; } + - { name: Heysen Street,stop_code: WjrX_SB, lat: -35.3329186, lng: 149.0604857, zone_id: Weston;Unclassified ACT; } + - { name: Northbourne Avenue,stop_code: Wjz5N4m, lat: -35.279266, lng: 149.1287817, zone_id: City;Unclassified ACT; } + - { name: Brindabella Circuit,stop_code: WjzcrG7, lat: -35.3135511, lng: 149.1903315, zone_id: Fyshwick;Pialligo;Unclassified ACT; } + - { name: Barr Smith Avenue,stop_code: Wjz1dDS, lat: -35.4310636, lng: 149.0801678, zone_id: Bonython;Isabella Plains;Unclassified ACT; } + - { name: Florey Drive,stop_code: Wjr-A5E, lat: -35.2186861, lng: 149.0194265, zone_id: Holt;Latham;Macgregor;Unclassified ACT; } + - { name: Hindmarsh Drive,stop_code: WjrXZ6V, lat: -35.3442262, lng: 149.0527449, zone_id: Stirling;Weston;Unclassified ACT; } + - { name: Companion Crescent,stop_code: Wjr-RsJ, lat: -35.2134269, lng: 149.0456746, zone_id: Melba;Flynn;Unclassified ACT; } + - { name: Southern Cross Drive,stop_code: Wjr-GSZ, lat: -35.2285724, lng: 149.0390978, zone_id: Florey;Scullin;Unclassified ACT; } + - { name: Parnell Road,stop_code: Wjzcdml, lat: -35.2999752, lng: 149.1646145, zone_id: Campbell;Unclassified ACT; } + - { name: A'Beckett Street,stop_code: Wjze19V, lat: -35.2378003, lng: 149.1531131, zone_id: Downer;Watson;Unclassified ACT; } + - { name: Flemington Road,stop_code: Wjz6-IS, lat: -35.2078342, lng: 149.147459, zone_id: Bonner;Franklin;Harrison;Mitchell;Unclassified ACT; } + - { name: Northbourne Avenue,stop_code: Wjz5Qmu, lat: -35.2613932, lng: 149.1316889, zone_id: Braddon;Turner;Unclassified ACT; } + - { name: Owen Dixon Drive,stop_code: Wjz6fs9, lat: -35.2028549, lng: 149.0778289, zone_id: Bonner;Evatt;Unclassified ACT; } + - { name: Ainsworth Street,stop_code: Wjz3t4S, lat: -35.3452239, lng: 149.0966044, zone_id: Garran;Phillip;Unclassified ACT; } + - { name: Heard Street,stop_code: Wjz3pb7, lat: -35.3677991, lng: 149.0969262, zone_id: Mawson;Unclassified ACT; } + - { name: Cameron Avenue,stop_code: Wjz60Y4, lat: -35.2410195, lng: 149.0722506, zone_id: Belconnen;Unclassified ACT; } + - { name: Cameron Avenue,stop_code: Wjz60Qa, lat: -35.2411772, lng: 149.0709792, zone_id: Belconnen;Unclassified ACT; } + - { name: Chuculba Crescent,stop_code: Wjz6u32, lat: -35.2088899, lng: 149.09552, zone_id: Bonner;Franklin;Giralang;Unclassified ACT; } + - { name: Maribyrnong Avenue,stop_code: Wjz6sHv, lat: -35.21947, lng: 149.10295, zone_id: Bonner;Franklin;Kaleen;Unclassified ACT; } + - { name: Chuculba Crescent,stop_code: Wjz6uhX, lat: -35.2101981, lng: 149.0994957, zone_id: Bonner;Franklin;Giralang;Kaleen;Unclassified ACT; } + - { name: O'Halloran Circuit,stop_code: WjrWYDE, lat: -35.3931009, lng: 149.0580053, zone_id: Kambah;Unclassified ACT; } + - { name: Chuculba Crescent,stop_code: Wjz6sdP, lat: -35.21844, lng: 149.0979199, zone_id: Bonner;Franklin;Giralang;Kaleen;Lawson;Unclassified ACT; } + - { name: Bindubi Street,stop_code: Wjz5e0m, lat: -35.2546115, lng: 149.0739747, zone_id: Aranda;Bruce;Cook;Macquarie;Unclassified ACT; } + - { name: Gundaroo Drive,stop_code: Wjz7GCd, lat: -35.1846035, lng: 149.123116, zone_id: Bonner;Gungahlin;Ngunnawal;Unclassified ACT; } + - { name: Maribyrnong Avenue,stop_code: Wjz6pLk, lat: -35.2334807, lng: 149.1028323, zone_id: Bruce;Kaleen;Unclassified ACT; } + - { name: Maribyrnong Avenue,stop_code: Wjz6Apy, lat: -35.2213073, lng: 149.1113204, zone_id: Bonner;Franklin;Kaleen;Unclassified ACT; } + - { name: Drakeford Drive,stop_code: Wjz2b2-, lat: -35.4015218, lng: 149.0747826, zone_id: Greenway;Kambah;Wanniassa;Unclassified ACT; } + - { name: Baldwin Drive,stop_code: Wjz6iN7, lat: -35.2318153, lng: 149.0928498, zone_id: Bruce;Kaleen;Lawson;Unclassified ACT; } + - { name: Outtrim Avenue,stop_code: Wjz1tph, lat: -35.435554, lng: 149.0999883, zone_id: Calwell;Isabella Plains;Unclassified ACT; } + - { name: Lousia Lawson Crescent,stop_code: Wjz2NG5, lat: -35.4125634, lng: 149.1353247, zone_id: Chisholm;Gilmore;Unclassified ACT; } + - { name: Kootara Crescent,stop_code: Wjzb7Ct, lat: -35.3328923, lng: 149.1564605, zone_id: Fyshwick;Narrabundah;Symonston;Unclassified ACT; } + - { name: Knoke Avenue,stop_code: Wjz1g4J, lat: -35.4606907, lng: 149.0853605, zone_id: Gordon;Unclassified ACT; } + - { name: Box Hill Avenue,stop_code: Wjz1hOT, lat: -35.4563211, lng: 149.0938578, zone_id: Conder;Unclassified ACT; } + - { name: Cowper Street,stop_code: Wjz5Ycz, lat: -35.2631, lng: 149.1415634, zone_id: Ainslie;Braddon;Unclassified ACT; } + - { name: Learmonth Drive,stop_code: WjrWY3_, lat: -35.3952466, lng: 149.0527528, zone_id: Kambah;Unclassified ACT; } + - { name: Knoke Avenue,stop_code: Wjz0f-r, lat: -35.4649404, lng: 149.0837298, zone_id: Gordon;Unclassified ACT; } + - { name: Flemington Road,stop_code: Wjz6__e, lat: -35.2003125, lng: 149.149283, zone_id: Bonner;Franklin;Gungahlin;Harrison;Unclassified ACT; } + - { name: Hibberson Street,stop_code: Wjz7OtB, lat: -35.185267, lng: 149.1332326, zone_id: Bonner;Gungahlin;Unclassified ACT; } + - { name: Corlette Crescent,stop_code: Wjz2hgy, lat: -35.4142335, lng: 149.0879247, zone_id: Monash;Unclassified ACT; } + - { name: Heagney Crescent,stop_code: Wjz1TJt, lat: -35.421473, lng: 149.1358612, zone_id: Chisholm;Gilmore;Unclassified ACT; } + - { name: Tom Roberts Avenue,stop_code: Wjz0vzz, lat: -35.4670173, lng: 149.1017113, zone_id: Banks;Conder;Unclassified ACT; } + - { name: Pocket Avenue,stop_code: Wjz0n-1, lat: -35.4650774, lng: 149.0941904, zone_id: Banks;Conder;Unclassified ACT; } + - { name: Casey Crescent,stop_code: Wjz1AyS, lat: -35.4399887, lng: 149.1130946, zone_id: Calwell;Theodore;Unclassified ACT; } + - { name: Carnegie Cresent,stop_code: Wjz3TM5, lat: -35.3370322, lng: 149.1367195, zone_id: Narrabundah;Red Hill;Symonston;Unclassified ACT; } + - { name: Hopetoun Circuit,stop_code: Wjz4za9, lat: -35.3140282, lng: 149.1080413, zone_id: Deakin;Yarralumla;Unclassified ACT; } + - { name: Sainsbury Street,stop_code: Wjz2u8E, lat: -35.3868869, lng: 149.0976987, zone_id: Wanniassa;Unclassified ACT; } + - { name: Carnegie Cresent,stop_code: Wjz3_99, lat: -35.3366821, lng: 149.1410968, zone_id: Griffith;Narrabundah;Symonston;Unclassified ACT; } + - { name: Southern Cross Drive,stop_code: Wjr-H6y, lat: -35.2232919, lng: 149.0303753, zone_id: Holt;Latham;Unclassified ACT; } + - { name: Eyre Street,stop_code: Wjz4W3r, lat: -35.3187118, lng: 149.1400025, zone_id: Griffith;Kingston;Unclassified ACT; } + - { name: Springvale Drive,stop_code: WjrZSiu, lat: -35.2532303, lng: 149.0438185, zone_id: Hawker;Weetangera;Unclassified ACT; } + - { name: Goodwin Street,stop_code: Wjz5R7q, lat: -35.255609, lng: 149.1290484, zone_id: Lyneham;O'Connor;Unclassified ACT; } + - { name: Eyre Street,stop_code: Wjz4XoY, lat: -35.3152013, lng: 149.1447822, zone_id: Barton;Kingston;Unclassified ACT; } + - { name: Canberra Avenue,stop_code: Wjz4OV0, lat: -35.3203401, lng: 149.1380928, zone_id: Griffith;Kingston;Red Hill;Unclassified ACT; } + - { name: Ainslie Avenue,stop_code: Wjz5W8A, lat: -35.2767421, lng: 149.1415904, zone_id: Braddon;Campbell;Reid;Unclassified ACT; } + - { name: Clive Steele Avenue,stop_code: Wjz2gct, lat: -35.4166904, lng: 149.0864763, zone_id: Monash;Unclassified ACT; } + - { name: Livingston Avenue,stop_code: Wjz2dA9, lat: -35.3895808, lng: 149.0792666, zone_id: Kambah;Wanniassa;Unclassified ACT; } + - { name: Monaro Crescent,stop_code: Wjz3Sl0, lat: -35.3395178, lng: 149.1313175, zone_id: Red Hill;Symonston;Unclassified ACT; } + - { name: Hambidge Crescent,stop_code: Wjz2Mdj, lat: -35.4162183, lng: 149.1301642, zone_id: Chisholm;Gilmore;Unclassified ACT; } + - { name: Lousia Lawson Crescent,stop_code: Wjz2NPX, lat: -35.4120912, lng: 149.1379211, zone_id: Chisholm;Gilmore;Unclassified ACT; } + - { name: Golden Grove,stop_code: Wjz3LRT, lat: -35.3334087, lng: 149.1268704, zone_id: Griffith;Red Hill;Symonston;Unclassified ACT; } + - { name: Nemarang Crescent,stop_code: Wjz343V, lat: -35.3518396, lng: 149.063817, zone_id: Waramanga;Unclassified ACT; } + - { name: Castleton Crescent,stop_code: Wjz2y3q, lat: -35.4066784, lng: 149.1071079, zone_id: Fadden;Gowrie;Unclassified ACT; } + - { name: La Perouse Street,stop_code: Wjz3THj, lat: -35.3351417, lng: 149.1357593, zone_id: Griffith;Narrabundah;Red Hill;Symonston;Unclassified ACT; } + - { name: Fremantle Drive,stop_code: WjrXPDA, lat: -35.354316, lng: 149.0467689, zone_id: Chapman;Stirling;Unclassified ACT; } + - { name: Vosper Street,stop_code: Wjz2dpP, lat: -35.3914351, lng: 149.0786872, zone_id: Kambah;Wanniassa;Unclassified ACT; } + - { name: Longmore Crescent,stop_code: Wjz2trh, lat: -35.3902281, lng: 149.0999518, zone_id: Wanniassa;Unclassified ACT; } + - { name: Sheaffe Street,stop_code: WjrXSso, lat: -35.3402005, lng: 149.0451918, zone_id: Holder;Unclassified ACT; } + - { name: Starke Street,stop_code: Wjr-sWn, lat: -35.2201542, lng: 149.0175409, zone_id: Holt;Unclassified ACT; } + - { name: Wray Place,stop_code: Wjz2yqD, lat: -35.4069058, lng: 149.1112707, zone_id: Fadden;Gowrie;Unclassified ACT; } + - { name: Morrison Circuit,stop_code: WjzcdbC, lat: -35.3019589, lng: 149.1635899, zone_id: Campbell;Unclassified ACT; } + - { name: Gillespie Street,stop_code: WjrZTAV, lat: -35.2467467, lng: 149.0472517, zone_id: Weetangera;Unclassified ACT; } + - { name: Duggan Street,stop_code: Wjz1t8G, lat: -35.4361834, lng: 149.0977567, zone_id: Calwell;Isabella Plains;Unclassified ACT; } + - { name: Wheeler Crescent,stop_code: Wjz2kcM, lat: -35.3951784, lng: 149.0869484, zone_id: Kambah;Wanniassa;Unclassified ACT; } + - { name: Julia Flynn Avenue,stop_code: Wjz3xoJ, lat: -35.369995, lng: 149.1115174, zone_id: Farrer;Isaacs;Unclassified ACT; } + - { name: Marshall Street,stop_code: Wjz3oyt, lat: -35.3740893, lng: 149.1015074, zone_id: Farrer;Unclassified ACT; } + - { name: Forsythe Street,stop_code: Wjz0mV8, lat: -35.4741064, lng: 149.0944157, zone_id: Banks;Unclassified ACT; } + - { name: Phillip Avenue,stop_code: Wjzd7ky, lat: -35.2466766, lng: 149.1539071, zone_id: Downer;Watson;Unclassified ACT; } + - { name: McKenna Street,stop_code: Wjz2sJ8, lat: -35.3944787, lng: 149.1026554, zone_id: Wanniassa;Unclassified ACT; } + - { name: Owen Dixon Drive,stop_code: Wjz6eKC, lat: -35.2064842, lng: 149.0811548, zone_id: Bonner;Evatt;Unclassified ACT; } + - { name: Kitchener Street,stop_code: Wjz3td5, lat: -35.3446288, lng: 149.0969048, zone_id: Garran;Phillip;Unclassified ACT; } + - { name: Wilkins Street,stop_code: Wjz3on-, lat: -35.3705987, lng: 149.0995655, zone_id: Mawson;Farrer;Unclassified ACT; } + - { name: Stuart Street,stop_code: Wjz4Udu, lat: -35.3280782, lng: 149.1414402, zone_id: Griffith;Narrabundah;Unclassified ACT; } + - { name: Penton Place,stop_code: Wjz2NpB, lat: -35.4132804, lng: 149.1333828, zone_id: Chisholm;Gilmore;Unclassified ACT; } + - { name: Gladstone Street,stop_code: Wjzchnw, lat: -35.3216794, lng: 149.1758154, zone_id: Fyshwick;Pialligo;Unclassified ACT; } + - { name: Kingsford Smith Drive,stop_code: Wjr_UUU, lat: -35.2001327, lng: 149.0624944, zone_id: Bonner;Evatt;Spence;Unclassified ACT; } + - { name: Clarey Crescent,stop_code: Wjz70lp, lat: -35.1966753, lng: 149.0658519, zone_id: Bonner;Spence;Unclassified ACT; } + - { name: Sternberg Crescent,stop_code: Wjz2jaA, lat: -35.4017026, lng: 149.0865836, zone_id: Kambah;Wanniassa;Unclassified ACT; } + - { name: Dawes Street,stop_code: Wjz4W_O, lat: -35.3160505, lng: 149.150152, zone_id: Barton;Fyshwick;Kingston;Unclassified ACT; } + - { name: Scattergood Place,stop_code: Wjz67Dq, lat: -35.2006561, lng: 149.0686086, zone_id: Bonner;Evatt;Spence;Unclassified ACT; } + - { name: Heagney Crescent,stop_code: Wjz1DVu, lat: -35.4241746, lng: 149.1165922, zone_id: Chisholm;Richardson;Unclassified ACT; } + - { name: Tuggeranong Parkway,stop_code: WjrXUsW, lat: -35.3730527, lng: 149.0568719, zone_id: Kambah;Unclassified ACT; } + - { name: Lexcen Avenue,stop_code: Wjz7zga, lat: -35.1835162, lng: 149.1093724, zone_id: Bonner;Ngunnawal;Nicholls;Unclassified ACT; } + - { name: Spofforth Street,stop_code: Wjr-i_s, lat: -35.2279939, lng: 149.0067611, zone_id: Holt;Unclassified ACT; } + - { name: Brierly Street,stop_code: WjrX-3w, lat: -35.340876, lng: 149.0522964, zone_id: Holder;Weston;Unclassified ACT; } + - { name: Mawson Drive,stop_code: Wjz3iNO, lat: -35.3641274, lng: 149.0938692, zone_id: Mawson;Unclassified ACT; } + - { name: Andrew Crescent,stop_code: Wjz1siH, lat: -35.4402334, lng: 149.0991471, zone_id: Calwell;Unclassified ACT; } + - { name: Divine Court,stop_code: Wjz3kcA, lat: -35.3508773, lng: 149.0866243, zone_id: Phillip;Unclassified ACT; } + - { name: Redfern Street,stop_code: Wjz55Cn, lat: -35.2558587, lng: 149.0684841, zone_id: Cook;Macquarie;Unclassified ACT; } + - { name: Atkins Street,stop_code: Wjz2l5-, lat: -35.3884613, lng: 149.0858326, zone_id: Kambah;Wanniassa;Unclassified ACT; } + - { name: La Perouse Street,stop_code: Wjz3Sbz, lat: -35.3406731, lng: 149.130545, zone_id: Red Hill;Symonston;Unclassified ACT; } + - { name: Cowper Street,stop_code: Wjz5-6R, lat: -35.2505265, lng: 149.1404751, zone_id: Ainslie;Dickson;Lyneham;Unclassified ACT; } + - { name: Knox Street,stop_code: Wjze0vq, lat: -35.2391147, lng: 149.1551087, zone_id: Watson;Unclassified ACT; } + - { name: Hindmarsh Drive,stop_code: WjrXBSJ, lat: -35.3439387, lng: 149.0276931, zone_id: Duffy;Unclassified ACT; } + - { name: Anketell Street,stop_code: Wjz17Su, lat: -35.4207299, lng: 149.0712843, zone_id: Greenway;Unclassified ACT; } + - { name: Northbourne Avenue,stop_code: Wjz5QmR, lat: -35.2615172, lng: 149.1322602, zone_id: Braddon;Turner;Unclassified ACT; } + - { name: Marr Street,stop_code: Wjz3imr, lat: -35.3605372, lng: 149.087796, zone_id: Pearce;Unclassified ACT; } + - { name: Milne Bay Road,stop_code: Wjzce6F, lat: -35.2948619, lng: 149.1622541, zone_id: Campbell;Unclassified ACT; } + - { name: Kitchener Street,stop_code: Wjz3uDU, lat: -35.338154, lng: 149.1022456, zone_id: Garran;Hughes;Red Hill;Unclassified ACT; } + - { name: Spalding Street,stop_code: Wjr_Mxy, lat: -35.1992913, lng: 149.0468658, zone_id: Flynn;Fraser;Unclassified ACT; } + - { name: Chewings Street,stop_code: Wjr-N9a, lat: -35.2377693, lng: 149.0421213, zone_id: Page;Scullin;Unclassified ACT; } + - { name: Parliament Drive,stop_code: Wjz4IrL, lat: -35.307326, lng: 149.1225503, zone_id: Parkes;Yarralumla;Unclassified ACT; } + - { name: Melbourne Avenue,stop_code: Wjz4Hbx, lat: -35.3133913, lng: 149.1195724, zone_id: Deakin;Forrest;Yarralumla;Unclassified ACT; } + - { name: Clift Crescent,stop_code: Wjz1CD8, lat: -35.4260286, lng: 149.1122294, zone_id: Chisholm;Richardson;Unclassified ACT; } + - { name: Kingsford Smith Drive,stop_code: Wjr-SAW, lat: -35.2081966, lng: 149.0473834, zone_id: Melba;Flynn;Unclassified ACT; } + - { name: Canopus Crescent,stop_code: Wjz6t4U, lat: -35.21388, lng: 149.09676, zone_id: Bonner;Franklin;Giralang;Kaleen;Unclassified ACT; } + - { name: Bindubi Street,stop_code: Wjz5d57, lat: -35.256585, lng: 149.0734919, zone_id: Bruce;Cook;Macquarie;Unclassified ACT; } + - { name: Mouat Street,stop_code: Wjz5Ti2, lat: -35.2480353, lng: 149.1313351, zone_id: Lyneham;Unclassified ACT; } + - { name: Baldwin Drive,stop_code: Wjz6kCT, lat: -35.217402, lng: 149.0910262, zone_id: Bonner;Giralang;Lawson;Unclassified ACT; } + - { name: Spalding Street,stop_code: Wjr-TRM, lat: -35.2021703, lng: 149.0498418, zone_id: Melba;Flynn;Unclassified ACT; } + - { name: Dalley Crescent,stop_code: Wjr-IeY, lat: -35.2176259, lng: 149.032238, zone_id: Latham;Unclassified ACT; } + - { name: Heagney Crescent,stop_code: Wjz1TJ1, lat: -35.4218927, lng: 149.1354535, zone_id: Chisholm;Gilmore;Unclassified ACT; } + - { name: Boddington Crescent,stop_code: WjrWZsS, lat: -35.3891768, lng: 149.0567055, zone_id: Kambah;Unclassified ACT; } + - { name: Callaway Crescent,stop_code: Wjz18Pt, lat: -35.4613271, lng: 149.0822867, zone_id: Gordon;Unclassified ACT; } + - { name: Athllon Drive,stop_code: Wjz3hL_, lat: -35.3650156, lng: 149.0926464, zone_id: Mawson;Torrens;Unclassified ACT; } + - { name: Casey Crescent,stop_code: Wjz1AUn, lat: -35.4412474, lng: 149.1165707, zone_id: Calwell;Theodore;Unclassified ACT; } + - { name: Baldwin Drive,stop_code: Wjz6rp1, lat: -35.2268254, lng: 149.0996755, zone_id: Bonner;Kaleen;Lawson;Unclassified ACT; } + - { name: Bowes Street,stop_code: Wjz3leq, lat: -35.344135, lng: 149.0864401, zone_id: Phillip;Unclassified ACT; } + - { name: Wattle Street,stop_code: Wjz5KMK, lat: -35.2545971, lng: 149.1265378, zone_id: Lyneham;O'Connor;Unclassified ACT; } + - { name: Denison Street,stop_code: Wjz4iW6, lat: -35.3191233, lng: 149.0941367, zone_id: Deakin;Unclassified ACT; } + - { name: Gaunson Crescent,stop_code: Wjz2thr, lat: -35.3914613, lng: 149.0987448, zone_id: Wanniassa;Unclassified ACT; } + - { name: Callam Street,stop_code: Wjz3lmt, lat: -35.3439501, lng: 149.0877369, zone_id: Phillip;Unclassified ACT; } + - { name: Southern Cross Drive,stop_code: Wjr-Ayn, lat: -35.2201542, lng: 149.0244529, zone_id: Holt;Latham;Unclassified ACT; } + - { name: Kootara Crescent,stop_code: Wjz4U-l, lat: -35.3274305, lng: 149.1494868, zone_id: Fyshwick;Griffith;Narrabundah;Unclassified ACT; } + - { name: Springvale Drive,stop_code: WjrZSnl, lat: -35.2498834, lng: 149.0437756, zone_id: Hawker;Weetangera;Unclassified ACT; } + - { name: Bowes Street,stop_code: Wjz3leo, lat: -35.344368, lng: 149.0864991, zone_id: Phillip;Unclassified ACT; } + - { name: Perry Drive,stop_code: WjrXHvw, lat: -35.3546272, lng: 149.0344542, zone_id: Chapman;Unclassified ACT; } + - { name: Darwinia Terrace,stop_code: WjrXBWu, lat: -35.3466197, lng: 149.0287455, zone_id: Chapman;Rivett;Unclassified ACT; } + - { name: Perry Drive,stop_code: WjrXHYJ, lat: -35.356246, lng: 149.0401055, zone_id: Chapman;Unclassified ACT; } + - { name: Namatjira Drive,stop_code: WjrXPFr, lat: -35.3585046, lng: 149.0479415, zone_id: Chapman;Fisher;Unclassified ACT; } + - { name: Fremantle Drive,stop_code: WjrXRyK, lat: -35.3465911, lng: 149.0470392, zone_id: Chapman;Rivett;Stirling;Unclassified ACT; } + - { name: Corinna Street,stop_code: Wjz3dXS, lat: -35.3459117, lng: 149.0842511, zone_id: Phillip;Unclassified ACT; } + - { name: Newman Morris Circuit,stop_code: Wjz2azE, lat: -35.4068027, lng: 149.0799162, zone_id: Monash;Oxley;Wanniassa;Unclassified ACT; } + - { name: Archdall Street,stop_code: Wjr-uUL, lat: -35.210513, lng: 149.0180445, zone_id: Macgregor;Unclassified ACT; } + - { name: Marcus Clarke Street,stop_code: Wjz5FIS, lat: -35.279312, lng: 149.1254166, zone_id: Acton;City;Unclassified ACT; } + - { name: National Circuit,stop_code: Wjz4Quk, lat: -35.3055692, lng: 149.1330442, zone_id: Barton;Parkes;Unclassified ACT; } + - { name: MacFarland Crescent,stop_code: Wjz3b9L, lat: -35.3581358, lng: 149.0757975, zone_id: Chifley;Pearce;Unclassified ACT; } + - { name: Tallara Parkway,stop_code: Wjz3_QR, lat: -35.3343365, lng: 149.1488109, zone_id: Griffith;Narrabundah;Symonston;Unclassified ACT; } + - { name: Bunbury Street,stop_code: WjrXRUs, lat: -35.3481643, lng: 149.0506742, zone_id: Stirling;Weston;Unclassified ACT; } + - { name: Streeton Drive,stop_code: WjrXQ80, lat: -35.3539222, lng: 149.042016, zone_id: Chapman;Stirling;Unclassified ACT; } + - { name: Alfred Hill Drive,stop_code: Wjr--sV, lat: -35.2083253, lng: 149.0568878, zone_id: Melba;Evatt;Unclassified ACT; } + - { name: Eucumbene Drive,stop_code: WjrXCNB, lat: -35.3418283, lng: 149.0275536, zone_id: Duffy;Unclassified ACT; } + - { name: Lhotsky Street,stop_code: Wjr-DQE, lat: -35.2028856, lng: 149.0277547, zone_id: Charnwood;Dunlop;Unclassified ACT; } + - { name: Alpen Street,stop_code: Wjr-_Nn, lat: -35.2043934, lng: 149.0601598, zone_id: Melba;Evatt;Spence;Unclassified ACT; } + - { name: Bowman Street,stop_code: Wjz56Xu, lat: -35.2524925, lng: 149.0726439, zone_id: Macquarie;Unclassified ACT; } + - { name: O'Hanlon Place,stop_code: Wjz7hbe, lat: -35.1921183, lng: 149.0860955, zone_id: Bonner;Nicholls;Unclassified ACT; } + - { name: Coulter Drive,stop_code: WjrZ_o4, lat: -35.2492379, lng: 149.0556338, zone_id: Macquarie;Weetangera;Unclassified ACT; } + - { name: Morrison Circuit,stop_code: Wjzcd4Y, lat: -35.3013986, lng: 149.1626994, zone_id: Campbell;Unclassified ACT; } + - { name: Kinsella Street,stop_code: Wjr-xEt, lat: -35.2381595, lng: 149.0260301, zone_id: Higgins;Unclassified ACT; } + - { name: Hawker Place,stop_code: Wjr-Mgt, lat: -35.2436863, lng: 149.0438835, zone_id: Hawker;Page;Weetangera;Unclassified ACT; } + - { name: Clancy Street,stop_code: Wjz66WS, lat: -35.2092634, lng: 149.0731992, zone_id: McKellar;Bonner;Evatt;Unclassified ACT; } + - { name: Summerland Circuit,stop_code: Wjz26WW, lat: -35.3853577, lng: 149.0733293, zone_id: Kambah;Wanniassa;Unclassified ACT; } + - { name: Vansittart Crescent,stop_code: Wjz2498, lat: -35.3972167, lng: 149.0640703, zone_id: Greenway;Kambah;Unclassified ACT; } + - { name: Baddeley Crescent,stop_code: Wjz70go, lat: -35.2001419, lng: 149.0658463, zone_id: Bonner;Evatt;Spence;Unclassified ACT; } + - { name: Forsythe Street,stop_code: Wjz0t7T, lat: -35.4748549, lng: 149.0964971, zone_id: Banks;Unclassified ACT; } + - { name: Phillip Avenue,stop_code: Wjzd7p6, lat: -35.2483939, lng: 149.1545615, zone_id: Dickson;Hackett;Unclassified ACT; } + - { name: McCubbin Street,stop_code: WjrX_bF, lat: -35.3353506, lng: 149.0538045, zone_id: Holder;Weston;Unclassified ACT; } + - { name: Heydon Crescent,stop_code: Wjz6eJR, lat: -35.2073083, lng: 149.0815196, zone_id: Bonner;Evatt;Unclassified ACT; } + - { name: Ainsworth Street,stop_code: Wjz3kSP, lat: -35.3495644, lng: 149.0939007, zone_id: Garran;Phillip;Unclassified ACT; } + - { name: Beasley Street,stop_code: Wjz3ovI, lat: -35.3708086, lng: 149.1004882, zone_id: Mawson;Farrer;Unclassified ACT; } + - { name: Jindabyne Street,stop_code: WjrYEg0, lat: -35.3320285, lng: 149.0323493, zone_id: Duffy;Unclassified ACT; } + - { name: Parkhill Street,stop_code: Wjz39GV, lat: -35.369019, lng: 149.0816284, zone_id: Pearce;Torrens;Unclassified ACT; } + - { name: Owen Dixon Drive,stop_code: Wjz70IW, lat: -35.197242, lng: 149.0706277, zone_id: Bonner;Spence;Unclassified ACT; } + - { name: Tobruk Road,stop_code: Wjzcend, lat: -35.2937972, lng: 149.1643403, zone_id: Campbell;Unclassified ACT; } + - { name: Powell Street,stop_code: Wjr-rUs, lat: -35.2272548, lng: 149.0178319, zone_id: Higgins;Holt;Unclassified ACT; } + - { name: Wirraway Crescent,stop_code: Wjr-GFM, lat: -35.2324613, lng: 149.03753, zone_id: Florey;Scullin;Unclassified ACT; } + - { name: Redfern Street,stop_code: WjrZZlR, lat: -35.2567539, lng: 149.055397, zone_id: Cook;Macquarie;Weetangera;Unclassified ACT; } + - { name: Erskine Street,stop_code: WjrZ_Fk, lat: -35.2485228, lng: 149.0588536, zone_id: Belconnen;Macquarie;Unclassified ACT; } + - { name: Leverrier Crescent,stop_code: Wjz5vrT, lat: -35.2469189, lng: 149.1007523, zone_id: Bruce;O'Connor;Unclassified ACT; } + - { name: Jabanungga Avenue,stop_code: Wjz7B0w, lat: -35.1727054, lng: 149.107275, zone_id: Bonner;Ngunnawal;Unclassified ACT; } + - { name: Manning Clark Crescent,stop_code: Wjz7Wqb, lat: -35.1875672, lng: 149.1438549, zone_id: Bonner;Gungahlin;Unclassified ACT; } + - { name: Drakeford Drive,stop_code: WjrW_uo, lat: -35.3773291, lng: 149.056161, zone_id: Kambah;Unclassified ACT; } + - { name: Aikman Drive,stop_code: Wjz69uI, lat: -35.2341477, lng: 149.0784965, zone_id: Belconnen;Bruce;Lawson;Unclassified ACT; } + - { name: Beasley Street,stop_code: Wjz3om2, lat: -35.3716164, lng: 149.0983753, zone_id: Mawson;Farrer;Unclassified ACT; } + - { name: Gundaroo Drive,stop_code: Wjz7oYv, lat: -35.196789, lng: 149.1057064, zone_id: Bonner;Franklin;Nicholls;Unclassified ACT; } + - { name: Barritt Street,stop_code: WjrWTJq, lat: -35.3778081, lng: 149.0480034, zone_id: Kambah;Unclassified ACT; } + - { name: Streeton Drive,stop_code: WjrXQ2W, lat: -35.3523853, lng: 149.0417814, zone_id: Chapman;Rivett;Stirling;Unclassified ACT; } + - { name: Gurrang Avenue,stop_code: Wjz7AJS, lat: -35.174204, lng: 149.1143555, zone_id: Bonner;Ngunnawal;Unclassified ACT; } + - { name: Proserpine Circuit,stop_code: Wjz7RdE, lat: -35.169243, lng: 149.1307293, zone_id: Amaroo;Bonner;Unclassified ACT; } + - { name: Kosciuszko Avenue,stop_code: Wjz7E3Z, lat: -35.1976337, lng: 149.1187656, zone_id: Bonner;Franklin;Nicholls;Palmerston;Unclassified ACT; } + - { name: Bugden Avenue,stop_code: Wjz2pM3, lat: -35.4141023, lng: 149.1038088, zone_id: Gowrie;Unclassified ACT; } + - { name: Newlop Street,stop_code: Wjz7txI, lat: -35.1716718, lng: 149.1018381, zone_id: Bonner;Ngunnawal;Unclassified ACT; } + - { name: Sternberg Crescent,stop_code: Wjz2inZ, lat: -35.4036615, lng: 149.0884505, zone_id: Wanniassa;Unclassified ACT; } + - { name: Coulter Drive,stop_code: WjrZ-ie, lat: -35.2531953, lng: 149.0545473, zone_id: Macquarie;Weetangera;Unclassified ACT; } + - { name: Phillip Avenue,stop_code: Wjz6UXL, lat: -35.2414017, lng: 149.1500125, zone_id: Downer;Lyneham;Watson;Unclassified ACT; } + - { name: Clive Steele Avenue,stop_code: Wjz2g2J, lat: -35.4180544, lng: 149.0854464, zone_id: Monash;Unclassified ACT; } + - { name: Tillyard Drive,stop_code: Wjr-Lwx, lat: -35.2055346, lng: 149.035862, zone_id: Charnwood;Flynn;Latham;Unclassified ACT; } + - { name: Ellerston Avenue,stop_code: Wjz1mgS, lat: -35.4303729, lng: 149.0883324, zone_id: Bonython;Isabella Plains;Unclassified ACT; } + - { name: Kirkton Street,stop_code: Wjz2kwl, lat: -35.3974348, lng: 149.0903173, zone_id: Kambah;Wanniassa;Unclassified ACT; } + - { name: Gurrang Avenue,stop_code: Wjz7BqG, lat: -35.1711551, lng: 149.1115106, zone_id: Bonner;Ngunnawal;Unclassified ACT; } + - { name: La Perouse Street,stop_code: Wjz3KYr, lat: -35.3399904, lng: 149.1277073, zone_id: Red Hill;Symonston;Unclassified ACT; } + - { name: Ferguson Circuit,stop_code: Wjz7AGv, lat: -35.1762193, lng: 149.113913, zone_id: Bonner;Ngunnawal;Nicholls;Unclassified ACT; } + - { name: McKinlay Street,stop_code: Wjz4UG8, lat: -35.3305991, lng: 149.1465686, zone_id: Griffith;Narrabundah;Symonston;Unclassified ACT; } + - { name: Dalley Crescent,stop_code: Wjr-J8t, lat: -35.2161747, lng: 149.0315719, zone_id: Latham;Unclassified ACT; } + - { name: Macrossan Crescent,stop_code: Wjr-J44, lat: -35.2135626, lng: 149.0296181, zone_id: Latham;Unclassified ACT; } + - { name: Florey Drive,stop_code: Wjr-BB3, lat: -35.2129096, lng: 149.0241561, zone_id: Latham;Macgregor;Unclassified ACT; } + - { name: Tom Roberts Avenue,stop_code: Wjz1olx, lat: -35.4603062, lng: 149.0989218, zone_id: Conder;Unclassified ACT; } + - { name: Learmonth Drive,stop_code: WjrWXIP, lat: -35.4004264, lng: 149.0594265, zone_id: Greenway;Kambah;Unclassified ACT; } + - { name: Eagle Circuit,stop_code: WjrWSBZ, lat: -35.383041, lng: 149.0472484, zone_id: Kambah;Unclassified ACT; } + - { name: Soward Way,stop_code: Wjz20xf, lat: -35.4185878, lng: 149.0681837, zone_id: Greenway;Unclassified ACT; } + - { name: Scantlebury Crescent,stop_code: Wjz1Iwx, lat: -35.4417543, lng: 149.1237805, zone_id: Calwell;Theodore;Unclassified ACT; } + - { name: Ellerston Avenue,stop_code: Wjz1uyf, lat: -35.4289043, lng: 149.1011427, zone_id: Isabella Plains;Unclassified ACT; } + - { name: Clare Dennis Avenue,stop_code: Wjz1j87, lat: -35.4467627, lng: 149.0860043, zone_id: Gordon;Unclassified ACT; } + - { name: Wheeler Crescent,stop_code: Wjz2ju4, lat: -35.398974, lng: 149.088665, zone_id: Kambah;Wanniassa;Unclassified ACT; } + - { name: Archibald Street,stop_code: Wjz5LCR, lat: -35.2450118, lng: 149.1240058, zone_id: Lyneham;O'Connor;Unclassified ACT; } + - { name: Wheeler Crescent,stop_code: Wjz2jsF, lat: -35.4005569, lng: 149.0895394, zone_id: Kambah;Wanniassa;Unclassified ACT; } + - { name: Springvale Drive,stop_code: WjrZTlr, lat: -35.2459406, lng: 149.043797, zone_id: Hawker;Weetangera;Unclassified ACT; } + - { name: Dalrymple Street,stop_code: Wjz3SUg, lat: -35.3430098, lng: 149.1385112, zone_id: Narrabundah;Red Hill;Symonston;Unclassified ACT; } + - { name: Monaro Crescent,stop_code: Wjz4FNU, lat: -35.3257936, lng: 149.1270045, zone_id: Griffith;Red Hill;Unclassified ACT; } + - { name: The Valley Avenue,stop_code: Wjz7GPB, lat: -35.1867085, lng: 149.1264936, zone_id: Bonner;Gungahlin;Palmerston;Unclassified ACT; } + - { name: Kosciuszko Avenue,stop_code: Wjz7FNw, lat: -35.193955, lng: 149.126474, zone_id: Bonner;Franklin;Gungahlin;Palmerston;Unclassified ACT; } + - { name: Darling Street,stop_code: Wjz6YiM, lat: -35.2207864, lng: 149.1433105, zone_id: Bonner;Franklin;Mitchell;Unclassified ACT; } + - { name: Antill Street,stop_code: Wjz5_x5, lat: -35.2484816, lng: 149.144927, zone_id: Dickson;Downer;Lyneham;Unclassified ACT; } + - { name: Maribyrnong Avenue,stop_code: Wjz6qc3, lat: -35.2301323, lng: 149.0969048, zone_id: Bonner;Kaleen;Lawson;Unclassified ACT; } + - { name: Strickland Crescent,stop_code: Wjz4iXK, lat: -35.3184054, lng: 149.094995, zone_id: Deakin;Unclassified ACT; } + - { name: Mulligans Flat Road,stop_code: Wjz7SUe, lat: -35.1666579, lng: 149.1383395, zone_id: Amaroo;Bonner;Unclassified ACT; } + - { name: Paul Coe Crescent,stop_code: Wjz7IcS, lat: -35.1749486, lng: 149.1199081, zone_id: Amaroo;Bonner;Gungahlin;Ngunnawal;Unclassified ACT; } + - { name: Madigan Street,stop_code: Wjzd6XP, lat: -35.2527713, lng: 149.1610527, zone_id: Hackett;Unclassified ACT; } + - { name: Yamba Drive,stop_code: Wjz3mWn, lat: -35.3409621, lng: 149.0945298, zone_id: Garran;Phillip;Unclassified ACT; } + - { name: O'Reilly Street,stop_code: Wjr-tgp, lat: -35.216543, lng: 149.0108488, zone_id: Macgregor;Unclassified ACT; } + - { name: Sturt Avenue,stop_code: Wjz4VN-, lat: -35.3253297, lng: 149.1489933, zone_id: Fyshwick;Griffith;Narrabundah;Unclassified ACT; } + - { name: Westbury Circuit,stop_code: Wjz7y6I, lat: -35.1846912, lng: 149.1074626, zone_id: Bonner;Ngunnawal;Nicholls;Unclassified ACT; } + - { name: Wisdom Street,stop_code: Wjz3n-4, lat: -35.3330183, lng: 149.0941258, zone_id: Garran;Hughes;Unclassified ACT; } + - { name: Macpherson Street,stop_code: Wjz5Imu, lat: -35.2614148, lng: 149.1208459, zone_id: Acton;O'Connor;Turner;Unclassified ACT; } + - { name: Limestone Avenue,stop_code: Wjz5VAq, lat: -35.2796604, lng: 149.14553, zone_id: Campbell;Reid;Unclassified ACT; } + - { name: Euree Street,stop_code: Wjz5Vg4, lat: -35.2821666, lng: 149.1422877, zone_id: Campbell;Reid;Unclassified ACT; } + - { name: Mildura Street,stop_code: Wjzc1n0, lat: -35.3216636, lng: 149.1532292, zone_id: Fyshwick;Unclassified ACT; } + - { name: Jerrabomberra Avenue,stop_code: Wjzb6cp, lat: -35.3401203, lng: 149.1523581, zone_id: Fyshwick;Narrabundah;Symonston;Unclassified ACT; } + - { name: Townsville Street,stop_code: WjzcgX_, lat: -35.3293219, lng: 149.1833416, zone_id: Fyshwick;Pialligo;Unclassified ACT; } + - { name: Tallara Parkway,stop_code: Wjzb73I, lat: -35.335098, lng: 149.1512571, zone_id: Fyshwick;Griffith;Narrabundah;Symonston;Unclassified ACT; } + - { name: Namatjira Drive,stop_code: WjrX-x5, lat: -35.3418633, lng: 149.0570257, zone_id: Weston;Unclassified ACT; } + - { name: Sternberg Crescent,stop_code: Wjz2rqk, lat: -35.4017026, lng: 149.0999303, zone_id: Wanniassa;Unclassified ACT; } + - { name: Prior Place,stop_code: Wjz3oge, lat: -35.3754535, lng: 149.0983799, zone_id: Farrer;Unclassified ACT; } + - { name: Hindmarsh Drive,stop_code: WjrXKxW, lat: -35.3421259, lng: 149.0363083, zone_id: Duffy;Rivett;Unclassified ACT; } + - { name: William Webb Drive,stop_code: Wjz64Gx, lat: -35.220702, lng: 149.0701685, zone_id: McKellar;Bonner;Evatt;Unclassified ACT; } + - { name: Harcus Close,stop_code: Wjz1klr, lat: -35.4381985, lng: 149.087748, zone_id: Bonython;Gordon;Unclassified ACT; } + - { name: Federal Highway,stop_code: Wjze2dY, lat: -35.2293144, lng: 149.1530102, zone_id: Bonner;Watson;Unclassified ACT; } + - { name: General Bridges Drive,stop_code: WjzceCW, lat: -35.2947043, lng: 149.1682408, zone_id: Campbell;Unclassified ACT; } + - { name: Kinsella Street,stop_code: Wjr-xZ1, lat: -35.2350925, lng: 149.0282402, zone_id: Higgins;Unclassified ACT; } + - { name: Hibberson Street,stop_code: Wjz7OQn, lat: -35.1858254, lng: 149.1370564, zone_id: Bonner;Gungahlin;Unclassified ACT; } + - { name: Cultivation Street,stop_code: Wjze7Ku, lat: -35.2010286, lng: 149.157806, zone_id: Bonner;Gungahlin;Harrison;Unclassified ACT; } + - { name: Miller Street,stop_code: Wjz5BPB, lat: -35.2580866, lng: 149.1154899, zone_id: Acton;Lyneham;O'Connor;Unclassified ACT; } + - { name: Buggy Crescent,stop_code: Wjz64Yc, lat: -35.2190101, lng: 149.0723258, zone_id: McKellar;Bonner;Evatt;Unclassified ACT; } + - { name: Handcock Crescent,stop_code: Wjr-D1B, lat: -35.2045158, lng: 149.0193788, zone_id: Dunlop;Macgregor;Unclassified ACT; } + - { name: Forsythe Street,stop_code: Wjz0tmp, lat: -35.4760956, lng: 149.098836, zone_id: Banks;Unclassified ACT; } + - { name: Majura Avenue,stop_code: Wjz5RQM, lat: -35.2578561, lng: 149.1378031, zone_id: Ainslie;Dickson;Lyneham;Unclassified ACT; } + - { name: Heydon Crescent,stop_code: Wjz6e4_, lat: -35.2078167, lng: 149.0747605, zone_id: Bonner;Evatt;Unclassified ACT; } + - { name: Ainsworth Street,stop_code: Wjz3kQJ, lat: -35.3507895, lng: 149.0935788, zone_id: Phillip;Unclassified ACT; } + - { name: Heard Street,stop_code: Wjz3h_Y, lat: -35.3652794, lng: 149.0954242, zone_id: Mawson;Unclassified ACT; } + - { name: Flemington Road,stop_code: Wjz7Wrb, lat: -35.1868629, lng: 149.1438112, zone_id: Bonner;Gungahlin;Unclassified ACT; } + - { name: Faulding Street,stop_code: WjzbfzE, lat: -35.3354178, lng: 149.1678599, zone_id: Fyshwick;Symonston;Unclassified ACT; } + - { name: Owen Dixon Drive,stop_code: Wjz6f7z, lat: -35.2006106, lng: 149.0742884, zone_id: Bonner;Evatt;Unclassified ACT; } + - { name: Whyalla Street,stop_code: Wjzbn5y, lat: -35.3338671, lng: 149.1730601, zone_id: Fyshwick;Pialligo;Symonston;Unclassified ACT; } + - { name: Alinga Street,stop_code: Wjz5N5_, lat: -35.2785242, lng: 149.1297348, zone_id: City;Unclassified ACT; } + - { name: Mort Street,stop_code: Wjz5NeF, lat: -35.2783224, lng: 149.130726, zone_id: Braddon;City;Unclassified ACT; } + - { name: Kitchener Street,stop_code: Wjz3vrf, lat: -35.3348497, lng: 149.099817, zone_id: Garran;Hughes;Unclassified ACT; } + - { name: Gilmore Crescent,stop_code: Wjz3B5o, lat: -35.344996, lng: 149.1070285, zone_id: Garran;Red Hill;Unclassified ACT; } + - { name: Kent Street,stop_code: Wjz4q8_, lat: -35.3203709, lng: 149.0981179, zone_id: Deakin;Unclassified ACT; } + - { name: Macpherson Street,stop_code: Wjz5Iqp, lat: -35.2646152, lng: 149.1221727, zone_id: Acton;O'Connor;Turner;Unclassified ACT; } + - { name: Northbourne Avenue,stop_code: Wjz5N4J, lat: -35.2793571, lng: 149.1293659, zone_id: City;Unclassified ACT; } + - { name: Burdekin Avenue,stop_code: Wjz7KWi, lat: -35.165658, lng: 149.127439, zone_id: Amaroo;Bonner;Ngunnawal;Unclassified ACT; } + - { name: Paperbark Street,stop_code: Wjz0vV_, lat: -35.46806, lng: 149.1064105, zone_id: Banks;Conder;Unclassified ACT; } + - { name: Ainsworth Street,stop_code: Wjz3qfM, lat: -35.3601522, lng: 149.0979991, zone_id: Mawson;Unclassified ACT; } + - { name: Whitford Place,stop_code: Wjz1iJO, lat: -35.4492507, lng: 149.092506, zone_id: Calwell;Conder;Gordon;Unclassified ACT; } + - { name: McInnes Street,stop_code: WjrX-Hd, lat: -35.340498, lng: 149.0586457, zone_id: Weston;Unclassified ACT; } + - { name: Gozzard Street,stop_code: Wjz7Pqv, lat: -35.1816893, lng: 149.1331682, zone_id: Bonner;Gungahlin;Unclassified ACT; } + - { name: Proctor Street,stop_code: Wjz2M6L, lat: -35.4151166, lng: 149.1293059, zone_id: Chisholm;Fadden;Gilmore;Unclassified ACT; } + - { name: College Street,stop_code: Wjz6gia, lat: -35.2425616, lng: 149.0874888, zone_id: Bruce;Unclassified ACT; } + - { name: Clift Crescent,stop_code: Wjz1CL2, lat: -35.4259056, lng: 149.1134272, zone_id: Chisholm;Richardson;Unclassified ACT; } + - { name: Burdekin Avenue,stop_code: Wjz7JmE, lat: -35.1685523, lng: 149.1211305, zone_id: Amaroo;Bonner;Ngunnawal;Unclassified ACT; } + - { name: Baskerville Street,stop_code: Wjz1LGi, lat: -35.4237899, lng: 149.1247997, zone_id: Chisholm;Richardson;Unclassified ACT; } + - { name: Burdekin Avenue,stop_code: Wjz7Jpk, lat: -35.1716219, lng: 149.1220317, zone_id: Amaroo;Bonner;Ngunnawal;Unclassified ACT; } + - { name: Anketell Street,stop_code: Wjz20ut, lat: -35.4153439, lng: 149.0672617, zone_id: Greenway;Unclassified ACT; } + - { name: Bywaters Street,stop_code: Wjz7Jjj, lat: -35.1703882, lng: 149.1206162, zone_id: Amaroo;Bonner;Ngunnawal;Unclassified ACT; } + - { name: Captain Cook Crescent,stop_code: Wjz4NDP, lat: -35.3214366, lng: 149.1350462, zone_id: Forrest;Griffith;Red Hill;Unclassified ACT; } + - { name: Parkes Place,stop_code: Wjz4Rs-, lat: -35.3012441, lng: 149.1338254, zone_id: Barton;Parkes;Unclassified ACT; } + - { name: Russell Drive,stop_code: Wjzc60A, lat: -35.2986953, lng: 149.151155, zone_id: Campbell;Russell;Unclassified ACT; } + - { name: Kings Avenue,stop_code: Wjz4RwH, lat: -35.3042846, lng: 149.1348585, zone_id: Barton;Parkes;Unclassified ACT; } + - { name: Launceston Street,stop_code: Wjz3eJ0, lat: -35.339582, lng: 149.0804045, zone_id: Lyons;Unclassified ACT; } + - { name: Russell Drive,stop_code: Wjz4-Rc, lat: -35.2952651, lng: 149.1479687, zone_id: Campbell;Russell;Unclassified ACT; } + - { name: Hodgson Crescent,stop_code: Wjz39RI, lat: -35.3666487, lng: 149.0827357, zone_id: Pearce;Torrens;Unclassified ACT; } + - { name: Verbrugghen Street,stop_code: Wjr-Zk3, lat: -35.2136037, lng: 149.0543575, zone_id: Melba;Evatt;Unclassified ACT; } + - { name: Alfred Hill Drive,stop_code: Wjr--md, lat: -35.2066211, lng: 149.0544526, zone_id: Melba;Evatt;Unclassified ACT; } + - { name: Lathlain Street,stop_code: Wjz606I, lat: -35.2396656, lng: 149.0633992, zone_id: Belconnen;Unclassified ACT; } + - { name: Baddeley Crescent,stop_code: Wjz670_, lat: -35.205061, lng: 149.0637667, zone_id: Melba;Bonner;Evatt;Spence;Unclassified ACT; } + - { name: Canopus Crescent,stop_code: Wjz6lZb, lat: -35.2129711, lng: 149.0943513, zone_id: Bonner;Giralang;Kaleen;Unclassified ACT; } + - { name: Yamba Drive,stop_code: Wjz3tqd, lat: -35.3466766, lng: 149.0998445, zone_id: Garran;Phillip;Unclassified ACT; } + - { name: Clare Dennis Avenue,stop_code: Wjz1bUp, lat: -35.4472172, lng: 149.0837405, zone_id: Gordon;Unclassified ACT; } + - { name: John Cleland Crescent,stop_code: Wjr-Xno, lat: -35.2227935, lng: 149.0548844, zone_id: Evatt;Florey;Unclassified ACT; } + - { name: Clive Steele Avenue,stop_code: Wjz2gTN, lat: -35.4149942, lng: 149.0938363, zone_id: Monash;Unclassified ACT; } + - { name: Melrose Drive,stop_code: Wjz3eRR, lat: -35.3390911, lng: 149.082759, zone_id: Lyons;Phillip;Unclassified ACT; } + - { name: Archdall Street,stop_code: Wjr_oEZ, lat: -35.1996945, lng: 149.0157411, zone_id: Dunlop;Unclassified ACT; } + - { name: Barrier Street,stop_code: Wjzc9ws, lat: -35.326135, lng: 149.1675112, zone_id: Fyshwick;Unclassified ACT; } + - { name: Athllon Drive,stop_code: Wjz20g4, lat: -35.4195233, lng: 149.0653405, zone_id: Greenway;Unclassified ACT; } + - { name: Sainsbury Street,stop_code: Wjz2lWW, lat: -35.3909103, lng: 149.0953598, zone_id: Wanniassa;Unclassified ACT; } + - { name: Ogilby Crescent,stop_code: Wjr-UfX, lat: -35.2390533, lng: 149.0542094, zone_id: Page;Unclassified ACT; } + - { name: Moynihan Street,stop_code: Wjz65ik, lat: -35.2149321, lng: 149.0656677, zone_id: Bonner;Evatt;Unclassified ACT; } + - { name: Barr Smith Avenue,stop_code: Wjz16_x, lat: -35.4259377, lng: 149.0728765, zone_id: Bonython;Greenway;Unclassified ACT; } + - { name: Marconi Crescent,stop_code: WjrW_zy, lat: -35.3792073, lng: 149.0577944, zone_id: Kambah;Unclassified ACT; } + - { name: Summerland Circuit,stop_code: Wjz26tG, lat: -35.3833338, lng: 149.0674908, zone_id: Kambah;Unclassified ACT; } + - { name: Summerland Circuit,stop_code: Wjz2d34, lat: -35.3900029, lng: 149.0734943, zone_id: Kambah;Wanniassa;Unclassified ACT; } + - { name: Summerland Circuit,stop_code: Wjz25NL, lat: -35.3911118, lng: 149.0716052, zone_id: Kambah;Unclassified ACT; } + - { name: Canberra Avenue,stop_code: Wjzc8gG, lat: -35.3318595, lng: 149.1650651, zone_id: Fyshwick;Symonston;Unclassified ACT; } + - { name: Lambrigg Street,stop_code: Wjz2vR3, lat: -35.377711, lng: 149.1037176, zone_id: Farrer;Unclassified ACT; } + - { name: Golden Grove,stop_code: Wjz3KRH, lat: -35.3393078, lng: 149.1266558, zone_id: Red Hill;Symonston;Unclassified ACT; } + - { name: Jim Pike Avenue,stop_code: Wjz18G9, lat: -35.4623676, lng: 149.0806828, zone_id: Gordon;Unclassified ACT; } + - { name: Lewis Luxton Avenue,stop_code: Wjz1is3, lat: -35.4498436, lng: 149.0887348, zone_id: Gordon;Unclassified ACT; } + - { name: Templestowe Avenue,stop_code: Wjz0DbJ, lat: -35.46686, lng: 149.1088352, zone_id: Banks;Conder;Unclassified ACT; } + - { name: Ellerston Avenue,stop_code: Wjz1lXG, lat: -35.4341379, lng: 149.0950208, zone_id: Calwell;Isabella Plains;Unclassified ACT; } + - { name: Madigan Street,stop_code: WjzdeeQ, lat: -35.2506237, lng: 149.1639253, zone_id: Hackett;Unclassified ACT; } + - { name: Officer Crescent,stop_code: Wjz5ZZQ, lat: -35.2567691, lng: 149.1500474, zone_id: Ainslie;Dickson;Lyneham;Unclassified ACT; } + - { name: Tallara Parkway,stop_code: Wjzb7qP, lat: -35.3358857, lng: 149.1555593, zone_id: Fyshwick;Narrabundah;Symonston;Unclassified ACT; } + - { name: Gilmore Crescent,stop_code: Wjz3tP_, lat: -35.345819, lng: 149.1049514, zone_id: Garran;O'Malley;Red Hill;Unclassified ACT; } + - { name: Paramatta Street,stop_code: Wjz3jlt, lat: -35.355611, lng: 149.0877423, zone_id: Phillip;Unclassified ACT; } + - { name: Hindmarsh Drive,stop_code: WjrXS9Y, lat: -35.3419508, lng: 149.0431318, zone_id: Duffy;Holder;Rivett;Unclassified ACT; } + - { name: Onslow Street,stop_code: Wjr-Iqi, lat: -35.2206012, lng: 149.0340821, zone_id: Latham;Unclassified ACT; } + - { name: Dumas Street,stop_code: Wjz6d1l, lat: -35.2155043, lng: 149.0738592, zone_id: McKellar;Bonner;Evatt;Unclassified ACT; } + - { name: Northcott Drive,stop_code: Wjzcfkd, lat: -35.2903958, lng: 149.1643141, zone_id: Campbell;Unclassified ACT; } + - { name: Findlay Street,stop_code: Wjr-xTP, lat: -35.2335151, lng: 149.027854, zone_id: Higgins;Unclassified ACT; } + - { name: Pocket Avenue,stop_code: Wjz0u3v, lat: -35.4721754, lng: 149.0960894, zone_id: Banks;Unclassified ACT; } + - { name: Tom Roberts Avenue,stop_code: Wjz1osN, lat: -35.4609703, lng: 149.1007672, zone_id: Conder;Unclassified ACT; } + - { name: Goyder Street,stop_code: Wjzb79X, lat: -35.3365565, lng: 149.1529783, zone_id: Fyshwick;Narrabundah;Symonston;Unclassified ACT; } + - { name: Newcastle Street,stop_code: Wjzc9PB, lat: -35.3239975, lng: 149.1704393, zone_id: Fyshwick;Unclassified ACT; } + - { name: Templestowe Avenue,stop_code: Wjz0Ds0, lat: -35.4665454, lng: 149.1105948, zone_id: Banks;Conder;Unclassified ACT; } + - { name: Forsythe Street,stop_code: Wjz0tt-, lat: -35.4763315, lng: 149.1008208, zone_id: Banks;Unclassified ACT; } + - { name: Majura Avenue,stop_code: Wjz5RGR, lat: -35.2588023, lng: 149.1364727, zone_id: Ainslie;Dickson;Lyneham;Unclassified ACT; } + - { name: Knoke Avenue,stop_code: Wjz0niU, lat: -35.4679601, lng: 149.0885363, zone_id: Gordon;Unclassified ACT; } + - { name: Nellie Hamilton Avenue,stop_code: Wjz7PKW, lat: -35.1794094, lng: 149.1366015, zone_id: Bonner;Gungahlin;Unclassified ACT; } + - { name: Ainsworth Street,stop_code: Wjz3kOX, lat: -35.3523296, lng: 149.0940294, zone_id: Phillip;Unclassified ACT; } + - { name: Knoke Avenue,stop_code: Wjz1h8e, lat: -35.4578446, lng: 149.0861759, zone_id: Gordon;Unclassified ACT; } + - { name: Deamer Crescent,stop_code: Wjz1J-6, lat: -35.431693, lng: 149.1271279, zone_id: Richardson;Unclassified ACT; } + - { name: Denison Street,stop_code: Wjz4hFp, lat: -35.3257236, lng: 149.0920124, zone_id: Deakin;Unclassified ACT; } + - { name: Jenkinson Street,stop_code: Wjz2iwA, lat: -35.4085873, lng: 149.0906768, zone_id: Monash;Wanniassa;Unclassified ACT; } + - { name: Benham Street,stop_code: Wjz2N0r, lat: -35.4141264, lng: 149.128949, zone_id: Chisholm;Fadden;Gilmore;Unclassified ACT; } + - { name: Culgoa Circuit,stop_code: Wjz3rTZ, lat: -35.3542022, lng: 149.1050158, zone_id: Mawson;O'Malley;Unclassified ACT; } + - { name: Wentcher Place,stop_code: Wjz1Dap, lat: -35.4239297, lng: 149.1084839, zone_id: Richardson;Unclassified ACT; } + - { name: Julia Flynn Avenue,stop_code: Wjz3wQO, lat: -35.3730045, lng: 149.1158734, zone_id: Farrer;Isaacs;Unclassified ACT; } + - { name: Macfarlane Burnet Avenue,stop_code: Wjr-lwL, lat: -35.2160653, lng: 149.0029738, zone_id: Unclassified ACT; } + - { name: Soward Way,stop_code: Wjz17vf, lat: -35.4199255, lng: 149.0668755, zone_id: Greenway;Unclassified ACT; } + - { name: Beasley Street,stop_code: Wjz3gZn, lat: -35.3718963, lng: 149.0945237, zone_id: Mawson;Farrer;Unclassified ACT; } + - { name: Marshall Street,stop_code: Wjz3oBK, lat: -35.3720072, lng: 149.1019151, zone_id: Farrer;Unclassified ACT; } + - { name: Macarthur Avenue,stop_code: Wjz5BWh, lat: -35.2591172, lng: 149.1164155, zone_id: Acton;Lyneham;O'Connor;Unclassified ACT; } + - { name: Dumas Street,stop_code: Wjz6cz2, lat: -35.2199304, lng: 149.0791416, zone_id: McKellar;Bonner;Evatt;Lawson;Unclassified ACT; } + - { name: Spalding Street,stop_code: Wjr_MMi, lat: -35.200018, lng: 149.0491234, zone_id: Flynn;Fraser;Unclassified ACT; } + - { name: Kingsford Smith Drive,stop_code: Wjr-H-a, lat: -35.2232851, lng: 149.039343, zone_id: Florey;Latham;Unclassified ACT; } + - { name: Mary Potter Circuit,stop_code: Wjz5mxf, lat: -35.2538241, lng: 149.0902637, zone_id: Bruce;Unclassified ACT; } + - { name: Boddington Crescent,stop_code: WjrWRY-, lat: -35.3891639, lng: 149.0514903, zone_id: Kambah;Unclassified ACT; } + - { name: Sulwood Drive,stop_code: WjrXUjI, lat: -35.373541, lng: 149.0551596, zone_id: Kambah;Unclassified ACT; } + - { name: Outtrim Avenue,stop_code: Wjz1tVw, lat: -35.435688, lng: 149.1057775, zone_id: Calwell;Isabella Plains;Richardson;Unclassified ACT; } + - { name: Mackinolty Street,stop_code: Wjr-Fw4, lat: -35.2382916, lng: 149.035194, zone_id: Scullin;Unclassified ACT; } + - { name: Cockcroft Avenue,stop_code: Wjz1vfv, lat: -35.4199692, lng: 149.0974949, zone_id: Monash;Unclassified ACT; } + - { name: Wheeler Crescent,stop_code: Wjz2cYK, lat: -35.3946187, lng: 149.0840731, zone_id: Kambah;Wanniassa;Unclassified ACT; } + - { name: Melbourne Avenue,stop_code: Wjz4H0P, lat: -35.3152936, lng: 149.1185178, zone_id: Deakin;Forrest;Yarralumla;Unclassified ACT; } + - { name: Wentworth Avenue,stop_code: Wjz4WHw, lat: -35.3189482, lng: 149.1470514, zone_id: Griffith;Kingston;Unclassified ACT; } + - { name: Chippindall Circuit,stop_code: Wjz1Gjj, lat: -35.4504956, lng: 149.1205257, zone_id: Calwell;Conder;Theodore;Unclassified ACT; } + - { name: Ratcliffe Crescent,stop_code: Wjr-VeQ, lat: -35.2341373, lng: 149.0540753, zone_id: Florey;Page;Unclassified ACT; } + - { name: Cowper Street,stop_code: Wjz5QUd, lat: -35.2656089, lng: 149.1383392, zone_id: Ainslie;Braddon;Unclassified ACT; } + - { name: Sternberg Crescent,stop_code: Wjz2jFN, lat: -35.4026208, lng: 149.0924416, zone_id: Kambah;Wanniassa;Unclassified ACT; } + - { name: Goyder Street,stop_code: Wjz3-TX, lat: -35.3378987, lng: 149.1488538, zone_id: Narrabundah;Symonston;Unclassified ACT; } + - { name: Monaro Crescent,stop_code: Wjz4M1m, lat: -35.3307654, lng: 149.1288445, zone_id: Griffith;Red Hill;Symonston;Unclassified ACT; } + - { name: Woodcock Drive,stop_code: Wjz1ksO, lat: -35.438896, lng: 149.089695, zone_id: Bonython;Gordon;Unclassified ACT; } + - { name: Heysen Street,stop_code: Wjz37Lh, lat: -35.3326298, lng: 149.0697876, zone_id: Curtin;Lyons;Unclassified ACT; } + - { name: McInnes Street,stop_code: Wjz354q, lat: -35.3455739, lng: 149.0631733, zone_id: Waramanga;Weston;Unclassified ACT; } + - { name: Hilder Street,stop_code: WjrX_hN, lat: -35.3366997, lng: 149.0553734, zone_id: Weston;Unclassified ACT; } + - { name: McInnes Street,stop_code: WjrXZLd, lat: -35.3432461, lng: 149.0586243, zone_id: Weston;Unclassified ACT; } + - { name: Badimara Street,stop_code: Wjz34B4, lat: -35.3501945, lng: 149.0681086, zone_id: Waramanga;Unclassified ACT; } + - { name: Onslow Street,stop_code: Wjr-IcO, lat: -35.2191858, lng: 149.0319716, zone_id: Latham;Unclassified ACT; } + - { name: Collings Street,stop_code: Wjz3j2u, lat: -35.357571, lng: 149.0850387, zone_id: Chifley;Pearce;Unclassified ACT; } + - { name: Northbourne Avenue,stop_code: Wjz5Oci, lat: -35.2741724, lng: 149.1302168, zone_id: Braddon;Turner;Unclassified ACT; } + - { name: Langdon Avenue,stop_code: Wjz2rfK, lat: -35.398117, lng: 149.0976987, zone_id: Wanniassa;Unclassified ACT; } + - { name: Florey Drive,stop_code: Wjr-BbR, lat: -35.2141632, lng: 149.0209714, zone_id: Latham;Macgregor;Unclassified ACT; } + - { name: Northbourne Avenue,stop_code: Wjz5Sux, lat: -35.2509191, lng: 149.1333899, zone_id: Dickson;Lyneham;Unclassified ACT; } + - { name: Kent Street,stop_code: Wjz4qn2, lat: -35.3160417, lng: 149.098321, zone_id: Deakin;Unclassified ACT; } + - { name: Canopus Crescent,stop_code: Wjz6mxi, lat: -35.2102537, lng: 149.0904031, zone_id: Bonner;Giralang;Unclassified ACT; } + - { name: Hospital Road,stop_code: Wjz3tzF, lat: -35.346309, lng: 149.1019688, zone_id: Garran;O'Malley;Red Hill;Unclassified ACT; } + - { name: Preddey Way,stop_code: Wjz1a_U, lat: -35.4480737, lng: 149.0843198, zone_id: Gordon;Unclassified ACT; } + - { name: Cameron Avenue,stop_code: Wjz60QW, lat: -35.241186, lng: 149.0720789, zone_id: Belconnen;Unclassified ACT; } + - { name: Burrinjuck Crescent,stop_code: WjrXKfL, lat: -35.3375574, lng: 149.0317807, zone_id: Duffy;Unclassified ACT; } + - { name: Hindmarsh Drive,stop_code: WjrXJnt, lat: -35.3431935, lng: 149.0328322, zone_id: Duffy;Rivett;Unclassified ACT; } + - { name: Ginninderra Drive,stop_code: Wjr_oVO, lat: -35.199278, lng: 149.0183268, zone_id: Dunlop;Unclassified ACT; } + - { name: Barrier Street,stop_code: Wjzc8Sn, lat: -35.3272379, lng: 149.1700862, zone_id: Fyshwick;Unclassified ACT; } + - { name: Charleston Street,stop_code: Wjz28WY, lat: -35.4181593, lng: 149.0843413, zone_id: Monash;Unclassified ACT; } + - { name: Langdon Avenue,stop_code: Wjz2lUf, lat: -35.3918549, lng: 149.0942869, zone_id: Wanniassa;Unclassified ACT; } + - { name: Burkitt Street,stop_code: Wjr-ViH, lat: -35.2369503, lng: 149.055175, zone_id: Page;Unclassified ACT; } + - { name: Buriga Street,stop_code: Wjz6mOx, lat: -35.20966, lng: 149.0935299, zone_id: Bonner;Giralang;Unclassified ACT; } + - { name: Chuculba Crescent,stop_code: Wjz6uwF, lat: -35.2110747, lng: 149.1018989, zone_id: Bonner;Franklin;Giralang;Kaleen;Unclassified ACT; } + - { name: Canopus Crescent,stop_code: Wjz6t3F, lat: -35.21451, lng: 149.09646, zone_id: Bonner;Franklin;Giralang;Kaleen;Unclassified ACT; } + - { name: Haydon Drive,stop_code: Wjz5mbS, lat: -35.2525252, lng: 149.0869819, zone_id: Aranda;Bruce;Unclassified ACT; } + - { name: Ellenborough Street,stop_code: Wjz6yzH, lat: -35.2308034, lng: 149.1129136, zone_id: Bonner;Kaleen;Unclassified ACT; } + - { name: Baldwin Drive,stop_code: Wjz6iNm, lat: -35.2318811, lng: 149.0930643, zone_id: Bruce;Kaleen;Lawson;Unclassified ACT; } + - { name: Athllon Drive,stop_code: Wjz3kAx, lat: -35.3511369, lng: 149.0906806, zone_id: Phillip;Unclassified ACT; } + - { name: Daley Road,stop_code: Wjz5yYV, lat: -35.2742188, lng: 149.1173067, zone_id: Acton;Turner;Unclassified ACT; } + - { name: Callam Street,stop_code: Wjz3llf, lat: -35.34445, lng: 149.0875371, zone_id: Phillip;Unclassified ACT; } + - { name: Pitman,stop_code: Wjz218U, lat: -35.4143897, lng: 149.0652364, zone_id: Greenway;Unclassified ACT; } + - { name: Perry Drive,stop_code: WjrXPbu, lat: -35.3568919, lng: 149.0424224, zone_id: Chapman;Unclassified ACT; } + - { name: Parkinson Street,stop_code: WjrXZv5, lat: -35.3432647, lng: 149.0558034, zone_id: Stirling;Weston;Unclassified ACT; } + - { name: Prichard Circuit,stop_code: Wjz1K89, lat: -35.4308171, lng: 149.1191218, zone_id: Chisholm;Richardson;Unclassified ACT; } + - { name: Osburn Drive,stop_code: Wjr-uUb, lat: -35.2108896, lng: 149.0174054, zone_id: Macgregor;Unclassified ACT; } + - { name: Phillip Avenue,stop_code: Wjzd7no, lat: -35.2447665, lng: 149.1536603, zone_id: Downer;Watson;Unclassified ACT; } + - { name: Bromby Street,stop_code: Wjz3y2V, lat: -35.363512, lng: 149.1076873, zone_id: Mawson;Isaacs;Unclassified ACT; } + - { name: Townshend Street,stop_code: Wjz3jv9, lat: -35.3545522, lng: 149.0888367, zone_id: Phillip;Unclassified ACT; } + - { name: Carbeen Street,stop_code: WjrXSoJ, lat: -35.3425634, lng: 149.0456317, zone_id: Rivett;Stirling;Unclassified ACT; } + - { name: Strickland Crescent,stop_code: Wjz4qjC, lat: -35.3184536, lng: 149.0989486, zone_id: Deakin;Unclassified ACT; } + - { name: Christina Stead Street,stop_code: Wjz6_R5, lat: -35.2017591, lng: 149.1476629, zone_id: Bonner;Franklin;Gungahlin;Harrison;Unclassified ACT; } + - { name: Fullagar Crescent,stop_code: Wjr-yOJ, lat: -35.2313242, lng: 149.0277252, zone_id: Higgins;Holt;Unclassified ACT; } + - { name: Taubman Street,stop_code: Wjzbfpl, lat: -35.3363832, lng: 149.1658515, zone_id: Fyshwick;Symonston;Unclassified ACT; } + - { name: Caley Crescent,stop_code: Wjz3_3L, lat: -35.3347817, lng: 149.1404124, zone_id: Griffith;Narrabundah;Symonston;Unclassified ACT; } + - { name: Dixon Drive,stop_code: WjrYMrj, lat: -35.3296313, lng: 149.0450622, zone_id: Holder;Unclassified ACT; } + - { name: Watt Place,stop_code: Wjz2ve3, lat: -35.3770117, lng: 149.0968721, zone_id: Farrer;Unclassified ACT; } + - { name: Forsythe Street,stop_code: Wjz0uw1, lat: -35.4746831, lng: 149.1010032, zone_id: Banks;Unclassified ACT; } + - { name: Limestone Avenue,stop_code: Wjz5QNt, lat: -35.2649345, lng: 149.1372881, zone_id: Ainslie;Braddon;Unclassified ACT; } + - { name: Fairbairn Avenue,stop_code: WjzcJ0K, lat: -35.3040486, lng: 149.2062653, zone_id: Pialligo;Unclassified ACT; } + - { name: Maria Smith Lane,stop_code: Wjz7QEd, lat: -35.1777783, lng: 149.1356144, zone_id: Amaroo;Bonner;Gungahlin;Unclassified ACT; } + - { name: Ainsworth Street,stop_code: Wjz3s0s, lat: -35.3536247, lng: 149.0960036, zone_id: Mawson;Phillip;Unclassified ACT; } + - { name: Lhotsky Street,stop_code: Wjr_E1y, lat: -35.1992571, lng: 149.0303603, zone_id: Charnwood;Dunlop;Unclassified ACT; } + - { name: Noakes Court,stop_code: Wjr-Lzm, lat: -35.2030997, lng: 149.0354829, zone_id: Charnwood;Flynn;Unclassified ACT; } + - { name: Krefft Street,stop_code: Wjr-Pk6, lat: -35.2243699, lng: 149.0432872, zone_id: Florey;Latham;Unclassified ACT; } + - { name: Florey Drive,stop_code: Wjr-BL8, lat: -35.2118565, lng: 149.025622, zone_id: Latham;Macgregor;Unclassified ACT; } + - { name: Drake Brockman Drive,stop_code: Wjr-qcc, lat: -35.230013, lng: 149.0092125, zone_id: Holt;Unclassified ACT; } + - { name: Spofforth Street,stop_code: Wjr-jNB, lat: -35.2265208, lng: 149.0056756, zone_id: Holt;Unclassified ACT; } + - { name: Kriewaldt Circuit,stop_code: Wjr-ySy, lat: -35.228821, lng: 149.0276438, zone_id: Higgins;Holt;Unclassified ACT; } + - { name: Alinga Street,stop_code: Wjz5Neo, lat: -35.27843, lng: 149.130345, zone_id: Braddon;City;Unclassified ACT; } + - { name: Thynne Street,stop_code: Wjz6gQ0, lat: -35.2413491, lng: 149.0928379, zone_id: Bruce;Kaleen;Unclassified ACT; } + - { name: Burdekin Avenue,stop_code: Wjz7KFS, lat: -35.166003, lng: 149.1254013, zone_id: Amaroo;Bonner;Ngunnawal;Unclassified ACT; } + - { name: Temperley Street,stop_code: Wjz7p2n, lat: -35.1926501, lng: 149.0958323, zone_id: Bonner;Nicholls;Unclassified ACT; } + - { name: Staff Cadet Avenue,stop_code: Wjzcd2C, lat: -35.302637, lng: 149.1620825, zone_id: Campbell;Fyshwick;Unclassified ACT; } + - { name: Beattie Crescent,stop_code: Wjz1DBr, lat: -35.4217091, lng: 149.1125903, zone_id: Chisholm;Richardson;Unclassified ACT; } + - { name: Mawson Drive,stop_code: Wjz3qbJ, lat: -35.3624796, lng: 149.0977202, zone_id: Mawson;Unclassified ACT; } + - { name: McBryde Crescent,stop_code: Wjz2izK, lat: -35.4062764, lng: 149.0909078, zone_id: Wanniassa;Unclassified ACT; } + - { name: Cunningham Street,stop_code: Wjz4WQ4, lat: -35.3179064, lng: 149.1476844, zone_id: Griffith;Kingston;Unclassified ACT; } + - { name: Beaumont Close,stop_code: WjrXGDF, lat: -35.3600413, lng: 149.0360091, zone_id: Chapman;Unclassified ACT; } + - { name: Currong Street South,stop_code: Wjz5Utw, lat: -35.2845721, lng: 149.144294, zone_id: Campbell;Reid;Unclassified ACT; } + - { name: Aspinall Street,stop_code: Wjze2Qc, lat: -35.2300184, lng: 149.1589067, zone_id: Bonner;Watson;Unclassified ACT; } + - { name: Harricks Crescent,stop_code: Wjz2hB8, lat: -35.4109545, lng: 149.0901671, zone_id: Monash;Unclassified ACT; } + - { name: Antill Street,stop_code: WjzeaC3, lat: -35.2287389, lng: 149.166889, zone_id: Bonner;Watson;Unclassified ACT; } + - { name: Catalina Drive,stop_code: Wjzcuop, lat: -35.2989647, lng: 149.1881172, zone_id: Pialligo;Unclassified ACT; } + - { name: Southern Cross Drive,stop_code: Wjr-AbT, lat: -35.2195056, lng: 149.0209768, zone_id: Holt;Latham;Unclassified ACT; } + - { name: Kerrigan Street,stop_code: Wjr_xY9, lat: -35.1918291, lng: 149.028508, zone_id: Dunlop;Unclassified ACT; } + - { name: Companion Crescent,stop_code: Wjr-RfI, lat: -35.2115247, lng: 149.0428851, zone_id: Flynn;Latham;Unclassified ACT; } + - { name: Captain Cook Crescent,stop_code: Wjz4NDo, lat: -35.3217168, lng: 149.1344712, zone_id: Forrest;Griffith;Red Hill;Unclassified ACT; } + - { name: Copland Drive,stop_code: Wjz66t3, lat: -35.2074684, lng: 149.0667796, zone_id: Bonner;Evatt;Spence;Unclassified ACT; } + - { name: Mataranka Street,stop_code: WjrZLbU, lat: -35.2475002, lng: 149.0321777, zone_id: Hawker;Unclassified ACT; } + - { name: Russell Drive,stop_code: Wjzc60i, lat: -35.2988201, lng: 149.1508684, zone_id: Campbell;Russell;Unclassified ACT; } + - { name: Hindmarsh Drive,stop_code: WjrXJ6l, lat: -35.3439287, lng: 149.0300212, zone_id: Duffy;Rivett;Unclassified ACT; } + - { name: Eggleston Crescent,stop_code: Wjz3caw, lat: -35.3525528, lng: 149.0755688, zone_id: Chifley;Unclassified ACT; } + - { name: Petterd Street,stop_code: Wjr-MS6, lat: -35.2394564, lng: 149.0487967, zone_id: Page;Unclassified ACT; } + - { name: Kingsford Smith Drive,stop_code: Wjr-SHc, lat: -35.2086969, lng: 149.0476925, zone_id: Melba;Flynn;Unclassified ACT; } + - { name: Knoke Avenue,stop_code: Wjz18Xo, lat: -35.4617829, lng: 149.0837083, zone_id: Gordon;Unclassified ACT; } + - { name: Copland Drive,stop_code: Wjr-ZSE, lat: -35.2124829, lng: 149.0606716, zone_id: Melba;Evatt;Unclassified ACT; } + - { name: Lathlain Street,stop_code: Wjz605N, lat: -35.2405467, lng: 149.0636668, zone_id: Belconnen;Unclassified ACT; } + - { name: Daley Road,stop_code: Wjz5xHC, lat: -35.2799871, lng: 149.1141335, zone_id: Acton;Unclassified ACT; } + - { name: Macrossan Crescent,stop_code: Wjr-InZ, lat: -35.2169003, lng: 149.0335258, zone_id: Latham;Unclassified ACT; } + - { name: Kingsford Smith Drive,stop_code: Wjr-Q4G, lat: -35.2192221, lng: 149.0415189, zone_id: Florey;Latham;Unclassified ACT; } + - { name: Maribyrnong Avenue,stop_code: Wjz6ytu, lat: -35.2291622, lng: 149.1110812, zone_id: Bonner;Kaleen;Unclassified ACT; } + - { name: Mary Potter Circuit,stop_code: Wjz5mpm, lat: -35.2538531, lng: 149.0889493, zone_id: Aranda;Bruce;Unclassified ACT; } + - { name: Mapleton Avenue,stop_code: Wjzf0TD, lat: -35.1947102, lng: 149.1594002, zone_id: Bonner;Gungahlin;Harrison;Unclassified ACT; } + - { name: Baddeley Crescent,stop_code: Wjz671V, lat: -35.204864, lng: 149.0637204, zone_id: Melba;Bonner;Evatt;Spence;Unclassified ACT; } + - { name: Fulton Street,stop_code: Wjz571j, lat: -35.2486364, lng: 149.0628845, zone_id: Belconnen;Macquarie;Unclassified ACT; } + - { name: O'Hanlon Place,stop_code: Wjz7hb5, lat: -35.1921368, lng: 149.0859491, zone_id: Bonner;Nicholls;Unclassified ACT; } + - { name: Lyttleton Crescent,stop_code: Wjz54_B, lat: -35.2608235, lng: 149.0728514, zone_id: Acton;Cook;Unclassified ACT; } + - { name: Gundaroo Drive,stop_code: Wjz7HWo, lat: -35.182306, lng: 149.1275792, zone_id: Bonner;Gungahlin;Ngunnawal;Unclassified ACT; } + - { name: Templeton Street,stop_code: Wjz5592, lat: -35.2596812, lng: 149.0639679, zone_id: Cook;Unclassified ACT; } + - { name: Shumack Street,stop_code: WjrZTMv, lat: -35.2489575, lng: 149.0493939, zone_id: Weetangera;Unclassified ACT; } + - { name: Bateson Road,stop_code: Wjz3twg, lat: -35.3484618, lng: 149.1014323, zone_id: Garran;O'Malley;Unclassified ACT; } + - { name: Soward Way,stop_code: Wjz20QI, lat: -35.4168303, lng: 149.0716491, zone_id: Greenway;Unclassified ACT; } + - { name: Hawker Place,stop_code: Wjr-Mg6, lat: -35.2436162, lng: 149.0432913, zone_id: Hawker;Page;Unclassified ACT; } + - { name: Kirkton Street,stop_code: Wjz2kVV, lat: -35.3971025, lng: 149.0952954, zone_id: Wanniassa;Unclassified ACT; } + - { name: Murranji Street,stop_code: WjrZLXY, lat: -35.2471491, lng: 149.0403988, zone_id: Hawker;Unclassified ACT; } + - { name: Akuna Street,stop_code: Wjz5NyR, lat: -35.2807097, lng: 149.1350994, zone_id: City;Unclassified ACT; } + - { name: Dawes Street,stop_code: Wjz4Ws5, lat: -35.3177926, lng: 149.1435967, zone_id: Griffith;Kingston;Unclassified ACT; } + - { name: Langdon Avenue,stop_code: Wjz2kv_, lat: -35.3924846, lng: 149.0899096, zone_id: Kambah;Wanniassa;Unclassified ACT; } + - { name: Burkitt Street,stop_code: Wjr-NQD, lat: -35.2352414, lng: 149.0495101, zone_id: Florey;Page;Unclassified ACT; } + - { name: Ratcliffe Crescent,stop_code: Wjr-Wil, lat: -35.2312716, lng: 149.0546439, zone_id: Florey;Unclassified ACT; } + - { name: Hardwick Crescent,stop_code: Wjr-z7J, lat: -35.2223574, lng: 149.0195037, zone_id: Holt;Latham;Unclassified ACT; } + - { name: Marconi Crescent,stop_code: WjrW_zu, lat: -35.3788924, lng: 149.0576496, zone_id: Kambah;Unclassified ACT; } + - { name: Marconi Crescent,stop_code: Wjz27gg, lat: -35.3814094, lng: 149.0656219, zone_id: Kambah;Unclassified ACT; } + - { name: Thynne Street,stop_code: Wjz5n_K, lat: -35.2442554, lng: 149.095053, zone_id: Bruce;Unclassified ACT; } + - { name: Scollay Street,stop_code: Wjz17BY, lat: -35.4216013, lng: 149.0692072, zone_id: Greenway;Unclassified ACT; } + - { name: O'Halloran Circuit,stop_code: Wjz24lA, lat: -35.3941231, lng: 149.0659575, zone_id: Kambah;Unclassified ACT; } + - { name: Clancy Street,stop_code: Wjz66Lx, lat: -35.2062279, lng: 149.0700922, zone_id: Bonner;Evatt;Spence;Unclassified ACT; } + - { name: Kingsford Smith Drive,stop_code: Wjr_UPL, lat: -35.1975228, lng: 149.0606273, zone_id: Spence;Unclassified ACT; } + - { name: Clarey Crescent,stop_code: Wjz70kD, lat: -35.196836, lng: 149.0659887, zone_id: Bonner;Spence;Unclassified ACT; } + - { name: Theodore Street,stop_code: Wjz48Q1, lat: -35.3291744, lng: 149.0818599, zone_id: Curtin;Unclassified ACT; } + - { name: Launceston Street,stop_code: Wjz3e8l, lat: -35.3425473, lng: 149.0752509, zone_id: Lyons;Unclassified ACT; } + - { name: Streeton Drive,stop_code: WjrX_1g, lat: -35.336799, lng: 149.0519909, zone_id: Holder;Weston;Unclassified ACT; } + - { name: Bingley Crescent,stop_code: Wjr_V6V, lat: -35.1904467, lng: 149.0528033, zone_id: Fraser;Unclassified ACT; } + - { name: Robertson Street,stop_code: Wjz4a9o, lat: -35.3203323, lng: 149.0754663, zone_id: Curtin;Unclassified ACT; } + - { name: Shirley Street,stop_code: Wjze09i, lat: -35.2432594, lng: 149.1521583, zone_id: Downer;Watson;Unclassified ACT; } + - { name: Canopus Crescent,stop_code: Wjz6lCb, lat: -35.2122523, lng: 149.0902958, zone_id: Bonner;Giralang;Unclassified ACT; } + - { name: Julia Flynn Avenue,stop_code: Wjz3yhr, lat: -35.363967, lng: 149.1097901, zone_id: Isaacs;Unclassified ACT; } + - { name: Townshend Street,stop_code: Wjz3khK, lat: -35.3527672, lng: 149.0882466, zone_id: Phillip;Unclassified ACT; } + - { name: Burrinjuck Crescent,stop_code: WjrXLTo, lat: -35.332656, lng: 149.0384648, zone_id: Duffy;Holder;Unclassified ACT; } + - { name: Stradbroke Street,stop_code: Wjz4q-b, lat: -35.3166239, lng: 149.1052572, zone_id: Deakin;Unclassified ACT; } + - { name: Owen Dixon Drive,stop_code: Wjz6l5Q, lat: -35.2128308, lng: 149.0856395, zone_id: McKellar;Bonner;Giralang;Unclassified ACT; } + - { name: Fullagar Crescent,stop_code: Wjr-zMF, lat: -35.2275557, lng: 149.0277252, zone_id: Higgins;Holt;Latham;Unclassified ACT; } + - { name: Owen Dixon Drive,stop_code: Wjz70Wi, lat: -35.1986355, lng: 149.0725952, zone_id: Bonner;Spence;Unclassified ACT; } + - { name: Archdall Street,stop_code: Wjr-vNL, lat: -35.2043835, lng: 149.0167621, zone_id: Dunlop;Macgregor;Unclassified ACT; } + - { name: Beaurepaire Crescent,stop_code: Wjr-rv7, lat: -35.2221818, lng: 149.0117611, zone_id: Holt;Unclassified ACT; } + - { name: Macnaughton Street,stop_code: Wjr-qZg, lat: -35.2296561, lng: 149.0176617, zone_id: Higgins;Holt;Unclassified ACT; } + - { name: Paperbark Street,stop_code: Wjz0uHo, lat: -35.4727434, lng: 149.1029344, zone_id: Banks;Unclassified ACT; } + - { name: Limestone Avenue,stop_code: Wjz5X3a, lat: -35.2693144, lng: 149.1396485, zone_id: Ainslie;Braddon;Unclassified ACT; } + - { name: Wirraway Crescent,stop_code: Wjr-GyJ, lat: -35.2312775, lng: 149.0359574, zone_id: Florey;Scullin;Unclassified ACT; } + - { name: Maria Smith Lane,stop_code: Wjz7QpP, lat: -35.177217, lng: 149.1337047, zone_id: Amaroo;Bonner;Gungahlin;Unclassified ACT; } + - { name: Ainsworth Street,stop_code: Wjz3rcB, lat: -35.3562498, lng: 149.0975914, zone_id: Mawson;Phillip;Unclassified ACT; } + - { name: Ross Smith Crescent,stop_code: Wjr-FCU, lat: -35.2344506, lng: 149.0363984, zone_id: Florey;Scullin;Unclassified ACT; } + - { name: Murranji Street,stop_code: WjrZLdA, lat: -35.245805, lng: 149.0316615, zone_id: Hawker;Unclassified ACT; } + - { name: Templeton Street,stop_code: WjrZZH3, lat: -35.2583026, lng: 149.0584315, zone_id: Cook;Unclassified ACT; } + - { name: Lachlan Street,stop_code: Wjz557P, lat: -35.2555149, lng: 149.0636155, zone_id: Cook;Macquarie;Unclassified ACT; } + - { name: Bennelong Crescent,stop_code: WjrZ-Jc, lat: -35.2513107, lng: 149.058664, zone_id: Macquarie;Unclassified ACT; } + - { name: McClelland Avenue,stop_code: Wjz7jaJ, lat: -35.1819033, lng: 149.0868551, zone_id: Bonner;Nicholls;Unclassified ACT; } + - { name: Whitfield Circuit,stop_code: Wjz7pkV, lat: -35.1918235, lng: 149.0995622, zone_id: Bonner;Nicholls;Unclassified ACT; } + - { name: Jabanungga Avenue,stop_code: Wjz7tIt, lat: -35.169553, lng: 149.1029128, zone_id: Bonner;Ngunnawal;Unclassified ACT; } + - { name: Curran Drive,stop_code: Wjz7aYu, lat: -35.1858633, lng: 149.0836554, zone_id: Bonner;Nicholls;Unclassified ACT; } + - { name: College Street,stop_code: Wjz68W3, lat: -35.2425008, lng: 149.0831669, zone_id: Bruce;Unclassified ACT; } + - { name: Bindel Street,stop_code: Wjz5e8Y, lat: -35.2547235, lng: 149.0761202, zone_id: Aranda;Bruce;Unclassified ACT; } + - { name: Forlonge Street,stop_code: Wjz2bGs, lat: -35.4016792, lng: 149.0808766, zone_id: Kambah;Wanniassa;Unclassified ACT; } + - { name: Hodgson Crescent,stop_code: Wjz3jaF, lat: -35.3579826, lng: 149.0867102, zone_id: Pearce;Unclassified ACT; } + - { name: Amy Ackman Street,stop_code: Wjz7-oI, lat: -35.1668191, lng: 149.1443901, zone_id: Bonner;Unclassified ACT; } + - { name: London Circuit,stop_code: Wjz5FOn, lat: -35.2806054, lng: 149.1260452, zone_id: Acton;City;Unclassified ACT; } + - { name: Campbell Street,stop_code: Wjz5Yq4, lat: -35.2643388, lng: 149.1435864, zone_id: Ainslie;Unclassified ACT; } + - { name: Campbell Street,stop_code: Wjz5XrS, lat: -35.2689744, lng: 149.1446925, zone_id: Ainslie;Unclassified ACT; } + - { name: Flemington Road,stop_code: Wjz6WtM, lat: -35.2296825, lng: 149.1445773, zone_id: Bonner;Lyneham;Mitchell;Watson;Unclassified ACT; } + - { name: Limestone Avenue,stop_code: Wjz5VFA, lat: -35.2815441, lng: 149.146984, zone_id: Campbell;Reid;Unclassified ACT; } + - { name: Torrens Street,stop_code: Wjz5PCM, lat: -35.2674545, lng: 149.1350501, zone_id: Braddon;Unclassified ACT; } + - { name: Constitution Avenue,stop_code: Wjz5MsD, lat: -35.2847121, lng: 149.1333531, zone_id: City;Unclassified ACT; } + - { name: Northbourne Avenue,stop_code: Wjz5Qgn, lat: -35.2655006, lng: 149.1316277, zone_id: Braddon;Turner;Unclassified ACT; } + - { name: Launceston Street,stop_code: Wjz3eje, lat: -35.3403963, lng: 149.0765097, zone_id: Lyons;Unclassified ACT; } + - { name: Amagula Avenue,stop_code: Wjz7zzB, lat: -35.1811799, lng: 149.1126486, zone_id: Bonner;Ngunnawal;Nicholls;Unclassified ACT; } + - { name: Shoalhaven Avenue,stop_code: Wjz7J-7, lat: -35.167951, lng: 149.1270626, zone_id: Amaroo;Bonner;Ngunnawal;Unclassified ACT; } + - { name: The Valley Avenue,stop_code: Wjz7Oal, lat: -35.1873286, lng: 149.1301603, zone_id: Bonner;Gungahlin;Palmerston;Unclassified ACT; } + - { name: Hoskins Street,stop_code: Wjz6QTd, lat: -35.2168483, lng: 149.1369095, zone_id: Bonner;Franklin;Mitchell;Unclassified ACT; } + - { name: Flemington Road,stop_code: Wjz6ZyF, lat: -35.2151624, lng: 149.1458712, zone_id: Bonner;Franklin;Mitchell;Unclassified ACT; } + - { name: Bowman Street,stop_code: Wjz56Hh, lat: -35.25291, lng: 149.0697814, zone_id: Macquarie;Unclassified ACT; } + - { name: Caley Crescent,stop_code: Wjz3-Bg, lat: -35.3395091, lng: 149.1453991, zone_id: Narrabundah;Symonston;Unclassified ACT; } + - { name: Copland Drive,stop_code: Wjr--W9, lat: -35.2096897, lng: 149.061394, zone_id: Melba;Evatt;Unclassified ACT; } + - { name: MacFarland Crescent,stop_code: Wjz3b9v, lat: -35.3581498, lng: 149.0754026, zone_id: Chifley;Pearce;Unclassified ACT; } + - { name: Wentworth Avenue,stop_code: Wjz4WId, lat: -35.3178626, lng: 149.1464988, zone_id: Griffith;Kingston;Unclassified ACT; } + - { name: Deamer Crescent,stop_code: Wjz1Kiq, lat: -35.4293151, lng: 149.1208193, zone_id: Chisholm;Richardson;Unclassified ACT; } + - { name: Belconnen Way,stop_code: Wjr-MNh, lat: -35.2433401, lng: 149.0492618, zone_id: Page;Weetangera;Unclassified ACT; } + - { name: Belconnen Way,stop_code: Wjr-Mqd, lat: -35.2422956, lng: 149.0448568, zone_id: Hawker;Page;Unclassified ACT; } + - { name: Verbrugghen Street,stop_code: Wjr-RT-, lat: -35.2113153, lng: 149.0500244, zone_id: Melba;Flynn;Unclassified ACT; } + - { name: Bramston Street,stop_code: Wjz2Gdi, lat: -35.4052705, lng: 149.1192154, zone_id: Fadden;Gowrie;Unclassified ACT; } + - { name: Athllon Drive,stop_code: Wjz3gK-, lat: -35.3712753, lng: 149.0926679, zone_id: Mawson;Kambah;Torrens;Unclassified ACT; } + - { name: Athllon Drive,stop_code: Wjz3iFK, lat: -35.3637163, lng: 149.0922629, zone_id: Mawson;Pearce;Unclassified ACT; } + - { name: Ashburton Circuit,stop_code: Wjz6zAP, lat: -35.2246234, lng: 149.113116, zone_id: Bonner;Franklin;Kaleen;Unclassified ACT; } + - { name: Bradley Street,stop_code: Wjz3ldJ, lat: -35.344566, lng: 149.086774, zone_id: Phillip;Unclassified ACT; } + - { name: Pitman,stop_code: Wjz20nf, lat: -35.4144924, lng: 149.0655423, zone_id: Greenway;Unclassified ACT; } + - { name: Cohen Street,stop_code: Wjr-USo, lat: -35.2400027, lng: 149.0603149, zone_id: Belconnen;Unclassified ACT; } + - { name: Verbrugghen Street,stop_code: Wjr-ZJc, lat: -35.2128875, lng: 149.0586429, zone_id: Melba;Evatt;Unclassified ACT; } + - { name: Darwinia Terrace,stop_code: WjrXI5s, lat: -35.3501807, lng: 149.0301549, zone_id: Chapman;Rivett;Unclassified ACT; } + - { name: Perry Drive,stop_code: WjrXOn_, lat: -35.359526, lng: 149.0445552, zone_id: Chapman;Unclassified ACT; } + - { name: Fremantle Drive,stop_code: WjrXQOh, lat: -35.3524926, lng: 149.049231, zone_id: Chapman;Stirling;Unclassified ACT; } + - { name: Fremantle Drive,stop_code: WjrXRzE, lat: -35.3464066, lng: 149.0469632, zone_id: Chapman;Rivett;Stirling;Unclassified ACT; } + - { name: Gilmore Crescent,stop_code: Wjz3BfO, lat: -35.3434784, lng: 149.1088951, zone_id: Garran;Red Hill;Unclassified ACT; } + - { name: Constitution Avenue,stop_code: Wjz4_7i, lat: -35.2885802, lng: 149.1398674, zone_id: Parkes;Reid;Unclassified ACT; } + - { name: Constitution Avenue,stop_code: Wjz4_xZ, lat: -35.2923896, lng: 149.1462296, zone_id: Campbell;Parkes;Russell;Unclassified ACT; } + - { name: Menindee Drive,stop_code: Wjzc51P, lat: -35.3035978, lng: 149.1515081, zone_id: Barton;Campbell;Fyshwick;Unclassified ACT; } + - { name: Menindee Drive,stop_code: Wjzc51o, lat: -35.3038736, lng: 149.1509932, zone_id: Barton;Campbell;Fyshwick;Unclassified ACT; } + - { name: Mackennal Street,stop_code: Wjz5Ls_, lat: -35.2462532, lng: 149.1227978, zone_id: Lyneham;O'Connor;Unclassified ACT; } + - { name: Benjamin Way,stop_code: Wjz57tz, lat: -35.2459378, lng: 149.0673726, zone_id: Belconnen;Macquarie;Unclassified ACT; } + - { name: Hennessy Street,stop_code: Wjz57Rp, lat: -35.2460429, lng: 149.0712994, zone_id: Belconnen;Macquarie;Unclassified ACT; } + - { name: Hennessy Street,stop_code: Wjz5f20, lat: -35.2482159, lng: 149.0735953, zone_id: Belconnen;Bruce;Macquarie;Unclassified ACT; } + - { name: Federal Highway,stop_code: Wjz6Vie, lat: -35.2367108, lng: 149.1423457, zone_id: Downer;Lyneham;Unclassified ACT; } + - { name: Tillyard Drive,stop_code: Wjr_Nj3, lat: -35.1923664, lng: 149.0432864, zone_id: Fraser;Unclassified ACT; } + - { name: Lind Close,stop_code: Wjr_NgT, lat: -35.1940674, lng: 149.0444665, zone_id: Charnwood;Fraser;Unclassified ACT; } + - { name: William Webb Drive,stop_code: Wjz65Yz, lat: -35.2136695, lng: 149.0728014, zone_id: McKellar;Bonner;Evatt;Unclassified ACT; } + - { name: Corlette Crescent,stop_code: Wjz2guG, lat: -35.4155625, lng: 149.0896092, zone_id: Monash;Unclassified ACT; } + - { name: Kneebone Street,stop_code: Wjz1ebG, lat: -35.4286654, lng: 149.0758806, zone_id: Bonython;Greenway;Unclassified ACT; } + - { name: Anthony Rolfe Avenue,stop_code: Wjz7WBn, lat: -35.1851618, lng: 149.1452704, zone_id: Bonner;Gungahlin;Unclassified ACT; } + - { name: Lysaght Street,stop_code: Wjz6Z97, lat: -35.2153728, lng: 149.1409359, zone_id: Bonner;Franklin;Mitchell;Unclassified ACT; } + - { name: Gaunson Crescent,stop_code: Wjz2sbG, lat: -35.3957032, lng: 149.0977631, zone_id: Wanniassa;Unclassified ACT; } + - { name: Livingston Avenue,stop_code: Wjz2dKJ, lat: -35.3879015, lng: 149.081348, zone_id: Kambah;Wanniassa;Unclassified ACT; } + - { name: Southern Cross Drive,stop_code: Wjr-OHp, lat: -35.2309824, lng: 149.0479652, zone_id: Florey;Scullin;Unclassified ACT; } + - { name: Alfred Hill Drive,stop_code: Wjr--Ki, lat: -35.2068427, lng: 149.0588291, zone_id: Melba;Evatt;Spence;Unclassified ACT; } + - { name: Baldwin Drive,stop_code: Wjz6k-u, lat: -35.2174589, lng: 149.094759, zone_id: Bonner;Giralang;Kaleen;Lawson;Unclassified ACT; } + - { name: Palmer Street,stop_code: Wjz3tEh, lat: -35.3483568, lng: 149.1027842, zone_id: Garran;O'Malley;Unclassified ACT; } + - { name: Lathlain Street,stop_code: Wjz60d1, lat: -35.2406019, lng: 149.0638958, zone_id: Belconnen;Unclassified ACT; } + - { name: Lathlain Street,stop_code: Wjz605_, lat: -35.2400517, lng: 149.0637152, zone_id: Belconnen;Unclassified ACT; } + - { name: Bimbimbie Street,stop_code: Wjz68Yy, lat: -35.2411603, lng: 149.0838439, zone_id: Bruce;Unclassified ACT; } + - { name: Alpen Street,stop_code: Wjr-_Og, lat: -35.2042571, lng: 149.0602273, zone_id: Melba;Evatt;Spence;Unclassified ACT; } + - { name: Akuna Street,stop_code: Wjz5NpT, lat: -35.2812703, lng: 149.1336296, zone_id: City;Unclassified ACT; } + - { name: Brisbane Avenue,stop_code: Wjz4QMt, lat: -35.3095632, lng: 149.1372237, zone_id: Barton;Parkes;Unclassified ACT; } + - { name: Copland Drive,stop_code: Wjr-YcT, lat: -35.2187393, lng: 149.0539932, zone_id: Melba;Florey;Unclassified ACT; } + - { name: Coulter Drive,stop_code: WjrZ_tn, lat: -35.2455787, lng: 149.0560808, zone_id: Macquarie;Weetangera;Unclassified ACT; } + - { name: Tillyard Drive,stop_code: Wjr-T4O, lat: -35.2026971, lng: 149.0417156, zone_id: Charnwood;Flynn;Unclassified ACT; } + - { name: Launceston Street,stop_code: Wjz3m31, lat: -35.3408061, lng: 149.0844784, zone_id: Phillip;Unclassified ACT; } + - { name: Galibal Street,stop_code: Wjz34qe, lat: -35.3521021, lng: 149.0668104, zone_id: Waramanga;Unclassified ACT; } + - { name: College Street,stop_code: Wjz6giR, lat: -35.2422899, lng: 149.0883846, zone_id: Bruce;Unclassified ACT; } + - { name: Moynihan Street,stop_code: Wjz652H, lat: -35.2150139, lng: 149.0634241, zone_id: Melba;Bonner;Evatt;Unclassified ACT; } + - { name: Wyangala Street,stop_code: WjrXK9U, lat: -35.3422659, lng: 149.0321884, zone_id: Duffy;Rivett;Unclassified ACT; } + - { name: Briggs Street,stop_code: Wjz6VqV, lat: -35.2371606, lng: 149.1448198, zone_id: Downer;Lyneham;Watson;Unclassified ACT; } + - { name: Kareelah Vista,stop_code: Wjz3z6u, lat: -35.3548322, lng: 149.1071079, zone_id: Mawson;Isaacs;O'Malley;Unclassified ACT; } + - { name: MacFarland Crescent,stop_code: Wjz3aGI, lat: -35.3632146, lng: 149.0813694, zone_id: Pearce;Unclassified ACT; } + - { name: Dixon Drive,stop_code: WjrXLGN, lat: -35.335982, lng: 149.0375421, zone_id: Duffy;Holder;Unclassified ACT; } + - { name: Macgregor Street,stop_code: Wjz4qJ7, lat: -35.3169478, lng: 149.1023818, zone_id: Deakin;Unclassified ACT; } + - { name: Ashkanasy Crescent,stop_code: Wjz66oO, lat: -35.2109547, lng: 149.067737, zone_id: Bonner;Evatt;Unclassified ACT; } + - { name: Cutlack Street,stop_code: Wjz6esB, lat: -35.2079745, lng: 149.0783653, zone_id: Bonner;Evatt;Unclassified ACT; } + - { name: Marconi Crescent,stop_code: Wjz27d3, lat: -35.3777767, lng: 149.064033, zone_id: Kambah;Unclassified ACT; } + - { name: Marconi Crescent,stop_code: Wjz26n5, lat: -35.3816653, lng: 149.0653041, zone_id: Kambah;Unclassified ACT; } + - { name: Summerland Circuit,stop_code: Wjz26Om, lat: -35.385045, lng: 149.0711386, zone_id: Kambah;Unclassified ACT; } + - { name: O'Halloran Circuit,stop_code: Wjz24lu, lat: -35.3939542, lng: 149.0657865, zone_id: Kambah;Unclassified ACT; } + - { name: Vansittart Crescent,stop_code: Wjz248n, lat: -35.3972727, lng: 149.064345, zone_id: Greenway;Kambah;Unclassified ACT; } + - { name: Learmonth Drive,stop_code: WjrWXON, lat: -35.4019182, lng: 149.060886, zone_id: Greenway;Kambah;Unclassified ACT; } + - { name: Clancy Street,stop_code: Wjz66KO, lat: -35.2068138, lng: 149.0704302, zone_id: Bonner;Evatt;Spence;Unclassified ACT; } + - { name: Chisholm Street,stop_code: Wjz5Wmw, lat: -35.2729408, lng: 149.1428886, zone_id: Ainslie;Braddon;Campbell;Unclassified ACT; } + - { name: Baddeley Crescent,stop_code: Wjz701a, lat: -35.1992794, lng: 149.0628172, zone_id: Bonner;Spence;Unclassified ACT; } + - { name: Starke Street,stop_code: Wjr-y7q, lat: -35.2281166, lng: 149.0190993, zone_id: Higgins;Holt;Unclassified ACT; } + - { name: Clarey Crescent,stop_code: Wjz707-, lat: -35.1947883, lng: 149.0637942, zone_id: Bonner;Spence;Unclassified ACT; } + - { name: Clarey Crescent,stop_code: Wjz70zB, lat: -35.1976784, lng: 149.0688026, zone_id: Bonner;Spence;Unclassified ACT; } + - { name: Owen Dixon Drive,stop_code: Wjz70Wx, lat: -35.1986717, lng: 149.0728065, zone_id: Bonner;Spence;Unclassified ACT; } + - { name: Milne Bay Road,stop_code: Wjzce7O, lat: -35.2940494, lng: 149.162512, zone_id: Campbell;Unclassified ACT; } + - { name: Drakeford Drive,stop_code: WjrXUoV, lat: -35.3758661, lng: 149.0568376, zone_id: Kambah;Unclassified ACT; } + - { name: Bandjalong Crescent,stop_code: Wjz5dcJ, lat: -35.2573868, lng: 149.075852, zone_id: Acton;Aranda;Bruce;Unclassified ACT; } + - { name: Comrie Street,stop_code: Wjz2qnG, lat: -35.4038881, lng: 149.0992283, zone_id: Wanniassa;Unclassified ACT; } + - { name: Paperbark Street,stop_code: Wjz0uSv, lat: -35.4701046, lng: 149.1043077, zone_id: Banks;Conder;Unclassified ACT; } + - { name: Amy Ackman Street,stop_code: Wjz7ZaH, lat: -35.171087, lng: 149.1418054, zone_id: Bonner;Unclassified ACT; } + - { name: Limestone Avenue,stop_code: Wjz5Wki, lat: -35.2741145, lng: 149.1425667, zone_id: Ainslie;Braddon;Campbell;Unclassified ACT; } + - { name: David Walsh Avenue,stop_code: Wjz7YIc, lat: -35.1751298, lng: 149.1466086, zone_id: Bonner;Gungahlin;Unclassified ACT; } + - { name: Barritt Street,stop_code: WjrWTWO, lat: -35.3798917, lng: 149.0512179, zone_id: Kambah;Unclassified ACT; } + - { name: Mort Street,stop_code: Wjz5Oj2, lat: -35.2748472, lng: 149.131256, zone_id: Braddon;Turner;Unclassified ACT; } + - { name: Gundaroo Drive,stop_code: Wjz7Pt9, lat: -35.1801635, lng: 149.1328464, zone_id: Bonner;Gungahlin;Unclassified ACT; } + - { name: Northbourne Avenue,stop_code: Wjz5Rsi, lat: -35.2576771, lng: 149.132889, zone_id: Dickson;Lyneham;Unclassified ACT; } + - { name: Ainsworth Street,stop_code: Wjz3ran, lat: -35.3574923, lng: 149.0972696, zone_id: Mawson;Unclassified ACT; } + - { name: Northbourne Avenue,stop_code: Wjz5P8n, lat: -35.2710038, lng: 149.1301486, zone_id: Braddon;Turner;Unclassified ACT; } + - { name: Black Mountain Summit Walk,stop_code: Wjz5xl6, lat: -35.278643, lng: 149.1093237, zone_id: Acton;Unclassified ACT; } + - { name: Temperley Street,stop_code: Wjz7pj1, lat: -35.1925446, lng: 149.0982466, zone_id: Bonner;Nicholls;Unclassified ACT; } + - { name: Laurens Street,stop_code: Wjz2aXM, lat: -35.4068387, lng: 149.0841811, zone_id: Monash;Oxley;Wanniassa;Unclassified ACT; } + - { name: Hoskins Street,stop_code: Wjz6SVl, lat: -35.2100433, lng: 149.1385112, zone_id: Bonner;Franklin;Mitchell;Unclassified ACT; } + - { name: Hoskins Street,stop_code: Wjz6_2a, lat: -35.2041349, lng: 149.1396699, zone_id: Bonner;Franklin;Unclassified ACT; } + - { name: Kent Street,stop_code: Wjz4peM, lat: -35.322342, lng: 149.0979263, zone_id: Deakin;Unclassified ACT; } + - { name: Baldwin Drive,stop_code: Wjz6s4T, lat: -35.2187386, lng: 149.0965829, zone_id: Bonner;Franklin;Giralang;Kaleen;Lawson;Unclassified ACT; } + - { name: Maribyrnong Avenue,stop_code: Wjz6yir, lat: -35.2314837, lng: 149.1098378, zone_id: Bruce;Kaleen;Unclassified ACT; } + - { name: Weston Street,stop_code: Wjz4z67, lat: -35.3107704, lng: 149.1065979, zone_id: Deakin;Yarralumla;Unclassified ACT; } + - { name: Shakespeare Crescent,stop_code: Wjr_FiT, lat: -35.1926498, lng: 149.0333901, zone_id: Fraser;Unclassified ACT; } + - { name: Gawler Crescent,stop_code: Wjz4yDo, lat: -35.3161818, lng: 149.112483, zone_id: Deakin;Unclassified ACT; } + - { name: Palmer Street,stop_code: Wjz3tGi, lat: -35.3469041, lng: 149.1027627, zone_id: Garran;O'Malley;Red Hill;Unclassified ACT; } + - { name: Southern Cross Drive,stop_code: Wjr-ANt, lat: -35.2210131, lng: 149.0274356, zone_id: Holt;Latham;Unclassified ACT; } + - { name: Chippindall Circuit,stop_code: Wjz1G89, lat: -35.4527651, lng: 149.1190457, zone_id: Calwell;Conder;Theodore;Unclassified ACT; } + - { name: Clift Crescent,stop_code: Wjz1J4T, lat: -35.4330044, lng: 149.1185777, zone_id: Calwell;Richardson;Unclassified ACT; } + - { name: Deamer Crescent,stop_code: Wjz1S5I, lat: -35.4271223, lng: 149.1292791, zone_id: Chisholm;Richardson;Unclassified ACT; } + - { name: Giles Street,stop_code: Wjz4Xqk, lat: -35.3137831, lng: 149.1439239, zone_id: Barton;Kingston;Unclassified ACT; } + - { name: Norriss Street,stop_code: Wjz2Ek6, lat: -35.416638, lng: 149.1202507, zone_id: Chisholm;Richardson;Unclassified ACT; } + - { name: Proctor Street,stop_code: Wjz2EK5, lat: -35.4152915, lng: 149.1244564, zone_id: Chisholm;Fadden;Unclassified ACT; } + - { name: Gaunson Crescent,stop_code: Wjz2su2, lat: -35.3936391, lng: 149.0996299, zone_id: Wanniassa;Unclassified ACT; } + - { name: Gillies Street,stop_code: Wjz49Y5, lat: -35.3233291, lng: 149.0831296, zone_id: Curtin;Unclassified ACT; } + - { name: Novar Street,stop_code: Wjz4shf, lat: -35.3086912, lng: 149.0984092, zone_id: Yarralumla;Unclassified ACT; } + - { name: Scantlebury Crescent,stop_code: Wjz1HSo, lat: -35.4432403, lng: 149.1262481, zone_id: Theodore;Unclassified ACT; } + - { name: Groom Street,stop_code: Wjz4gt5, lat: -35.3281248, lng: 149.0887511, zone_id: Curtin;Deakin;Hughes;Unclassified ACT; } + - { name: Ratcliffe Crescent,stop_code: Wjr-OSy, lat: -35.2288528, lng: 149.0495423, zone_id: Florey;Unclassified ACT; } + - { name: Carruthers Street,stop_code: Wjz499S, lat: -35.3252899, lng: 149.0759651, zone_id: Curtin;Unclassified ACT; } + - { name: Wheeler Crescent,stop_code: Wjz2aLs, lat: -35.4037395, lng: 149.081019, zone_id: Oxley;Wanniassa;Unclassified ACT; } + - { name: Evelyn Owen Crescent,stop_code: Wjr_w0L, lat: -35.1995769, lng: 149.0194714, zone_id: Dunlop;Unclassified ACT; } + - { name: Binns Street,stop_code: Wjr_GGq, lat: -35.1875953, lng: 149.0370811, zone_id: Fraser;Unclassified ACT; } + - { name: Barr Smith Avenue,stop_code: Wjz1dCc, lat: -35.4319028, lng: 149.0791593, zone_id: Bonython;Isabella Plains;Unclassified ACT; } + - { name: Wollongong Street,stop_code: WjzcgD0, lat: -35.3271927, lng: 149.1779495, zone_id: Fyshwick;Pialligo;Unclassified ACT; } + - { name: Heysen Street,stop_code: WjrYUi3, lat: -35.3303715, lng: 149.0543864, zone_id: Weston;Unclassified ACT; } + - { name: Watkin Street,stop_code: Wjz5n-V, lat: -35.245377, lng: 149.0953749, zone_id: Bruce;Unclassified ACT; } + - { name: Shakespeare Crescent,stop_code: Wjr_GMR, lat: -35.188754, lng: 149.0388232, zone_id: Fraser;Unclassified ACT; } + - { name: Bradfield Street,stop_code: Wjz6UOi, lat: -35.2425584, lng: 149.1479955, zone_id: Downer;Lyneham;Watson;Unclassified ACT; } + - { name: McInnes Street,stop_code: WjrX-LF, lat: -35.3380475, lng: 149.0593646, zone_id: Weston;Unclassified ACT; } + - { name: McInnes Street,stop_code: Wjz3556, lat: -35.3444888, lng: 149.0625725, zone_id: Weston;Unclassified ACT; } + - { name: Collings Street,stop_code: Wjz3au8, lat: -35.3608522, lng: 149.0779362, zone_id: Pearce;Unclassified ACT; } + - { name: Mapleton Avenue,stop_code: Wjzf11h, lat: -35.1938773, lng: 149.1508064, zone_id: Bonner;Franklin;Gungahlin;Harrison;Unclassified ACT; } + - { name: Anzac Parade,stop_code: Wjz5Ug6, lat: -35.2874971, lng: 149.1421805, zone_id: Campbell;Parkes;Reid;Unclassified ACT; } + - { name: Belconnen Way,stop_code: Wjr-EAb, lat: -35.2411038, lng: 149.0352891, zone_id: Hawker;Scullin;Unclassified ACT; } + - { name: Southern Cross Drive,stop_code: Wjr-OlW, lat: -35.2295189, lng: 149.0445481, zone_id: Florey;Scullin;Unclassified ACT; } + - { name: Burrinjuck Crescent,stop_code: WjrXLaD, lat: -35.3355436, lng: 149.0316183, zone_id: Duffy;Unclassified ACT; } + - { name: Dobinson Place,stop_code: Wjr-KOL, lat: -