Title formatting fixes on route view
Title formatting fixes on route view

--- 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
@@ -1,27 +1,27 @@
 <?php
-function include_header($pageTitle, $pageType, $opendiv = true, $geolocate = false)
+function include_header($pageTitle, $pageType, $opendiv = true, $geolocate = false, $datepicker = false)
 {
 	echo '
 <!DOCTYPE html> 
-<html> 
-	<head> 
+<html lang="en">
+	<head>
+        <meta charset="UTF-8">
 	<title>' . $pageTitle . '</title>';
-	echo '<link rel="stylesheet"  href="css/jquery.ui.datepicker.mobile.css" />';
+	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" />
          <script type="text/javascript" src="js/jquery-1.5.js"></script>
         <script type="text/javascript" src="js/jquery-mobile-1.0a3.js"></script>';
 	else echo '<link rel="stylesheet"  href="http://code.jquery.com/mobile/1.0a3/jquery.mobile-1.0a3.min.css" />
         <script type="text/javascript" src="http://code.jquery.com/jquery-1.5.1.min.js"></script>
         <script type="text/javascript" src="http://code.jquery.com/mobile/1.0a3/jquery.mobile-1.0a3.min.js"></script>';
-	echo '<script> 
+	if ($datepicker) echo '<script> 
 		//reset type=date inputs to text
 		$( document ).bind( "mobileinit", function(){
 			$.mobile.page.prototype.options.degradeInputs.date = true;
 		});	
 	</script> 
-	<script src="js/jQuery.ui.datepicker.js"></script> 
-	<script src="js/jquery.ui.datepicker.mobile.js"></script> 
-     <style type="text/css">
+	<script src="js/jQuery.ui.datepicker.js"></script>';
+	echo '<style type="text/css">
      .ui-navbar {
      width: 100%;
      }
@@ -45,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>
 
@@ -64,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>
@@ -94,6 +114,7 @@
 	<div data-role="header"> 
 		<h1>' . $pageTitle . '</h1>
 	</div><!-- /header -->
+        <a name="maincontent" id="maincontent"></a>
         <div data-role="content"> ';
 	}
 }
@@ -121,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;
+}
 ?>
 

file:a/index.php -> file:b/index.php
--- 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">Routes By Suburb</a></li>
 		<li><a class="nearby" href="routeList.php?nearby=yes">Nearby Routes</a></li>
             </ul>
 <?php

--- a/mywaybalance.php
+++ b/mywaybalance.php
@@ -1,6 +1,6 @@
 <?php
 include ('common.inc.php');
-include_header("MyWay Balance", "mywayBalance");
+include_header("MyWay Balance", "mywayBalance", true, false, true);
 $return = Array();
 function printBalance($cardNumber, $date, $pwrd)
 {
@@ -61,3 +61,4 @@
 }
 include_footer();
 ?>
+

file:a/owa/Callbacks.inc (deleted)
--- 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
- */
-
-?>

file:a/owa/action.php (deleted)
--- 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 &copy; 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();
-}
-
-?>

file:a/owa/api.php (deleted)
--- 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 &copy; 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();
-}
-
-?>

file:a/owa/cli.php (deleted)
--- 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 &copy; 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' =>