--- a/common-geo.inc.php +++ b/common-geo.inc.php @@ -51,7 +51,7 @@ if ($collapsible) $output.= '</div>'; return $output; } -function distance($lat1, $lng1, $lat2, $lng2) +function distance($lat1, $lng1, $lat2, $lng2, $roundLargeValues = false) { $pi80 = M_PI / 180; $lat1*= $pi80; @@ -64,7 +64,10 @@ $a = sin($dlat / 2) * sin($dlat / 2) + cos($lat1) * cos($lat2) * sin($dlng / 2) * sin($dlng / 2); $c = 2 * atan2(sqrt($a) , sqrt(1 - $a)); $km = $r * $c; - return $km * 1000; + if ($roundLargeValues) { + if ($km < 1) return floor($km * 1000); + else return round($km,2)."k"; + } else return floor($km * 1000); } function decodePolylineToArray($encoded) {
--- a/common-template.inc.php +++ b/common-template.inc.php @@ -3,8 +3,9 @@ { echo ' <!DOCTYPE html> -<html> - <head> +<html lang="en"> + <head> + <meta charset="UTF-8"> <title>' . $pageTitle . '</title>'; if ($datepicker) echo '<link rel="stylesheet" href="css/jquery.ui.datepicker.mobile.css" />'; if (isDebugServer()) echo '<link rel="stylesheet" href="css/jquery-mobile-1.0a3.css" /> @@ -20,7 +21,7 @@ }); </script> <script src="js/jQuery.ui.datepicker.js"></script>'; -echo '<style type="text/css"> + echo '<style type="text/css"> .ui-navbar { width: 100%; } @@ -44,11 +45,34 @@ body { background-color: #F0F0F0; } -</style> -<meta name="apple-mobile-web-app-capable" content="yes" /> + #jqm-homeheader { + text-align: center; + } + + // source http://webaim.org/techniques/skipnav/ + #skip a, #skip a:hover, #skip a:visited +{ +position:absolute; +left:0px; +top:-500px; +width:1px; +height:1px; +overflow:hidden; +} + +#skip a:active, #skip a:focus +{ +position:static; +width:auto; +height:auto; +} +</style>'; + if (strstr($_SERVER['HTTP_USER_AGENT'], 'iPhone') || strstr($_SERVER['HTTP_USER_AGENT'], 'iPod')) { + echo '<meta name="apple-mobile-web-app-capable" content="yes" /> <meta name="apple-mobile-web-app-status-bar-style" content="black" /> <link rel="apple-touch-startup-image" href="startup.png" /> <link rel="apple-touch-icon" href="apple-touch-icon.png" />'; + } if ($geolocate) { echo "<script> @@ -63,25 +87,22 @@ } if (navigator.geolocation) { - navigator.geolocation.getCurrentPosition(success, error); +var options = { + enableHighAccuracy: false, + timeout: 60000, + maximumAge: 10000 +} + navigator.geolocation.getCurrentPosition(success, error, options); } </script> "; } echo '</head> <body> + <div id="skip"> + <a href="#maincontent">Skip to content</a> + </div> '; - if (isMetricsOn()) { - require_once ('owa/owa_env.php'); - require_once (OWA_DIR . 'owa_php.php'); - $owa = new owa_php(); - global $owaSiteID; - $owa->setSiteId($owaSiteID); - $owa->setPageTitle($pageTitle); - $owa->setPageType($pageType); - $owa->trackPageView(); - $owa->placeHelperPageTags(); - } if ($opendiv) { echo '<div data-role="page"> <script> @@ -93,6 +114,7 @@ <div data-role="header"> <h1>' . $pageTitle . '</h1> </div><!-- /header --> + <a name="maincontent" id="maincontent"></a> <div data-role="content"> '; } } @@ -120,22 +142,22 @@ or enter an address/co-ordinates in the box below.</div>'; } echo '<div data-role="collapsible" data-collapsed="' . !$geoerror . '"> - <h3>Change Time/Place (' . (isset($_SESSION['time']) ? $_SESSION['time'] : "Current Time,") . ' '.ucwords(service_period()).')...</h3> - <form action="" method="post"> + <h3>Change Time/Place (' . (isset($_SESSION['time']) ? $_SESSION['time'] : "Current Time,") . ' ' . ucwords(service_period()) . ')...</h3> + <form action="'.basename($_SERVER['PHP_SELF']).'" method="post"> <div class="ui-body"> <div data-role="fieldcontain"> <label for="geolocate"> Current Location: </label> - <input type="text" id="geolocate" name="geolocate" value="' . (isset($_SESSION['lat']) && isset($_SESSION['lon']) ? $_SESSION['lat'] . "," . $_SESSION['lon'] : "Enter co-ordinates or address here") . '"/> <a href="#" style="display:none" name="here" id="here"/>Here?</a> + <input type="text" id="geolocate" name="geolocate" value="' . (isset($_SESSION['lat']) && isset($_SESSION['lon']) ? $_SESSION['lat'] . "," . $_SESSION['lon'] : "Enter co-ordinates or address here") . '"/> <a href="#" style="display:none" name="here" id="here">Here?</a> </div> <div data-role="fieldcontain"> <label for="time"> Time: </label> - <input type="time" name="time" id="time" value="' . (isset($_SESSION['time']) ? $_SESSION['time'] : date("H:i")) . '"/> <a href="#" name="currentTime" id="currentTime"/>Current Time?</a> + <input type="time" name="time" id="time" value="' . (isset($_SESSION['time']) ? $_SESSION['time'] : date("H:i")) . '"/> <a href="#" name="currentTime" id="currentTime">Current Time?</a> </div> <div data-role="fieldcontain"> <label for="service_period"> Service Period: </label> - <select name="service_period">'; + <select name="service_period" id="service_period">'; foreach ($service_periods as $service_period) { - echo "<option value=\"$service_period\"" . (service_period() === $service_period ? "SELECTED" : "") . '>' . ucwords($service_period) . '</option>'; + echo "<option value=\"$service_period\"" . (service_period() === $service_period ? " SELECTED" : "") . '>' . ucwords($service_period) . '</option>'; } echo '</select> <a href="#" style="display:none" name="currentPeriod" id="currentPeriod"/>Current Period?</a>
--- a/common.inc.php +++ b/common.inc.php @@ -4,7 +4,6 @@ $cloudmadeAPIkey = "daa03470bb8740298d4b10e3f03d63e6"; $googleMapsAPIkey = "ABQIAAAA95XYXN0cki3Yj_Sb71CFvBTPaLd08ONybQDjcH_VdYtHHLgZvRTw2INzI_m17_IoOUqH3RNNmlTk1Q"; $otpAPIurl = 'http://localhost:8080/opentripplanner-api-webapp/'; -$owaSiteID = 'fe5b819fa8c424a99ff0764d955d23f3'; //$debugOkay = Array("session","json","phperror","other"); $debugOkay = Array( "session", @@ -26,48 +25,32 @@ $_SESSION['time'] = filter_var($_REQUEST['time'], FILTER_SANITIZE_STRING); } if (isset($_REQUEST['geolocate'])) { - $geocoded = false; if (isset($_REQUEST['lat']) && isset($_REQUEST['lon'])) { $_SESSION['lat'] = trim(filter_var($_REQUEST['lat'], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION)); $_SESSION['lon'] = trim(filter_var($_REQUEST['lon'], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION)); } else { - $geolocate = filter_var($_REQUEST['geolocate'], FILTER_SANITIZE_URL); - echo $_REQUEST['geolocate']; - if (startsWith($geolocate, "-")) { - $locateparts = explode(",",$geolocate); - $_SESSION['lat'] = $locateparts[0]; - $_SESSION['lon'] =$locateparts[1]; - } else { - $contents = geocode($geolocate, true); - print_r($contents); - if (isset($contents[0]->centroid)) { - $geocoded = true; - $_SESSION['lat'] = $contents[0]->centroid->coordinates[0]; - $_SESSION['lon'] = $contents[0]->centroid->coordinates[1]; + $geolocate = filter_var($_REQUEST['geolocate'], FILTER_SANITIZE_URL); + echo $_REQUEST['geolocate']; + if (startsWith($geolocate, "-")) { + $locateparts = explode(",", $geolocate); + $_SESSION['lat'] = $locateparts[0]; + $_SESSION['lon'] = $locateparts[1]; } else { - $_SESSION['lat'] = ""; - $_SESSION['lon'] = ""; + $contents = geocode($geolocate, true); + print_r($contents); + if (isset($contents[0]->centroid)) { + $geocoded = true; + $_SESSION['lat'] = $contents[0]->centroid->coordinates[0]; + $_SESSION['lon'] = $contents[0]->centroid->coordinates[1]; + } + else { + $_SESSION['lat'] = ""; + $_SESSION['lon'] = ""; + } } - } - } - if ($_SESSION['lat'] != "" && isMetricsOn()) { - // Create a new Instance of the tracker - $owa = new owa_php($config); - // Set the ID of the site being tracked - $owa->setSiteId($owaSiteID); - // Create a new event object - $event = $owa->makeEvent(); - // Set the Event Type, in this case a "video_play" - $event->setEventType('geolocate'); - // Set a property - $event->set('lat', $_SESSION['lat']); - $event->set('lon', $_SESSION['lon']); - $event->set('geocoded', $geocoded); - // Track the event - $owa->trackEvent($event); } } debug(print_r($_SESSION, true) , "session"); @@ -80,13 +63,34 @@ global $debugOkay; return in_array($debugReason, $debugOkay, false) && isDebugServer(); } -function isMetricsOn() -{ - return !isDebugServer(); -} function debug($msg, $debugReason = "other") { if (isDebug($debugReason)) echo "\n<!-- " . date(DATE_RFC822) . "\n $msg -->\n"; +} +function isJQueryMobileDevice() +{ + // http://forum.jquery.com/topic/what-is-the-best-way-to-detect-all-useragents-which-can-handle-jquery-mobile#14737000002087897 + $user_agent = $_SERVER['HTTP_USER_AGENT']; + return preg_match('/iphone/i', $user_agent) + || preg_match('/android/i', $user_agent) + || preg_match('/webos/i', $user_agent) + || preg_match('/ios/i', $user_agent) + || preg_match('/bada/i', $user_agent) + || preg_match('/maemo/i', $user_agent) + || preg_match('/meego/i', $user_agent) + || preg_match('/fennec/i', $user_agent) + || (preg_match('/symbian/i', $user_agent) + && preg_match('/s60/i', $user_agent) + && $browser['majorver'] >= 5) + || (preg_match('/symbian/i', $user_agent) + && preg_match('/platform/i', $user_agent) + && $browser['majorver'] >= 3) + || (preg_match('/blackberry/i', $user_agent) + && $browser['majorver'] >= 5) + || (preg_match('/opera mobile/i', $user_agent) + && $browser['majorver'] >= 10) + || (preg_match('/opera mini/i', $user_agent) + && $browser['majorver'] >= 5); } function isFastDevice() { @@ -150,5 +154,27 @@ { return str_replace(")", "</small>", str_replace("(", "<br><small>", $input)); } +function sksort(&$array, $subkey = "id", $sort_ascending = false) +{ + if (count($array)) $temp_array[key($array) ] = array_shift($array); + foreach ($array as $key => $val) { + $offset = 0; + $found = false; + foreach ($temp_array as $tmp_key => $tmp_val) { + if (!$found and strtolower($val[$subkey]) > strtolower($tmp_val[$subkey])) { + $temp_array = array_merge((array)array_slice($temp_array, 0, $offset) , array( + $key => $val + ) , array_slice($temp_array, $offset)); + $found = true; + } + $offset++; + } + if (!$found) $temp_array = array_merge($temp_array, array( + $key => $val + )); + } + if ($sort_ascending) $array = array_reverse($temp_array); + else $array = $temp_array; +} ?>
--- a/index.php +++ b/index.php @@ -5,9 +5,10 @@ <div data-role="page"> <div data-role="content"> <div id="jqm-homeheader"> - <center><h3>busness time</h3><br><small>Canberra Bus Timetables and Trip Planner</small></center> + <h1>busness time</h1><br><small>Canberra Bus Timetables and Trip Planner</small> </div> - <a href="tripPlanner.php" data-role="button" data-icon="navigation">Launch Trip Planner...</a> + <a name="maincontent" id="maincontent"></a> + <a href="tripPlanner.php" data-role="button" data-icon="navigation">Launch Trip Planner...</a> <ul data-role="listview" data-inset="true" data-theme="c" data-dividertheme="b"> <li data-role="list-divider">Timetables - Stops</li> <li><a href="stopList.php">Major (Timing Point) Stops</a></li> @@ -19,6 +20,7 @@ <li data-role="list-divider">Timetables - Routes</li> <li><a href="routeList.php">Routes By Final Destination</a></li> <li><a href="routeList.php?bynumber=yes">Routes By Number</a></li> + <li><a href="routeList.php?bysuburb=yes">Stops By Suburb</a></li> <li><a class="nearby" href="routeList.php?nearby=yes">Nearby Routes</a></li> </ul> <?php
--- a/owa/Callbacks.inc +++ /dev/null @@ -1,10 +1,1 @@ -<?php - -/** - * Gallery Template Callbacks class placeholder - * Needed for fake out the require_once() in Gallery's template class callback method - * See OWA Gallery module for the actual callback class - */ - -?>
--- a/owa/action.php +++ /dev/null @@ -1,48 +1,1 @@ -<?php -// -// Open Web Analytics - An Open Source Web Analytics Framework -// -// Copyright 2006 Peter Adams. All rights reserved. -// -// Licensed under GPL v2.0 http://www.gnu.org/copyleft/gpl.html -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// $Id$ -// - -include_once('owa_env.php'); -require_once(OWA_BASE_DIR.'/owa_php.php'); - -/** - * Special HTTP Requests Controler - * - * @author Peter Adams <peter@openwebanalytics.com> - * @copyright Copyright © 2006 Peter Adams <peter@openwebanalytics.com> - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.0.0 - * @depricated - */ - -$owa = new owa_php; - -$owa->e->debug('Special action request received by action.php...'); - -if ( $owa->isEndpointEnabled( basename( __FILE__ ) ) ) { - - // run controller or view and echo page content - echo $owa->handleRequestFromURL(); -} else { - // unload owa - $owa->restInPeace(); -} - -?>
--- a/owa/api.php +++ /dev/null @@ -1,49 +1,1 @@ -<?php -// -// Open Web Analytics - An Open Source Web Analytics Framework -// -// Copyright 2006 Peter Adams. All rights reserved. -// -// Licensed under GPL v2.0 http://www.gnu.org/copyleft/gpl.html -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// $Id$ -// - -include_once('owa_env.php'); -require_once(OWA_BASE_DIR.'/owa_php.php'); - -/** - * REST API - * - * @author Peter Adams <peter@openwebanalytics.com> - * @copyright Copyright © 2010 Peter Adams <peter@openwebanalytics.com> - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.3.0 - * @link http://wiki.openwebanalytics.com/index.php?title=REST_API - */ - -// define entry point cnstant -define('OWA_API', true); -// invoke OWA -$owa = new owa_php; - -if ( $owa->isEndpointEnabled( basename( __FILE__ ) ) ) { - - // run api command and echo page content - echo $owa->handleRequest('', 'base.apiRequest'); -} else { - // unload owa - $owa->restInPeace(); -} - -?>
--- a/owa/cli.php +++ /dev/null @@ -1,92 +1,1 @@ -<?php -// -// Open Web Analytics - An Open Source Web Analytics Framework -// -// Copyright 2006 Peter Adams. All rights reserved. -// -// Licensed under GPL v2.0 http://www.gnu.org/copyleft/gpl.html -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// $Id$ -// - -require_once('owa_env.php'); -require_once(OWA_DIR.'owa_php.php'); -require_once(OWA_BASE_CLASS_DIR.'cliController.php'); - -/** - * OWA Comand Line Interface (CLI) - * - * @author Peter Adams <peter@openwebanalytics.com> - * @copyright Copyright © 2010 Peter Adams <peter@openwebanalytics.com> - * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 - * @category owa - * @package owa - * @version $Revision$ - * @since owa 1.2.1 - */ - -define('OWA_CLI', true); - -if (!empty($_POST)) { - exit(); -} elseif (!empty($_GET)) { - exit(); -} elseif (!empty($argv)) { - $params = array(); - // get params from the command line args - // $argv is a php super global variable - - for ($i=1; $i<count($argv);$i++) - { - $it = split("=",$argv[$i]); - $params[$it[0]] = $it[1]; - } - unset($params['action']); - unset($params['do']); - -} else { - // No params found - exit(); -} - -// Initialize owa -$owa = &new owa_php; - -if ( $owa->isEndpointEnabled( basename( __FILE__ ) ) ) { - - // setting CLI mode to true - $owa->setSetting('base', 'cli_mode', true); - // setting user auth - $owa->setCurrentUser('admin', 'cli-user'); - // run controller or view and echo page content - $s = owa_coreAPI::serviceSingleton(); - $s->loadCliCommands(); - - if (array_key_exists('cmd', $params)) { - - $cmd = $s->getCliCommandClass($params['cmd']); - - if ($cmd) { - $params['do'] = $cmd; - echo $owa->handleRequest($params); - } else { - echo "Invalid command name."; - } - - } else { - echo "Missing a command argument."; - } - -} else { - // unload owa - $owa->restInPeace(); -} - -?>
--- a/owa/conf/countryCodes2Names.php +++ /dev/null @@ -1,253 +1,1 @@ -<?php -/** - * ISO-3166-1 http://en.wikipedia.org/wiki/ISO_3166-1 - */ -$countryCode2Name = array ( - 'AF' => 'Afghanistan', - 'AX' => 'Åland Islands', - 'AL' => 'Albania', - 'DZ' => 'Algeria', - 'AS' => 'American Samoa', - 'AD' => 'Andorra', - 'AO' => 'Angola', - 'AI' => 'Anguilla', - 'AQ' => 'Antarctica', - 'AG' => 'Antigua and Barbuda', - 'AR' => 'Argentina', - 'AM' => 'Armenia', - 'AW' => 'Aruba', - 'AU' => 'Australia', - 'AT' => 'Austria', - 'AZ' => 'Azerbaijan', - 'BS' => 'Bahamas', - 'BH' => 'Bahrain', - 'BD' => 'Bangladesh', - 'BB' => 'Barbados', - 'BY' => 'Belarus', - 'BE' => 'Belgium', - 'BZ' => 'Belize', - 'BJ' => 'Benin', - 'BM' => 'Bermuda', - 'BT' => 'Bhutan', - 'BO' => 'Bolivia, Plurinational State of', - 'BA' => 'Bosnia and Herzegovina', - 'BW' => 'Botswana', - 'BV' => 'Bouvet Island', - 'BR' => 'Brazil', - 'IO' => 'British Indian Ocean Territory', - 'BN' => 'Brunei Darussalam', - 'BG' => 'Bulgaria', - 'BF' => 'Burkina Faso', - 'BI' => 'Burundi', - 'KH' => 'Cambodia', - 'CM' => 'Cameroon', - 'CA' => 'Canada', - 'CV' => 'Cape Verde', - 'KY' => 'Cayman Islands', - 'CF' => 'Central African Republic', - 'TD' => 'Chad', - 'CL' => 'Chile', - 'CN' => 'China', - 'CX' => 'Christmas Island', - 'CC' => 'Cocos (Keeling) Islands', - 'CO' => 'Colombia', - 'KM' => 'Comoros', - 'CG' => 'Congo', - 'CD' => 'Congo, the Democratic Republic of the', - 'CK' => 'Cook Islands', - 'CR' => 'Costa Rica', - 'CI' => "Côte d'Ivoire", - 'HR' => 'Croatia', - 'CU' => 'Cuba', - 'CY' => 'Cyprus', - 'CZ' => 'Czech Republic', - 'DK' => 'Denmark', - 'DJ' => 'Djibouti', - 'DM' => 'Dominica', - 'DO' => 'Dominican Republic', - 'EC' => 'Ecuador', - 'EG' => 'Egypt', - 'SV' => 'El Salvador', - 'GQ' => 'Equatorial Guinea', - 'ER' => 'Eritrea', - 'EE' => 'Estonia', - 'ET' => 'Ethiopia', - 'FK' => 'Falkland Islands (Malvinas)', - 'FO' => 'Faroe Islands', - 'FJ' => 'Fiji', - 'FI' => 'Finland', - 'FR' => 'France', - 'GF' => 'French Guiana', - 'PF' => 'French Polynesia', - 'TF' => 'French Southern Territories', - 'GA' => 'Gabon', - 'GM' => 'Gambia', - 'GE' => 'Georgia', - 'DE' => 'Germany', - 'GH' => 'Ghana', - 'GI' => 'Gibraltar', - 'GR' => 'Greece', - 'GL' => 'Greenland', - 'GD' => 'Grenada', - 'GP' => 'Guadeloupe', - 'GU' => 'Guam', - 'GT' => 'Guatemala', - 'GG' => 'Guernsey', - 'GN' => 'Guinea', - 'GW' => 'Guinea-Bissau', - 'GY' => 'Guyana', - 'HT' => 'Haiti', - 'HM' => 'Heard Island and McDonald Islands', - 'VA' => 'Holy See (Vatican City State)', - 'HN' => 'Honduras', - 'HK' => 'Hong Kong', - 'HU' => 'Hungary', - 'IS' => 'Iceland', - 'IN' => 'India', - 'ID' => 'Indonesia', - 'IR' => 'Iran, Islamic Republic of', - 'IQ' => 'Iraq', - 'IE' => 'Ireland', - 'IM' => 'Isle of Man', - 'IL' => 'Israel', - 'IT' => 'Italy', - 'JM' => 'Jamaica', - 'JP' => 'Japan', - 'JE' => 'Jersey', - 'JO' => 'Jordan', - 'KZ' => 'Kazakhstan', - 'KE' => 'Kenya', - 'KI' => 'Kiribati', - 'KP' => "Korea, Democratic People's Republic of", - 'KR' => 'Korea, Republic of', - 'KW' => 'Kuwait', - 'KG' => 'Kyrgyzstan', - 'LA' => "Lao People's Democratic Republic", - 'LV' => 'Latvia', - 'LB' => 'Lebanon', - 'LS' => 'Lesotho', - 'LR' => 'Liberia', - 'LY' => 'Libyan Arab Jamahiriya', - 'LI' => 'Liechtenstein', - 'LT' => 'Lithuania', - 'LU' => 'Luxembourg', - 'MO' => 'Macao', - 'MK' => 'Macedonia, the former Yugoslav Republic of', - 'MG' => 'Madagascar', - 'MW' => 'Malawi', - 'MY' => 'Malaysia', - 'MV' => 'Maldives', - 'ML' => 'Mali', - 'MT' => 'Malta', - 'MH' => 'Marshall Islands', - 'MQ' => 'Martinique', - 'MR' => 'Mauritania', - 'MU' => 'Mauritius', - 'YT' => 'Mayotte', - 'MX' => 'Mexico', - 'FM' => 'Micronesia, Federated States of', - 'MD' => 'Moldova, Republic of', - 'MC' => 'Monaco', - 'MN' => 'Mongolia', - 'ME' => 'Montenegro', - 'MS' => 'Montserrat', - 'MA' => 'Morocco', - 'MZ' => 'Mozambique', - 'MM' => 'Myanmar', - 'NA' => 'Namibia', - 'NR' => 'Nauru', - 'NP' => 'Nepal', - 'NL' => 'Netherlands', - 'AN' => 'Netherlands Antilles', - 'NC' => 'New Caledonia', - 'NZ' => 'New Zealand', - 'NI' => 'Nicaragua', - 'NE' => 'Niger', - 'NG' => 'Nigeria', - 'NU' => 'Niue', - 'NF' => 'Norfolk Island', - 'MP' => 'Northern Mariana Islands', - 'NO' => 'Norway', - 'OM' => 'Oman', - 'PK' => 'Pakistan', - 'PW' => 'Palau', - 'PS' => 'Palestinian Territory, Occupied', - 'PA' => 'Panama', - 'PG' => 'Papua New Guinea', - 'PY' => 'Paraguay', - 'PE' => 'Peru', - 'PH' => 'Philippines', - 'PN' => 'Pitcairn', - 'PL' => 'Poland', - 'PT' => 'Portugal', - 'PR' => 'Puerto Rico', - 'QA' => 'Qatar', - 'RE' => 'Réunion', - 'RO' => 'Romania', - 'RU' => 'Russian Federation', - 'RW' => 'Rwanda', - 'BL' => 'Saint Barthélemy', - 'SH' => 'Saint Helena', - 'KN' => 'Saint Kitts and Nevis', - 'LC' => 'Saint Lucia', - 'MF' => 'Saint Martin (French part)', - 'PM' => 'Saint Pierre and Miquelon', - 'VC' => 'Saint Vincent and the Grenadines', - 'WS' => 'Samoa', - 'SM' => 'San Marino', - 'ST' => 'Sao Tome and Principe', - 'SA' => 'Saudi Arabia', - 'SN' => 'Senegal', - 'RS' => 'Serbia', - 'SC' => 'Seychelles', - 'SL' => 'Sierra Leone', - 'SG' => 'Singapore', - 'SK' => 'Slovakia', - 'SI' => 'Slovenia', - 'SB' => 'Solomon Islands', - 'SO' => 'Somalia', - 'ZA' => 'South Africa', - 'GS' => 'South Georgia and the South Sandwich Islands', - 'ES' => 'Spain', - 'LK' => 'Sri Lanka', - 'SD' => 'Sudan', - 'SR' => 'Suriname', - 'SJ' => 'Svalbard and Jan Mayen', - 'SZ' => 'Swaziland', - 'SE' => 'Sweden', - 'CH' => 'Switzerland', - 'SY' => 'Syrian Arab Republic', - 'TW' => 'Taiwan, Province of China', - 'TJ' => 'Tajikistan', - 'TZ' => 'Tanzania, United Republic of', - 'TH' => 'Thailand', - 'TL' => 'Timor-Leste', - 'TG' => 'Togo', - 'TK' => 'Tokelau', - 'TO' => 'Tonga', - 'TT' => 'Trinidad and Tobago', - 'TN' => 'Tunisia', - 'TR' => 'Turkey', - 'TM' => 'Turkmenistan', - 'TC' => 'Turks and Caicos Islands', - 'TV' => 'Tuvalu', - 'UG' => 'Uganda', - 'UA' => 'Ukraine', - 'AE' => 'United Arab Emirates', - 'GB' => 'United Kingdom', - 'US' => 'United States', - 'UM' => 'United States Minor Outlying Islands', - 'UY' => 'Uruguay', - 'UZ' => 'Uzbekistan', - 'VU' => 'Vanuatu', - 'VE' => 'Venezuela, Bolivarian Republic of',