modified time zone support. It works the same way as timezones.cfg and extra
authortokul <tokul@7612ce4b-ef26-0410-bec9-ea0150e637f0>
Fri, 8 Jul 2005 15:27:44 +0000 (15:27 +0000)
committertokul <tokul@7612ce4b-ef26-0410-bec9-ea0150e637f0>
Fri, 8 Jul 2005 15:27:44 +0000 (15:27 +0000)
configuration option is still needed.

git-svn-id: https://svn.code.sf.net/p/squirrelmail/code/trunk/squirrelmail@9729 7612ce4b-ef26-0410-bec9-ea0150e637f0

include/options/personal.php
include/timezones.php [new file with mode: 0644]
include/timezones/check.php [new file with mode: 0644]
include/timezones/index.php [new file with mode: 0644]
include/timezones/standard.php [new file with mode: 0644]
include/timezones/standard_orig.php [new file with mode: 0644]
include/validate.php

index 2d3e10230a43c66df044e858601253f4fad52448..474aee50774318aabac4fa6d2a2c979806933726 100644 (file)
@@ -14,6 +14,7 @@
 
 /** SquirrelMail required files. */
 require_once(SM_PATH . 'functions/imap.php');
+require_once(SM_PATH . 'include/timezones.php');
 
 /* Define the group constants for the personal options page. */
 define('SMOPT_GRP_CONTACT', 0);
@@ -37,7 +38,7 @@ define('SMOPT_GRP_TZ', 3);
 function load_optpage_data_personal() {
     global $data_dir, $username, $edit_identity, $edit_name,
            $full_name, $reply_to, $email_address, $signature, $tzChangeAllowed,
-           $color;
+           $color, $timeZone;
 
     /* Set the values of some global variables. */
     $full_name = getPref($data_dir, $username, 'full_name');
@@ -133,22 +134,47 @@ function load_optpage_data_personal() {
 
     if ( $tzChangeAllowed ) {
         $TZ_ARRAY[SMPREF_NONE] = _("Same as server");
-        $tzfile = SM_PATH . 'locale/timezones.cfg';
-        if ((!is_readable($tzfile)) or (!$fd = fopen($tzfile,'r'))) {
+
+        $aTimeZones = sq_get_tz_array();
+        unset($message);
+        if (! empty($aTimeZones)) {
+            // check if current timezone is linked to other TZ and update it
+            if ($timeZone != SMPREF_NONE && $timeZone != "" &&
+                isset($aTimeZones[$timeZone]['LINK'])) {
+                $timeZone = $aTimeZones[$timeZone]['LINK'];
+                // TODO: recheck setting of $timeZone
+                // setPref($data_dir,$username,'timezone',$timeZone);
+            }
+
+            // sort time zones by name. sq_get_tz_array() returns sorted by key.
+            // asort($aTimeZones);
+
+            // add all 'TZ' entries to TZ_ARRAY
+            foreach ($aTimeZones as $TzKey => $TzData) {
+                if (! isset($TzData['LINK'])) {
+                    // Old display format
+                    $TZ_ARRAY[$TzKey] = $TzKey;
+
+                    // US Eastern standard time (America/New_York) - needs asort($aTimeZones)
+                    //$TZ_ARRAY[$TzKey] = (isset($TzData['NAME']) ? $TzData['NAME']." ($TzKey)" : "($TzKey)");
+
+                    // US Eastern standard time if NAME is present or America/New_York if NAME not present
+                    // needs sorting after all data is added or uasort()
+                    //$TZ_ARRAY[$TzKey] = (isset($TzData['NAME']) ? $TzData['NAME'] : $TzKey);
+
+                    // (America/New_Your) US Eastern standard time
+                    //$TZ_ARRAY[$TzKey] = "($TzKey)" . (isset($TzData['NAME']) ? ' '.$TzData['NAME'] : '');
+                }
+            }
+        } else {
             $message = _("Error opening timezone config, contact administrator.");
         }
+
+        // TODO: make error user friendly
         if (isset($message)) {
             plain_error_message($message, $color);
             exit;
         }
-        while (!feof ($fd)) {
-            $zone = fgets($fd, 1024);
-            if( $zone ) {
-                $zone = trim($zone);
-                $TZ_ARRAY[$zone] = $zone;
-            }
-        }
-        fclose ($fd);
 
         $optgrps[SMOPT_GRP_TZ] = _("Timezone Options");
         $optvals[SMOPT_GRP_TZ] = array();
diff --git a/include/timezones.php b/include/timezones.php
new file mode 100644 (file)
index 0000000..2dda0e9
--- /dev/null
@@ -0,0 +1,86 @@
+<?php
+/**
+ * SquirrelMail Time zone functions
+ *
+ * Function load time zone array selected in SquirrelMail 
+ * configuration.
+ * 
+ * Time zone array must consist of key name that matches key in
+ * standard time zone array and 'NAME' and 'TZ' subkeys. 'NAME'
+ * key should store translatable key name. 'TZ' key should store
+ * time zone name that will be used in TZ environment variable.
+ * Both subkeys are optional. If they are not present, time zone
+ * key name is used.
+ *
+ * @package squirrelmail
+ * @subpackage timezone
+ */
+
+/**
+ * Returns time zone array set in SquirrelMail configuration
+ * @return array time zone array
+ * @since 1.5.1
+ */
+function sq_get_tz_array() {
+    global $time_zone_type;
+
+    // variable is not set or empty
+    if (! isset($time_zone_type) || empty($time_zone_type)) {
+        $time_zone_type = 0;
+    } else {
+        // make sure that it is integer
+        $time_zone_type = (int) $time_zone_type;
+    }
+
+    /**
+     * TODO: which one is better (global + include_once) or (include) 
+     */
+    switch ($time_zone_type) {
+    case '3':
+    case '2':
+        // custom time zone set
+        $aTimeZones = array();
+        if (file_exists(SM_PATH . 'config/timezones.php')) {
+            include(SM_PATH . 'config/timezones.php');
+        }
+        $aRet = $aTimeZones;
+        break;
+    case '1':
+    case '0':
+    default:
+        // standard (default) time zone set
+        include(SM_PATH . 'include/timezones/standard.php');
+        $aRet = $aTimeZones;
+    }
+    // sort array
+    ksort($aRet);
+    return $aRet;
+}
+
+/**
+ * @param string time zone string
+ * @return string time zone name used for TZ env 
+ * (false, if timezone does not exists and server's TZ should be used)
+ * @since 1.5.1
+ */
+function sq_get_tz_key($sTZ) {
+    $aTZs=sq_get_tz_array();
+
+    // get real time zone from link
+    if (isset($aTZs[$sTZ]['LINK'])) {
+        $sTZ = $aTZs[$sTZ]['LINK'];
+    }
+
+    if (isset($aTZs[$sTZ])) {
+        if (isset($aTZs[$sTZ]['TZ'])) {
+            // get time zone
+            return $aTZs[$sTZ]['TZ'];
+        } else {
+            // array does not have TZ entry. bad thing
+            return $sTZ;
+        }
+    } else {
+        return false;
+    }
+}
+?>
\ No newline at end of file
diff --git a/include/timezones/check.php b/include/timezones/check.php
new file mode 100644 (file)
index 0000000..78002f6
--- /dev/null
@@ -0,0 +1,215 @@
+<?php
+/**
+ * SquirrelMail time zone library - time zone validation script.
+ *
+ * Copyright (c) 2005 The SquirrelMail Project Team
+ * This file is part of SquirrelMail webmail interface.
+ *
+ * SquirrelMail is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * SquirrelMail is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with SquirrelMail; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * @version $Id$
+ * @package squirrelmail
+ * @subpackage timezones
+ */
+
+/** @ignore */
+define('SM_PATH','../../');
+
+/** Send http header */
+header('Content-Type: text/plain');
+
+/** Information about script */
+echo "--------------------------------------------\n"
+    ." SquirrelMail time zone library test script\n"
+    ."--------------------------------------------\n";
+
+/** load SM config */
+unset($time_zone_type);
+if (file_exists(SM_PATH.'config/config.php')) {
+    include(SM_PATH.'config/config.php');
+} else {
+    echo "SquirrelMail configuration file is missing.\n";
+    exit();
+}
+
+/**
+ * Script does not test, if standard time zone libraries are missing.
+ * If they are missing or corrupted - php can fail, scream and show 
+ * finger or other parts of interpreter.
+ */
+
+/** load original reference */
+include(SM_PATH.'include/timezones/standard_orig.php');
+
+/** move timezones to different array */
+$aTimeZonesOrig = $aTimeZones;
+unset($aTimeZones);
+
+if (! isset($time_zone_type) || $time_zone_type == 0 || $time_zone_type == 1) {
+    /** load new time zone library */
+    include(SM_PATH.'include/timezones/standard.php');
+} elseif ($time_zone_type == 2 || $time_zone_type == 3) {
+    /** load custom time zone library */
+    $aTimeZones=array();
+    if (file_exists(SM_PATH . 'config/timezones.php')) {
+        include(SM_PATH.'config/timezones.php');
+    } else {
+        echo "ERROR: config/timezones.php is missing.\n";
+        exit();
+    }
+} else {
+    echo "ERROR: invalid value in time_zone_type configuration.\n";
+    exit();
+}
+
+if (! isset($aTimeZones) || ! is_array($aTimeZones) || empty($aTimeZones)) {
+    echo "ERROR: timezones array is missing or empty.\n";
+    exit();
+}
+
+$error = false;
+
+/** test backward compatibility */
+echo "Testing backward compatibility:\n"
+    ."  Failed time zones:\n";
+foreach ($aTimeZonesOrig as $TzKey => $TzData) {
+    if (! isset($aTimeZones[$TzKey])) {
+        echo '    '.$TzKey."\n";
+        $error = true;
+    }
+}
+if (! $error) {
+    echo "    none. Looking good.\n";
+} else {
+    // error is not fatal, but test should fail only with limited custom time zone sets
+}
+
+echo "\n";
+
+/** test forward compatibility */
+$error = false;
+echo "Testing forward compatibility:\n"
+    ."  New time zones:\n";
+foreach ($aTimeZones as $TzKey => $TzData) {
+    if (! isset($aTimeZonesOrig[$TzKey])) {
+        echo '    '.$TzKey."\n";
+        $error = true;
+    }
+}
+if (! $error) {
+    echo "    no new time zones.\n";
+} else {
+    // error is not fatal. test should show new time zones, that are not 
+    // present in timezones.cfg
+}
+
+echo "\n";
+
+/** test links */
+$error = false;
+echo "Testing time zone links:\n"
+    ."  Failed time zone links:\n";
+foreach ($aTimeZones as $TzKey => $TzData) {
+    if (isset($TzData['LINK']) && ! isset($aTimeZones[$TzData['LINK']]['TZ'])) {
+        echo '    '.$TzKey.' = '.$TzData['LINK']."\n";
+        $error = true;
+    }
+}
+if (! $error) {
+    echo "    none. Looking good.\n";
+} else {
+    // error is fatal. 'LINK' should always reffer to existing 'TZ' entries
+}
+
+echo "\n";
+
+/** Test TZ subkeys */
+$error = false;
+echo "Testing time zone TZ subkeys:\n"
+    ."  Failed time zone TZ subkeys:\n";
+foreach ($aTimeZones as $TzKey => $TzData) {
+    if (! isset($TzData['LINK']) && ! isset($TzData['TZ'])) {
+        echo '    '.$TzKey."\n";
+        $error = true;
+    }
+}
+if (! $error) {
+    echo "    none. Looking good.\n";
+} else {
+    // LINK or TZ are required for strict time zones. Interface won't break, but
+    // any error means inconsistency in time zone array.
+}
+
+echo "\n";
+
+/** Test NAME subkeys */
+$error = false;
+echo "Testing time zone NAME subkeys:\n"
+    ."  Time zones without NAME subkeys:\n";
+foreach ($aTimeZones as $TzKey => $TzData) {
+    if (isset($TzData['TZ']) && ! isset($TzData['NAME'])) {
+        echo '    '.$TzKey."\n";
+        $error = true;
+    }
+}
+if (! $error) {
+    echo "    none.\n";
+} else {
+    // error is not fatal. It would be nice if all geographic locations
+    // use some human readable name
+}
+
+echo "\n";
+
+/** Test TZ subkeys with UCT/UTC/GMT offsets */
+$error = false;
+echo "Testing TZ subkeys with UCT/UTC/GMT offsets:\n"
+    ."  Time zones UCT/UTC/GMT offsets:\n";
+foreach ($aTimeZones as $TzKey => $TzData) {
+    if (isset($TzData['TZ']) && preg_match("/^(UCT)|(UTC)|(GMT).+/i",$TzData['TZ'])) {
+        echo '    '.$TzKey.' = '.$TzData['TZ']."\n";
+        $error = true;
+    }
+}
+if (! $error) {
+    echo "    none.\n";
+} else {
+    // I think error is fatal for UCT with offsets. date('T',time()) is corrupted.
+}
+
+echo "\n";
+
+/** Test TZ subkeys with custom TZ values and no offsets */
+$error = false;
+echo "Testing TZ subkeys with custom TZ values and no offsets:\n"
+    ."  Time zones with custom TZ values and no offsets:\n";
+foreach ($aTimeZones as $TzKey => $TzData) {
+    if (isset($TzData['TZ']) && 
+        ! preg_match("/^((UCT)|(UTC)|(GMT).+)|(GMT)$/i",$TzData['TZ']) &&
+        preg_match("/^[a-z]+$/i",$TzData['TZ'])) {
+        echo '    '.$TzKey.' = '.$TzData['TZ']."\n";
+        $error = true;
+    }
+}
+if (! $error) {
+    echo "    none.\n";
+} else {
+    // I think error is fatal. Time zone formating requires time zone name and offset from GMT.
+}
+
+echo "\n";
+
+echo "Done!\n";
+?>
\ No newline at end of file
diff --git a/include/timezones/index.php b/include/timezones/index.php
new file mode 100644 (file)
index 0000000..605b925
--- /dev/null
@@ -0,0 +1,16 @@
+<?php
+/**
+ * index.php
+ *
+ * Copyright (c) 1999-2005 The SquirrelMail Project Team
+ * Licensed under the GNU GPL. For full terms see the file COPYING.
+ *
+ * This file simply takes any attempt to view source files and sends those
+ * people to the login screen. At this point no attempt is made to see if
+ * the person is logged or not.
+ *
+ * @version $Id$
+ * @package squirrelmail
+ */
+header("Location:../../index.php");
+?>
\ No newline at end of file
diff --git a/include/timezones/standard.php b/include/timezones/standard.php
new file mode 100644 (file)
index 0000000..d7993ff
--- /dev/null
@@ -0,0 +1,1272 @@
+<?php
+/**
+ * SquirrelMail time zone library
+ *
+ * Used ftp://elsie.nci.nih.gov/pub/tzdata2005j.tar.gz as reference
+ *
+ * Time zone array must consist of key name that matches time zone name in
+ * GNU C library and 'LINK', 'NAME' and 'TZ' subkeys. 'LINK' subkey is used
+ * to define time zone aliases ('Link some/name other/name' in GNU C). It 
+ * should link to other time zone array entry with 'NAME' and 'TZ' subkeys.
+ * Linking to 'LINK' entries will cause errors in time zone library checks. 
+ * 'NAME' key should store translatable time zone name. 'TZ' key should store
+ * time zone name that will be used in TZ environment variable. Array entries 
+ * can use 'LINK' or 'TZ' subkeys. 'LINK' and 'TZ' subkeys should not be used
+ * in same array key. 'NAME' subkeys are optional and used only in display 
+ * of 'TZ' key entries.
+ *
+ * Copyright (c) 2005 The SquirrelMail Project Team
+ * This file is part of SquirrelMail webmail interface.
+ *
+ * SquirrelMail is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * SquirrelMail is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with SquirrelMail; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * @link ftp://elsie.nci.nih.gov/pub/ GNU C time zone implementation
+ * @link some source of POSIX TZ names
+ * @package squirrelmail
+ * @subpackage timezones
+ */
+
+/**
+ * Standard timezone array.
+ *
+ * TZ subkeys must be updated if some government decides to change timezone.
+ *
+ * Generic abbreviations:
+ * <ul>
+ *  <li>GMT - Greenwich Mean Time
+ *  <li>UTC - Coordinated Universal Time
+ *  <li>UCT - Universal Coordinate Time
+ * </ul>
+ * 
+ * Array is not globalized in order to save memory. Used array is extracted 
+ * with sq_get_tz_array(). Array is loaded only when strict time zone is set
+ * or personal information option page is loaded. 'timezones' gettext domain
+ * must be set before loading this array.
+ * @global array $aTimeZones
+ */
+$aTimeZones=array();
+
+/** Africa **/
+$aTimeZones['Africa/Algiers']['NAME']='Algeria';
+$aTimeZones['Africa/Algiers']['TZ']='CET';
+$aTimeZones['Africa/Luanda']['NAME']='Angola';
+$aTimeZones['Africa/Luanda']['TZ']='UCT-1';
+$aTimeZones['Africa/Porto-Novo']['NAME']='Benin';
+$aTimeZones['Africa/Porto-Novo']['TZ']='UCT-1';
+$aTimeZones['Africa/Gaborone']['NAME']='Botswana';
+$aTimeZones['Africa/Gaborone']['TZ']='UCT-2';
+$aTimeZones['Africa/Ouagadougou']['NAME']='Burkina Faso';
+$aTimeZones['Africa/Ouagadougou']['TZ']='GMT';
+$aTimeZones['Africa/Bujumbura']['NAME']='Burundi';
+$aTimeZones['Africa/Bujumbura']['TZ']='UCT-2';
+$aTimeZones['Africa/Douala']['NAME']='Cameroon';
+$aTimeZones['Africa/Douala']['TZ']='UCT-1';
+$aTimeZones['Atlantic/Cape_Verde']['NAME']='Cape Verde';
+$aTimeZones['Atlantic/Cape_Verde']['TZ']='UCT1';
+$aTimeZones['Africa/Bangui']['NAME']='Central African Republic';
+$aTimeZones['Africa/Bangui']['TZ']='UCT-1';
+$aTimeZones['Africa/Ndjamena']['NAME']='Chad';
+$aTimeZones['Africa/Ndjamena']['TZ']='UCT-1';
+$aTimeZones['Indian/Comoro']['NAME']='Comoros';
+$aTimeZones['Indian/Comoro']['TZ']='UCT-3';
+$aTimeZones['Africa/Kinshasa']['NAME']='Democratic Republic of Congo, Kinshasa';
+$aTimeZones['Africa/Kinshasa']['TZ']='UCT-1';
+$aTimeZones['Africa/Lubumbashi']['NAME']='Democratic Republic of Congo';
+$aTimeZones['Africa/Lubumbashi']['TZ']='UCT-2';
+$aTimeZones['Africa/Brazzaville']['NAME']='Republic of the Congo';
+$aTimeZones['Africa/Brazzaville']['TZ']='UCT-1';
+$aTimeZones['Africa/Abidjan']['NAME']='Cote D\'Ivoire';
+$aTimeZones['Africa/Abidjan']['TZ']='GMT';
+$aTimeZones['Africa/Djibouti']['NAME']='Djibouti';
+$aTimeZones['Africa/Djibouti']['TZ']='UCT-3';
+
+// Daylight savings between Apr lastFri 0:00 and Sep lastThu 23:00 (+1)
+$aTimeZones['Africa/Cairo']['NAME']='Egypt';
+$aTimeZones['Africa/Cairo']['TZ']='EST-2EDT';
+
+$aTimeZones['Africa/Malabo']['NAME']='Equatorial Guinea';
+$aTimeZones['Africa/Malabo']['TZ']='UCT-1';
+$aTimeZones['Africa/Asmera']['NAME']='Eritrea';
+$aTimeZones['Africa/Asmera']['TZ']='UCT-3';
+$aTimeZones['Africa/Addis_Ababa']['NAME']='Ethiopia';
+$aTimeZones['Africa/Addis_Ababa']['TZ']='UCT-3';
+$aTimeZones['Africa/Libreville']['NAME']='Gabon';
+$aTimeZones['Africa/Libreville']['TZ']='UCT-1';
+$aTimeZones['Africa/Banjul']['NAME']='Gambia';
+$aTimeZones['Africa/Banjul']['TZ']='GMT';
+$aTimeZones['Africa/Accra']['NAME']='Ghana';
+$aTimeZones['Africa/Accra']['TZ']='UCT';
+$aTimeZones['Africa/Conakry']['NAME']='Guinea';
+$aTimeZones['Africa/Conakry']['TZ']='GMT';
+$aTimeZones['Africa/Bissau']['NAME']='Guinea-Bissau';
+$aTimeZones['Africa/Bissau']['TZ']='GMT';
+$aTimeZones['Africa/Nairobi']['NAME']='Kenya';
+$aTimeZones['Africa/Nairobi']['TZ']='UCT-3';
+$aTimeZones['Africa/Maseru']['NAME']='Lesotho';
+$aTimeZones['Africa/Maseru']['TZ']='UCT-2';
+$aTimeZones['Africa/Monrovia']['NAME']='Liberia';
+$aTimeZones['Africa/Monrovia']['TZ']='GMT';
+$aTimeZones['Africa/Tripoli']['NAME']='Libya';
+$aTimeZones['Africa/Tripoli']['TZ']='UCT-2';
+$aTimeZones['Indian/Antananarivo']['NAME']='Madagascar';
+$aTimeZones['Indian/Antananarivo']['TZ']='UCT-3';
+$aTimeZones['Africa/Blantyre']['NAME']='Malawi';
+$aTimeZones['Africa/Blantyre']['TZ']='UCT-2';
+$aTimeZones['Africa/Bamako']['NAME']='Mali';
+$aTimeZones['Africa/Bamako']['TZ']='GMT';
+$aTimeZones['Africa/Timbuktu']['NAME']='Mali, Timbuktu';
+$aTimeZones['Africa/Timbuktu']['TZ']='GMT';
+$aTimeZones['Africa/Nouakchott']['NAME']='Mauritania';
+$aTimeZones['Africa/Nouakchott']['TZ']='GMT';
+$aTimeZones['Indian/Mauritius']['NAME']='Mauritius';
+$aTimeZones['Indian/Mauritius']['TZ']='UCT-4';
+$aTimeZones['Indian/Mayotte']['NAME']='Mayotte';
+$aTimeZones['Indian/Mayotte']['TZ']='UCT-3';
+$aTimeZones['Africa/Casablanca']['NAME']='Morocco';
+$aTimeZones['Africa/Casablanca']['TZ']='UCT';
+$aTimeZones['Africa/El_Aaiun']['NAME']='Western Sahara';
+$aTimeZones['Africa/El_Aaiun']['TZ']='UCT';
+$aTimeZones['Africa/Maputo']['NAME']='Mozambique';
+$aTimeZones['Africa/Maputo']['TZ']='UCT-2';
+
+// Daylight savings from Sep Sun>=1 2:00 to Apr Sun>=1 2:00 (+1)
+$aTimeZones['Africa/Windhoek']['NAME']='Namibia';
+$aTimeZones['Africa/Windhoek']['TZ']='UCT-2';
+
+$aTimeZones['Africa/Niamey']['NAME']='Niger';
+$aTimeZones['Africa/Niamey']['TZ']='UCT-1';
+$aTimeZones['Africa/Lagos']['NAME']='Nigeria';
+$aTimeZones['Africa/Lagos']['TZ']='UCT-1';
+
+// Island in Indian ocean
+$aTimeZones['Indian/Reunion']['NAME']='Reunion';
+$aTimeZones['Indian/Reunion']['TZ']='UCT-4';
+
+$aTimeZones['Africa/Kigali']['NAME']='Rwanda';
+$aTimeZones['Africa/Kigali']['TZ']='UCT-2';
+$aTimeZones['Atlantic/St_Helena']['NAME']='St.Helena';
+$aTimeZones['Atlantic/St_Helena']['TZ']='GMT';
+$aTimeZones['Africa/Sao_Tome']['NAME']='Sao Tome and Principe';
+$aTimeZones['Africa/Sao_Tome']['TZ']='GMT';
+$aTimeZones['Africa/Dakar']['NAME']='Senegal';
+$aTimeZones['Africa/Dakar']['TZ']='GMT';
+$aTimeZones['Indian/Mahe']['NAME']='Seychelles';
+$aTimeZones['Indian/Mahe']['TZ']='UCT-4';
+$aTimeZones['Africa/Freetown']['NAME']='Sierra Leone';
+$aTimeZones['Africa/Freetown']['TZ']='UCT';
+$aTimeZones['Africa/Mogadishu']['NAME']='Somalia';
+$aTimeZones['Africa/Mogadishu']['TZ']='UCT-3';
+$aTimeZones['Africa/Johannesburg']['NAME']='South Africa';
+$aTimeZones['Africa/Johannesburg']['TZ']='SAST-2';
+$aTimeZones['Africa/Khartoum']['NAME']='Sudan';
+$aTimeZones['Africa/Khartoum']['TZ']='UCT-3';
+$aTimeZones['Africa/Mbabane']['NAME']='Swaziland';
+$aTimeZones['Africa/Mbabane']['TZ']='UCT-2';
+$aTimeZones['Africa/Dar_es_Salaam']['NAME']='Tanzania';
+$aTimeZones['Africa/Dar_es_Salaam']['TZ']='UCT-3';
+$aTimeZones['Africa/Lome']['NAME']='Togo';
+$aTimeZones['Africa/Lome']['TZ']='GMT';
+$aTimeZones['Africa/Tunis']['NAME']='Tunisia';
+$aTimeZones['Africa/Tunis']['TZ']='UCT-1';
+$aTimeZones['Africa/Kampala']['NAME']='Uganda';
+$aTimeZones['Africa/Kampala']['TZ']='UCT-3';
+$aTimeZones['Africa/Lusaka']['NAME']='Zambia';
+$aTimeZones['Africa/Lusaka']['TZ']='UCT-2';
+$aTimeZones['Africa/Harare']['NAME']='Zimbabwe';
+$aTimeZones['Africa/Harare']['TZ']='UCT-2';
+
+/** do we have squirrels in Antarctica */
+$aTimeZones['Antarctica/Casey']['NAME']='Antarctica, Casey';
+$aTimeZones['Antarctica/Casey']['TZ']='WST'; // (GMT+8) Western (Aus) Standard Time
+$aTimeZones['Antarctica/Davis']['NAME']='Antarctica, Davis';
+$aTimeZones['Antarctica/Davis']['TZ']='DAVT'; // (GMT+7) Davis Time
+$aTimeZones['Antarctica/Mawson']['NAME']='Antarctica, Mawson';
+$aTimeZones['Antarctica/Mawson']['TZ']='MAWT'; // (GMT+6) Mawson Time
+$aTimeZones['Indian/Kerguelen']['NAME']='Antarctica, Kerquelen Island';
+$aTimeZones['Indian/Kerguelen']['TZ']='TFT'; // (GMT+5) ISO code TF Time
+$aTimeZones['Antarctica/DumontDUrville']['NAME']="Antarctica, Dumont-d'Urville";
+$aTimeZones['Antarctica/DumontDUrville']['TZ']='DDUT'; // (GMT+10) Dumont-d'Urville Time
+$aTimeZones['Antarctica/Syowa']['NAME']='Antarctica, Syowa';
+$aTimeZones['Antarctica/Syowa']['TZ']='SYOT'; // (GMT+0300) Syowa Time
+$aTimeZones['Antarctica/Vostok']['NAME']='Antarctica, Vostok';
+$aTimeZones['Antarctica/Vostok']['TZ']='UTC+6'; // (GMT+6) VOST Vostok time
+$aTimeZones['Antarctica/Rothera']['NAME']='Antarctica, Rothera';
+$aTimeZones['Antarctica/Rothera']['TZ']='ROTT'; // (GMT-3) Rothera time
+// ChileAQ daylight saving rules
+// 1999    max     -       Oct     Sun>=9  0:00    1:00    S
+// 2000    max     -       Mar     Sun>=9  0:00    0       -
+$aTimeZones['Antarctica/Palmer']['NAME']='Antarctica, Palmer';
+$aTimeZones['Antarctica/Palmer']['TZ']='CLT'; // (GMT-4)
+// NZAQ daylight saving rules
+// 1990    max     -       Oct     Sun>=1  2:00s   1:00    D
+// 1990    max     -       Mar     Sun>=15 2:00s   0       S
+$aTimeZones['Antarctica/McMurdo']['NAME']='Antarctica, McMurdo';
+$aTimeZones['Antarctica/McMurdo']['TZ']='NZT'; // (GMT+12)
+// same as McMurdo
+$aTimeZones['Antarctica/South_Pole']['NAME']='Antarctica, South Pole';
+$aTimeZones['Antarctica/South_Pole']['TZ']='NZT';
+
+/** Asia **/
+$aTimeZones['Asia/Kabul']['NAME']='Afghanistan';
+$aTimeZones['Asia/Kabul']['TZ']='UCT-4:30';
+// RussiaAsia daylight saving rules
+$aTimeZones['Asia/Yerevan']['NAME']='Armenia';
+$aTimeZones['Asia/Yerevan']['TZ']='UCT-4';
+// Azer daylight saving rules
+// 1997    max     -       Mar     lastSun  1:00   1:00    S
+// 1997    max     -       Oct     lastSun  1:00   0       -
+$aTimeZones['Asia/Baku']['NAME']='Azerbaijan';
+$aTimeZones['Asia/Baku']['TZ']='UCT-3';
+
+$aTimeZones['Asia/Bahrain']['NAME']='Bahrain';
+$aTimeZones['Asia/Bahrain']['TZ']='UCT-3';
+
+$aTimeZones['Asia/Dhaka']['NAME']='Bangladesh';
+$aTimeZones['Asia/Dhaka']['TZ']='UCT-6';
+
+$aTimeZones['Asia/Thimphu']['NAME']='Bhutan';
+$aTimeZones['Asia/Thimphu']['TZ']='UCT-6';
+
+$aTimeZones['Indian/Chagos']['NAME']='British Indian Ocean Territory';
+$aTimeZones['Indian/Chagos']['TZ']='UCT-6';
+
+$aTimeZones['Asia/Brunei']['NAME']='Brunei';
+$aTimeZones['Asia/Brunei']['TZ']='UCT-8';
+
+// Burma
+$aTimeZones['Asia/Rangoon']['NAME']='Myanmar';
+$aTimeZones['Asia/Rangoon']['TZ']='UCT-6:30';
+
+$aTimeZones['Asia/Phnom_Penh']['NAME']='Cambodia';
+$aTimeZones['Asia/Phnom_Penh']['TZ']='UCT-7';
+
+// China (PRC) - one timezone to rule them all
+//  Changbai Time (Long-white Time)
+$aTimeZones['Asia/Harbin']['NAME']='China, Changbai Time';
+$aTimeZones['Asia/Harbin']['TZ']='UCT-8';
+//  Zhongyuan Time (Central plain Time)
+$aTimeZones['Asia/Shanghai']['NAME']='China, Zhongyuan Time';
+$aTimeZones['Asia/Shanghai']['TZ']='UCT-8';
+//  Long-shu Time
+$aTimeZones['Asia/Chongqing']['NAME']='China, Long-shu Time';
+$aTimeZones['Asia/Chongqing']['TZ']='UCT-8';
+//  Xin-zang Time (Xinjiang-Tibet Time)
+$aTimeZones['Asia/Urumqi']['NAME']='China, Xin-zang Time';
+$aTimeZones['Asia/Urumqi']['TZ']='UCT-8';
+//  Kunlun Time
+$aTimeZones['Asia/Kashgar']['NAME']='China, Kunlun Time';
+$aTimeZones['Asia/Kashgar']['TZ']='UCT-8';
+
+$aTimeZones['Asia/Hong_Kong']['NAME']='Hong Kong';
+$aTimeZones['Asia/Hong_Kong']['TZ']='UCT-8';
+
+$aTimeZones['Asia/Taipei']['NAME']='Taiwan';
+$aTimeZones['Asia/Taipei']['TZ']='UCT-8';
+
+$aTimeZones['Asia/Macau']['NAME']='Macau';
+$aTimeZones['Asia/Macau']['TZ']='UCT-8';
+// EUAsia daylight saving rules
+$aTimeZones['Asia/Nicosia']['NAME']='Cyprus';
+$aTimeZones['Asia/Nicosia']['TZ']='EET-2EETDST';
+$aTimeZones['Europe/Nicosia']['LINK']='Asia/Nicosia'; 
+
+// RussiaAsia daylight saving rules
+$aTimeZones['Asia/Tbilisi']['NAME']='Georgia';
+$aTimeZones['Asia/Tbilisi']['TZ']='UCT-3';
+
+$aTimeZones['Asia/Dili']['NAME']='East Timor';
+$aTimeZones['Asia/Dili']['TZ']='UCT-9';
+
+$aTimeZones['Asia/Calcutta']['NAME']='India';
+$aTimeZones['Asia/Calcutta']['TZ']='UCT-5:30';
+
+$aTimeZones['Asia/Jakarta']['NAME']='Indonesia';
+$aTimeZones['Asia/Jakarta']['TZ']='UCT-7';
+$aTimeZones['Asia/Pontianak']['NAME']='Indonesia, Kalimantan';
+$aTimeZones['Asia/Pontianak']['TZ']='UCT-7';
+$aTimeZones['Asia/Makassar']['NAME']='Indonesia, Sulavesi';
+$aTimeZones['Asia/Makassar']['TZ']='UCT-8';
+$aTimeZones['Asia/Jayapura']['NAME']='Indonesia, New Guinea';
+$aTimeZones['Asia/Jayapura']['TZ']='UCT-9';
+
+// Persian daylight savings.
+$aTimeZones['Asia/Tehran']['NAME']='Iran';
+$aTimeZones['Asia/Tehran']['TZ']='UCT-3:30';
+
+// Iraq daylight saving rules
+// 1991    max     -       Apr      1      3:00s   1:00    D
+// 1991    max     -       Oct      1      3:00s   0       S
+$aTimeZones['Asia/Baghdad']['NAME']='Iraq';
+$aTimeZones['Asia/Baghdad']['TZ']='IST-3IDT';
+
+// Zion daylight saving rules.
+// one of the examples, why politics and religion should be banned 
+// from playing with daylight savings
+$aTimeZones['Asia/Jerusalem']['NAME']='Israel';
+$aTimeZones['Asia/Jerusalem']['TZ']='IST-2IDT';
+
+$aTimeZones['Asia/Tokyo']['NAME']='Japan';
+$aTimeZones['Asia/Tokyo']['TZ']='UCT-9'; // JST
+
+// Jordan daylight saving rules
+// 1999    max     -       Sep     lastThu 0:00s   0       -
+// 2000    max     -       Mar     lastThu 0:00s   1:00    S
+$aTimeZones['Asia/Amman']['NAME']='Jordan';
+$aTimeZones['Asia/Amman']['TZ']='JST-2JDT';
+
+// Kazakhstan
+$aTimeZones['Asia/Almaty']['TZ']='UCT-6';
+$aTimeZones['Asia/Qyzylorda']['TZ']='UCT-6';
+$aTimeZones['Asia/Aqtobe']['TZ']='UCT-5';
+$aTimeZones['Asia/Aqtau']['TZ']='UCT-4';
+$aTimeZones['Asia/Oral']['TZ']='UCT-4';
+
+// Kirgiz daylight saving rules
+// 1997    max     -       Mar     lastSun 2:30    1:00    S
+// 1997    max     -       Oct     lastSun 2:30    0       -
+$aTimeZones['Asia/Bishkek']['NAME']='Kyrgyzstan';
+$aTimeZones['Asia/Bishkek']['TZ']='UCT-5';
+
+$aTimeZones['Asia/Seoul']['NAME']='Republic of Korea';
+$aTimeZones['Asia/Seoul']['TZ']='UCT-9';
+$aTimeZones['Asia/Pyongyang']['NAME']='Democratic People\'s Republic of Korea';
+$aTimeZones['Asia/Pyongyang']['TZ']='UCT-9';
+
+$aTimeZones['Asia/Kuwait']['NAME']='Kuwait';
+$aTimeZones['Asia/Kuwait']['TZ']='UCT-3';
+
+$aTimeZones['Asia/Vientiane']['NAME']='Laos';
+$aTimeZones['Asia/Vientiane']['TZ']='UCT-7';
+
+// Lebanon daylight saving rules
+// 1993    max     -       Mar     lastSun 0:00    1:00    S
+// 1999    max     -       Oct     lastSun 0:00    0       -
+$aTimeZones['Asia/Beirut']['NAME']='Lebanon';
+$aTimeZones['Asia/Beirut']['TZ']='EUT-2EUTDST';
+
+$aTimeZones['Asia/Kuala_Lumpur']['NAME']='Malaysia';
+$aTimeZones['Asia/Kuala_Lumpur']['TZ']='MST-8'; // GMT+8
+
+$aTimeZones['Asia/Kuching']['NAME']='Sabah & Sarawak';
+$aTimeZones['Asia/Kuching']['TZ']='MST-8'; // GMT+8
+
+$aTimeZones['Indian/Maldives']['NAME']='Maldives';
+$aTimeZones['Indian/Maldives']['TZ']='UCT-5';
+
+// Mongol daylight saving rules
+// 2001    max     -       Sep     lastSat 2:00    0       -
+// 2002    max     -       Mar     lastSat 2:00    1:00    S
+$aTimeZones['Asia/Hovd']['TZ']='EUT-7EUTDST';
+$aTimeZones['Asia/Ulaanbaatar']['TZ']='EUT-8EUTDST';
+$aTimeZones['Asia/Choibalsan']['TZ']='EUT-9EUTDST';
+
+$aTimeZones['Asia/Katmandu']['NAME']='Nepal';
+$aTimeZones['Asia/Katmandu']['TZ']='UCT-5:45';
+
+$aTimeZones['Asia/Muscat']['NAME']='Oman';
+$aTimeZones['Asia/Muscat']['TZ']='UCT-4';
+
+$aTimeZones['Asia/Karachi']['NAME']='Pakistan';
+$aTimeZones['Asia/Karachi']['TZ']='UCT-5';
+
+// Palestine
+// 1999    max     -       Apr     Fri>=15 0:00    1:00    S
+// 1999    max     -       Oct     Fri>=15 0:00    0       -
+$aTimeZones['Asia/Gaza']['NAME']='Palestine';
+$aTimeZones['Asia/Gaza']['TZ']='UCT-2';
+
+$aTimeZones['Asia/Manila']['NAME']='Philippines';
+$aTimeZones['Asia/Manila']['TZ']='UCT-8';
+
+$aTimeZones['Asia/Qatar']['NAME']='Qatar';
+$aTimeZones['Asia/Qatar']['TZ']='UCT-3';
+
+$aTimeZones['Asia/Riyadh']['NAME']='Saudi Arabia';
+$aTimeZones['Asia/Riyadh']['TZ']='UCT-3';
+
+$aTimeZones['Asia/Singapore']['NAME']='Singapore';
+$aTimeZones['Asia/Singapore']['TZ']='UCT-8';
+
+$aTimeZones['Asia/Colombo']['NAME']='Sri Lanka';
+$aTimeZones['Asia/Colombo']['TZ']='UCT-6';
+
+// Syria daylight saving rules
+// 1994    max     -       Oct      1      0:00    0       -
+// 1999    max     -       Apr      1      0:00    1:00    S
+$aTimeZones['Asia/Damascus']['NAME']='Syria';
+$aTimeZones['Asia/Damascus']['TZ']='UCT-2';
+
+$aTimeZones['Asia/Dushanbe']['NAME']='Tajikistan';
+$aTimeZones['Asia/Dushanbe']['TZ']='UCT-5';
+
+$aTimeZones['Asia/Bangkok']['NAME']='Thailand';
+$aTimeZones['Asia/Bangkok']['TZ']='UCT-7';
+
+$aTimeZones['Asia/Ashgabat']['NAME']='Turkmenistan';
+$aTimeZones['Asia/Ashgabat']['TZ']='UCT-5';
+
+$aTimeZones['Asia/Dubai']['NAME']='United Arab Emirates';
+$aTimeZones['Asia/Dubai']['TZ']='UCT-4';
+
+// Uzbekistan
+$aTimeZones['Asia/Samarkand']['TZ']='UCT-5';
+$aTimeZones['Asia/Tashkent']['TZ']='UCT-5';
+
+$aTimeZones['Asia/Saigon']['NAME']='Vietnam';
+$aTimeZones['Asia/Saigon']['TZ']='UCT-7';
+
+$aTimeZones['Asia/Aden']['NAME']='Yemen';
+$aTimeZones['Asia/Aden']['TZ']='UCT-3';
+
+/** Australia, Oceania, Pacific **/
+// Northern Territory, Australia
+$aTimeZones['Australia/Darwin']['TZ']='UCT-9:30';
+// Western Australia
+$aTimeZones['Australia/Perth']['TZ']='UCT-8';
+// Queensland
+$aTimeZones['Australia/Brisbane']['TZ']='UCT-10';
+$aTimeZones['Australia/Lindeman']['TZ']='UCT-10';
+// South Australia
+// 1987    max     -       Oct     lastSun 2:00s   1:00    -
+// 1995    max     -       Mar     lastSun 2:00s   0       -
+$aTimeZones['Australia/Adelaide']['TZ']='CST-9:30CDT';
+// Tasmania
+// 1991    max     -       Mar     lastSun 2:00s   0       -
+// 2001    max     -       Oct     Sun>=1  2:00s   1:00    -
+$aTimeZones['Australia/Hobart']['TZ']='TST-10TDT';
+// Victoria
+// 1995    max     -       Mar     lastSun 2:00s   0       -
+// 2001    max     -       Oct     lastSun 2:00s   1:00    -
+$aTimeZones['Australia/Melbourne']['TZ']='EST-10EDT';
+// New South Wales
+// 1996    max     -       Mar     lastSun 2:00s   0       -
+// 2001    max     -       Oct     lastSun 2:00s   1:00    -
+$aTimeZones['Australia/Sydney']['TZ']='EST-10EDT';
+$aTimeZones['Australia/Broken_Hill']['TZ']='CST-9:30CDT';
+// Lord Howe Island
+// 1996    max     -       Mar     lastSun 2:00    0       -
+// 2001    max     -       Oct     lastSun 2:00    0:30    -
+$aTimeZones['Australia/Lord_Howe']['TZ']='LHT-10:30LHDT';
+
+$aTimeZones['Indian/Christmas']['TZ']='UCT-7';
+// Cook Islands
+$aTimeZones['Pacific/Rarotonga']['TZ']='UCT10';
+
+$aTimeZones['Indian/Cocos']['TZ']='UCT-6:30';
+
+$aTimeZones['Pacific/Fiji']['TZ']='UCT-12';
+// French Polynesia
+$aTimeZones['Pacific/Gambier']['TZ']='UCT9';
+$aTimeZones['Pacific/Marquesas']['TZ']='UCT9:30';
+$aTimeZones['Pacific/Tahiti']['TZ']='UCT10';
+// Guam
+$aTimeZones['Pacific/Guam']['TZ']='UCT-10';
+// Kiribati
+$aTimeZones['Pacific/Tarawa']['TZ']='UCT-12';
+$aTimeZones['Pacific/Enderbury']['TZ']='UCT-13';
+$aTimeZones['Pacific/Kiritimati']['TZ']='UCT-14';
+// North Marianas
+$aTimeZones['Pacific/Saipan']['TZ']='UCT-10';
+// Marshall Islands
+$aTimeZones['Pacific/Majuro']['TZ']='UCT-12';
+$aTimeZones['Pacific/Kwajalein']['TZ']='UCT-12';
+// Micronesia
+$aTimeZones['Pacific/Yap']['TZ']='UCT-10';
+$aTimeZones['Pacific/Truk']['TZ']='UCT-10';
+$aTimeZones['Pacific/Ponape']['TZ']='UCT-11';
+$aTimeZones['Pacific/Kosrae']['TZ']='UCT-11';
+// Nauru
+$aTimeZones['Pacific/Nauru']['TZ']='UCT-12';
+// New Caledonia
+$aTimeZones['Pacific/Noumea']['TZ']='UCT-11';
+// New Zealand
+// NZ      1990    max     -       Oct     Sun>=1  2:00s   1:00    D
+// Chatham 1990    max     -       Oct     Sun>=1  2:45s   1:00    D
+// NZ      1990    max     -       Mar     Sun>=15 2:00s   0       S
+// Chatham 1990    max     -       Mar     Sun>=15 2:45s   0       S
+$aTimeZones['Pacific/Auckland']['TZ']='NZST-12NZDT';
+$aTimeZones['Pacific/Chatham']['TZ']='CIST-12:45CIDT';
+// Niue Islands
+$aTimeZones['Pacific/Niue']['TZ']='UCT11';
+// Norfolk
+$aTimeZones['Pacific/Norfolk']['TZ']='UCT-11:30';
+// Palau
+$aTimeZones['Pacific/Palau']['TZ']='UCT-9';
+// Papua New Guinea
+$aTimeZones['Pacific/Port_Moresby']['TZ']='UCT-10';
+// Pitcairn
+$aTimeZones['Pacific/Pitcairn']['TZ']='UCT8';
+// American Samoa
+$aTimeZones['Pacific/Pago_Pago']['TZ']='UCT11';
+// Samoa
+$aTimeZones['Pacific/Apia']['TZ']='UCT11';
+// Solomon Islands
+$aTimeZones['Pacific/Guadalcanal']['TZ']='UCT-11';
+// Tokelau Islands
+$aTimeZones['Pacific/Fakaofo']['TZ']='UCT10';
+// Tonga
+$aTimeZones['Pacific/Tongatapu']['TZ']='UCT-13';
+// Tuvalu
+$aTimeZones['Pacific/Funafuti']['TZ']='UCT-12';
+// Johnston
+$aTimeZones['Pacific/Johnston']['TZ']='UCT10';
+// Midway
+$aTimeZones['Pacific/Midway']['TZ']='UCT11';
+// Wake
+$aTimeZones['Pacific/Wake']['TZ']='UCT-12';
+// Vanuatu
+$aTimeZones['Pacific/Efate']['TZ']='UCT-11';
+// Wallis and Futuna
+$aTimeZones['Pacific/Wallis']['TZ']='UCT-12';
+
+/** old timezone names (backward compatibility) **/
+$aTimeZones['America/Buenos_Aires']['LINK']='America/Argentina/Buenos_Aires';
+$aTimeZones['America/Catamarca']['LINK']='America/Argentina/Catamarca';
+$aTimeZones['America/Cordoba']['LINK']='America/Argentina/Cordoba'; 
+$aTimeZones['America/Jujuy']['LINK']='America/Argentina/Jujuy';
+$aTimeZones['America/Atka']['LINK']='America/Adak';
+$aTimeZones['America/Ensenada']['LINK']='America/Tijuana';
+$aTimeZones['America/Fort_Wayne']['LINK']='America/Indianapolis';
+$aTimeZones['America/Knox_IN']['LINK']='America/Indiana/Knox';
+$aTimeZones['America/Mendoza']['LINK']='America/Argentina/Mendoza';
+$aTimeZones['America/Porto_Acre']['LINK']='America/Rio_Branco';
+$aTimeZones['America/Rosario']['LINK']='America/Argentina/Cordoba';
+$aTimeZones['America/Virgin']['LINK']='America/St_Thomas';
+$aTimeZones['Asia/Ashkhabad']['LINK']='Asia/Ashgabat';
+$aTimeZones['Asia/Chungking']['LINK']='Asia/Chongqing';
+$aTimeZones['Asia/Dacca']['LINK']='Asia/Dhaka';
+$aTimeZones['Asia/Macao']['LINK']='Asia/Macau';
+$aTimeZones['Asia/Ujung_Pandang']['LINK']='Asia/Makassar';
+$aTimeZones['Asia/Tel_Aviv']['LINK']='Asia/Jerusalem';
+$aTimeZones['Asia/Thimbu']['LINK']='Asia/Thimphu';
+$aTimeZones['Asia/Ulan_Bator']['LINK']='Asia/Ulaanbaatar';
+$aTimeZones['Australia/ACT']['LINK']='Australia/Sydney';
+$aTimeZones['Australia/Canberra']['LINK']='Australia/Sydney';
+$aTimeZones['Australia/LHI']['LINK']='Australia/Lord_Howe';
+$aTimeZones['Australia/NSW']['LINK']='Australia/Sydney';
+$aTimeZones['Australia/North']['LINK']='Australia/Darwin';
+$aTimeZones['Australia/Queensland']['LINK']='Australia/Brisbane';
+$aTimeZones['Australia/South']['LINK']='Australia/Adelaide';
+$aTimeZones['Australia/Tasmania']['LINK']='Australia/Hobart';
+$aTimeZones['Australia/Victoria']['LINK']='Australia/Melbourne';
+$aTimeZones['Australia/West']['LINK']='Australia/Perth';
+$aTimeZones['Australia/Yancowinna']['LINK']='Australia/Broken_Hill';
+$aTimeZones['Brazil/Acre']['LINK']='America/Rio_Branco';
+$aTimeZones['Brazil/DeNoronha']['LINK']='America/Noronha';
+$aTimeZones['Brazil/East']['LINK']='America/Sao_Paulo';
+$aTimeZones['Brazil/West']['LINK']='America/Manaus';
+$aTimeZones['Canada/Atlantic']['LINK']='America/Halifax';
+$aTimeZones['Canada/Central']['LINK']='America/Winnipeg';
+$aTimeZones['Canada/East-Saskatchewan']['LINK']='America/Regina';
+$aTimeZones['Canada/Eastern']['LINK']='America/Toronto';
+$aTimeZones['Canada/Mountain']['LINK']='America/Edmonton';
+$aTimeZones['Canada/Newfoundland']['LINK']='America/St_Johns';
+$aTimeZones['Canada/Pacific']['LINK']='America/Vancouver';
+$aTimeZones['Canada/Saskatchewan']['LINK']='America/Regina';
+$aTimeZones['Canada/Yukon']['LINK']='America/Whitehorse';
+$aTimeZones['Chile/Continental']['LINK']='America/Santiago';
+$aTimeZones['Chile/EasterIsland']['LINK']='Pacific/Easter';
+$aTimeZones['Cuba']['LINK']='America/Havana';
+$aTimeZones['Egypt']['LINK']='Africa/Cairo';
+$aTimeZones['Eire']['LINK']='Europe/Dublin';
+$aTimeZones['Europe/Tiraspol']['LINK']='Europe/Chisinau';
+$aTimeZones['GB']['LINK']='Europe/London';
+$aTimeZones['GB-Eire']['LINK']='Europe/London';
+$aTimeZones['GMT+0']['LINK']='Etc/GMT';
+$aTimeZones['GMT-0']['LINK']='Etc/GMT';
+$aTimeZones['GMT0']['LINK']='Etc/GMT';
+$aTimeZones['Greenwich']['LINK']='Etc/GMT';
+$aTimeZones['Hongkong']['LINK']='Asia/Hong_Kong';
+$aTimeZones['Iceland']['LINK']='Atlantic/Reykjavik';
+$aTimeZones['Iran']['LINK']='Asia/Tehran';
+$aTimeZones['Israel']['LINK']='Asia/Jerusalem';
+$aTimeZones['Jamaica']['LINK']='America/Jamaica';
+$aTimeZones['Japan']['LINK']='Asia/Tokyo';
+$aTimeZones['Kwajalein']['LINK']='Pacific/Kwajalein';
+$aTimeZones['Libya']['LINK']='Africa/Tripoli';
+$aTimeZones['Mexico/BajaNorte']['LINK']='America/Tijuana';
+$aTimeZones['Mexico/BajaSur']['LINK']='America/Mazatlan';
+$aTimeZones['Mexico/General']['LINK']='America/Mexico_City';
+$aTimeZones['Navajo']['LINK']='America/Denver';
+$aTimeZones['NZ']['LINK']='Pacific/Auckland';
+$aTimeZones['NZ-CHAT']['LINK']='Pacific/Chatham';
+$aTimeZones['Pacific/Samoa']['LINK']='Pacific/Pago_Pago';
+$aTimeZones['Poland']['LINK']='Europe/Warsaw';
+$aTimeZones['Portugal']['LINK']='Europe/Lisbon';
+$aTimeZones['PRC']['LINK']='Asia/Shanghai';
+$aTimeZones['ROC']['LINK']='Asia/Taipei';
+$aTimeZones['ROK']['LINK']='Asia/Seoul';
+$aTimeZones['Singapore']['LINK']='Asia/Singapore';
+$aTimeZones['Turkey']['LINK']='Europe/Istanbul';
+$aTimeZones['UCT']['LINK']='Etc/UCT';
+$aTimeZones['US/Alaska']['LINK']='America/Anchorage';
+$aTimeZones['US/Aleutian']['LINK']='America/Adak';
+$aTimeZones['US/Arizona']['LINK']='America/Phoenix';
+$aTimeZones['US/Central']['LINK']='America/Chicago';
+$aTimeZones['US/East-Indiana']['LINK']='America/Indianapolis';
+$aTimeZones['US/Eastern']['LINK']='America/New_York';
+$aTimeZones['US/Hawaii']['LINK']='Pacific/Honolulu';
+$aTimeZones['US/Indiana-Starke']['LINK']='America/Indiana/Knox';
+$aTimeZones['US/Michigan']['LINK']='America/Detroit';
+$aTimeZones['US/Mountain']['LINK']='America/Denver';
+$aTimeZones['US/Pacific']['LINK']='America/Los_Angeles';
+$aTimeZones['US/Samoa']['LINK']='Pacific/Pago_Pago';
+$aTimeZones['UTC']['LINK']='Etc/UTC';
+$aTimeZones['Universal']['LINK']='Etc/UTC';
+$aTimeZones['W-SU']['LINK']='Europe/Moscow';
+$aTimeZones['Zulu']['LINK']='Etc/UTC';
+// zones that were present in SquirrelMail timezones.cfg and
+// not available in GNU C
+$aTimeZones['Asia/Ishigaki']['LINK']='Asia/Tokyo';
+$aTimeZones['China/Beijing']['LINK']='Asia/Shanghai';
+$aTimeZones['China/Shanghai']['LINK']='Asia/Shanghai';
+$aTimeZones['GMT']['LINK']='Etc/GMT';
+$aTimeZones['Factory']['LINK']='Etc/GMT';
+
+/** etcetera (GMT,UTC, UCT zones) **/
+$aTimeZones['Etc/GMT']['TZ']='GMT';
+$aTimeZones['Etc/UTC']['TZ']='UTC';
+$aTimeZones['Etc/UCT']['TZ']='UCT';
+
+$aTimeZones['Etc/Universal']['LINK']='Etc/UTC';
+$aTimeZones['Etc/Zulu']['LINK']='Etc/UTC';
+$aTimeZones['Etc/Greenwich']['LINK']='Etc/GMT';
+$aTimeZones['Etc/GMT-0']['LINK']='Etc/GMT';
+$aTimeZones['Etc/GMT+0']['LINK']='Etc/GMT';
+$aTimeZones['Etc/GMT0']['LINK']='Etc/GMT';
+
+$aTimeZones['Etc/GMT-14']['TZ']='GMT-14';
+$aTimeZones['Etc/GMT-13']['TZ']='GMT-13';
+$aTimeZones['Etc/GMT-12']['TZ']='GMT-12';
+$aTimeZones['Etc/GMT-11']['TZ']='GMT-11';
+$aTimeZones['Etc/GMT-10']['TZ']='GMT-10';
+$aTimeZones['Etc/GMT-9']['TZ']='GMT-9';
+$aTimeZones['Etc/GMT-8']['TZ']='GMT-8';
+$aTimeZones['Etc/GMT-7']['TZ']='GMT-7';
+$aTimeZones['Etc/GMT-6']['TZ']='GMT-6';
+$aTimeZones['Etc/GMT-5']['TZ']='GMT-5';
+$aTimeZones['Etc/GMT-4']['TZ']='GMT-4';
+$aTimeZones['Etc/GMT-3']['TZ']='GMT-3';
+$aTimeZones['Etc/GMT-2']['TZ']='GMT-2';
+$aTimeZones['Etc/GMT-1']['TZ']='GMT-1';
+$aTimeZones['Etc/GMT+1']['TZ']='GMT+1';
+$aTimeZones['Etc/GMT+2']['TZ']='GMT+2';
+$aTimeZones['Etc/GMT+3']['TZ']='GMT+3';
+$aTimeZones['Etc/GMT+4']['TZ']='GMT+4';
+$aTimeZones['Etc/GMT+5']['TZ']='GMT+5';
+$aTimeZones['Etc/GMT+6']['TZ']='GMT+6';
+$aTimeZones['Etc/GMT+7']['TZ']='GMT+7';
+$aTimeZones['Etc/GMT+8']['TZ']='GMT+8';
+$aTimeZones['Etc/GMT+9']['TZ']='GMT+9';
+$aTimeZones['Etc/GMT+10']['TZ']='GMT+10';
+$aTimeZones['Etc/GMT+11']['TZ']='GMT+11';
+$aTimeZones['Etc/GMT+12']['TZ']='GMT+12';
+
+/** europe **/
+// EU daylight saving rules apply unless noted other
+// EU      1981    max     -       Mar     lastSun  1:00u  1:00    S
+// EU      1996    max     -       Oct     lastSun  1:00u  0       -
+// W-Eur   1981    max     -       Mar     lastSun  1:00s  1:00    S
+// W-Eur   1996    max     -       Oct     lastSun  1:00s  0       -
+// C-Eur   1981    max     -       Mar     lastSun  2:00s  1:00    S
+// C-Eur   1996    max     -       Oct     lastSun  2:00s  0       -
+// E-Eur   1981    max     -       Mar     lastSun  0:00   1:00    S
+// E-Eur   1996    max     -       Oct     lastSun  0:00   0       -
+// Russia  1993    max     -       Mar     lastSun  2:00s  1:00    S
+// Russia  1996    max     -       Oct     lastSun  2:00s  0       -
+// Thule   1993    max     -       Apr     Sun>=1  2:00    1:00    D
+// Thule   1993    max     -       Oct     lastSun 2:00    0       S
+
+// Britain (United Kingdom) and Ireland (Eire)
+$aTimeZones['Europe/London']['TZ']='GMT';
+$aTimeZones['Europe/Belfast']['TZ']='GMT';
+$aTimeZones['Europe/Dublin']['TZ']='GMT';
+// Old tz names
+$aTimeZones['WET']['TZ']='WET0WEST'; // EU (WET/WEST)
+$aTimeZones['CET']['TZ']='CET-1CEST'; // C-Eur (CET/CEST)
+$aTimeZones['MET']['TZ']='MET-1MEST'; // C-Eur (MET/MEST)
+$aTimeZones['EET']['TZ']='EET-2EEST'; // EU (EET/EEST)
+
+$aTimeZones['Europe/Tirane']['NAME']='Albania';
+$aTimeZones['Europe/Tirane']['TZ']='MET-1METDST'; // ? CE%sT
+$aTimeZones['Europe/Andorra']['NAME']='Andorra';
+$aTimeZones['Europe/Andorra']['TZ']='MET-1METDST';
+$aTimeZones['Europe/Vienna']['NAME']='Austria';
+$aTimeZones['Europe/Vienna']['TZ']='MEZ-1MESZ'; // ? should be CE%sT
+$aTimeZones['Europe/Minsk']['NAME']='Belorus'; // Russia daylight saving rules
+$aTimeZones['Europe/Minsk']['TZ']='EET-2EETDST';
+$aTimeZones['Europe/Brussels']['NAME']='Belgium';
+$aTimeZones['Europe/Brussels']['TZ']='MET-1METDST';
+$aTimeZones['Europe/Sofia']['NAME']='Bulgaria';
+$aTimeZones['Europe/Sofia']['TZ']='EET-2EETDST'; // ? EE%sT
+$aTimeZones['Europe/Prague']['NAME']='Czech Republic';
+$aTimeZones['Europe/Prague']['TZ']='MET-1METDST';
+$aTimeZones['Europe/Copenhagen']['NAME']='Denmark';
+$aTimeZones['Europe/Copenhagen']['TZ']='MET-1METDST';
+$aTimeZones['Atlantic/Faeroe']['NAME']='Faroe Islands';
+$aTimeZones['Atlantic/Faeroe']['TZ']='WET0WETDST';
+
+// Greenland
+$aTimeZones['America/Danmarkshavn']['TZ']='GMT'; // no daylight saving rules
+$aTimeZones['America/Scoresbysund']['TZ']='EUT1EUTDST';
+$aTimeZones['America/Godthab']['TZ']='EUT3EUTDST'; // gmt-3, eu daylight saving rules
+$aTimeZones['America/Thule']['TZ']='AST4ADT'; // Thule daylight saving rules
+
+$aTimeZones['Europe/Tallinn']['NAME']='Estonia';
+$aTimeZones['Europe/Tallinn']['TZ']='EET-2EETDST';
+$aTimeZones['Europe/Helsinki']['NAME']='Finland';
+$aTimeZones['Europe/Helsinki']['TZ']='EET-2EETDST';
+// Aaland Islands
+$aTimeZones['Europe/Mariehamn']['LINK']='Europe/Helsinki';
+$aTimeZones['Europe/Paris']['NAME']='France';
+$aTimeZones['Europe/Paris']['TZ']='MET-1METDST';
+$aTimeZones['Europe/Berlin']['NAME']='Germany';
+$aTimeZones['Europe/Berlin']['TZ']='MET-1METDST'; // ? or MEZ-1MESZ
+$aTimeZones['Europe/Gibraltar']['NAME']='Gibraltar';
+$aTimeZones['Europe/Gibraltar']['TZ']='MET-1METDST';
+$aTimeZones['Europe/Athens']['NAME']='Greece';
+$aTimeZones['Europe/Athens']['TZ']='EET-2EETDST';
+$aTimeZones['Europe/Budapest']['NAME']='Hungary';
+$aTimeZones['Europe/Budapest']['TZ']='MET-1METDST';
+$aTimeZones['Atlantic/Reykjavik']['NAME']='Iceland';
+$aTimeZones['Atlantic/Reykjavik']['TZ']='GMT'; // no daylight saving rules
+$aTimeZones['Europe/Rome']['NAME']='Italy';
+$aTimeZones['Europe/Rome']['TZ']='MET-1METDST';
+$aTimeZones['Europe/Vatican']['LINK']='Europe/Rome';
+$aTimeZones['Europe/San_Marino']['LINK']='Europe/Rome';
+$aTimeZones['Europe/Riga']['NAME']='Latvia';
+$aTimeZones['Europe/Riga']['TZ']='EET-2EETDST';
+$aTimeZones['Europe/Vaduz']['NAME']='Liechtenstein';
+$aTimeZones['Europe/Vaduz']['TZ']='MET-1METDST';
+$aTimeZones['Europe/Vilnius']['NAME']='Lithuania';
+$aTimeZones['Europe/Vilnius']['TZ']='EET-2EETDST';
+$aTimeZones['Europe/Luxembourg']['NAME']='Luxembourg';
+$aTimeZones['Europe/Luxembourg']['TZ']='MET-1METDST';
+$aTimeZones['Europe/Malta']['NAME']='Malta';
+$aTimeZones['Europe/Malta']['TZ']='MET-1METDST';
+$aTimeZones['Europe/Chisinau']['NAME']='Moldova';
+$aTimeZones['Europe/Chisinau']['TZ']='EET-2EETDST';
+$aTimeZones['Europe/Monaco']['NAME']='Monaco';
+$aTimeZones['Europe/Monaco']['TZ']='MET-1METDST';
+$aTimeZones['Europe/Amsterdam']['NAME']='Netherlands';
+$aTimeZones['Europe/Amsterdam']['TZ']='MET-1METDST';
+$aTimeZones['Europe/Oslo']['NAME']='Norway';
+$aTimeZones['Europe/Oslo']['TZ']='MET-1METDST';
+$aTimeZones['Arctic/Longyearbyen']['LINK']='Europe/Oslo';
+$aTimeZones['Atlantic/Jan_Mayen']['LINK']='Europe/Oslo';
+$aTimeZones['Europe/Warsaw']['NAME']='Poland';
+$aTimeZones['Europe/Warsaw']['TZ']='MET-1METDST';
+$aTimeZones['Europe/Lisbon']['NAME']='Portugal';
+$aTimeZones['Europe/Lisbon']['TZ']='PWT0PST'; // ? WET0WETDST
+$aTimeZones['Atlantic/Azores']['NAME']='Azores';
+$aTimeZones['Atlantic/Azores']['TZ']='EUT1EUTDST'; // ? gmt-1 eu daylight saving rules
+$aTimeZones['Atlantic/Madeira']['NAME']='Madeira';
+$aTimeZones['Atlantic/Madeira']['TZ']='WET0WETDST'; // ?
+$aTimeZones['Europe/Bucharest']['NAME']='Romania';
+$aTimeZones['Europe/Bucharest']['TZ']='EET-2EETDST';
+
+// Russia (Russia daylight saving rules)
+$aTimeZones['Europe/Kaliningrad']['NAME']='Russia, Kaliningrad'; // gmt+2
+$aTimeZones['Europe/Kaliningrad']['TZ']='RFT-2RFTDST'; // Russian Fed. Zone 1
+$aTimeZones['Europe/Moscow']['NAME']='Russia, Moscow'; // gmt+3
+$aTimeZones['Europe/Moscow']['TZ']='RFT-3RFTDST'; // Russian Fed. Zone 2
+$aTimeZones['Europe/Samara']['NAME']='Russia, Samara'; // gmt+4
+$aTimeZones['Europe/Samara']['TZ']='RFT-4RFTDST'; // Russian Fed. Zone 3
+$aTimeZones['Asia/Yekaterinburg']['NAME']='Russia, Yekaterinburg'; // gmt+5
+$aTimeZones['Asia/Yekaterinburg']['TZ']='RFT-5RFTDST'; // Russian Fed. Zone 4
+$aTimeZones['Asia/Omsk']['NAME']='Russia, Omsk'; // gmt+6
+$aTimeZones['Asia/Omsk']['TZ']='RFT-6RFTDST'; // Russian Fed. Zone 5
+$aTimeZones['Asia/Novosibirsk']['NAME']='Russia, Novosibirsk'; // gmt+6
+$aTimeZones['Asia/Novosibirsk']['TZ']='RFT-6RFTDST'; // Russian Fed. Zone 5
+$aTimeZones['Asia/Krasnoyarsk']['NAME']='Russia, Krasnoyarsk'; // gmt+7
+$aTimeZones['Asia/Krasnoyarsk']['TZ']='RFT-7RFTDST'; // Russian Fed. Zone 6
+$aTimeZones['Asia/Irkutsk']['NAME']='Russia, Irkutsk'; // gmt+8
+$aTimeZones['Asia/Irkutsk']['TZ']='RFT-8RFTDST'; // Russian Fed. Zone 7
+$aTimeZones['Asia/Yakutsk']['NAME']='Russia, Yakutsk'; // gmt+9
+$aTimeZones['Asia/Yakutsk']['TZ']='RFT-9RFTDST'; // Russian Fed. Zone 8
+$aTimeZones['Asia/Vladivostok']['NAME']='Russia, Vladivostok'; // gmt+10
+$aTimeZones['Asia/Vladivostok']['TZ']='RFT-10RFTDST'; // Russian Fed. Zone 9
+$aTimeZones['Asia/Sakhalin']['NAME']='Russia, Sakhalin'; // gmt+10
+$aTimeZones['Asia/Sakhalin']['TZ']='RFT-10RFTDST'; // Russian Fed. Zone 9
+$aTimeZones['Asia/Magadan']['NAME']='Russia, Magadan'; // gmt+11
+$aTimeZones['Asia/Magadan']['TZ']='RFT-11RFTDST'; // Russian Fed. Zone 10
+$aTimeZones['Asia/Kamchatka']['NAME']='Russia, Kamchatka'; // gmt+12
+$aTimeZones['Asia/Kamchatka']['TZ']='RFT-12RFTDST'; // Russian Fed. Zone 11
+$aTimeZones['Asia/Anadyr']['NAME']='Russia, Chukotka'; // gmt+12 Chukotskij avtonomnyj okrug
+$aTimeZones['Asia/Anadyr']['TZ']='RFT-12RFTDST'; // Russian Fed. Zone 11
+
+$aTimeZones['Europe/Belgrade']['NAME']='Serbia and Montenegro';
+$aTimeZones['Europe/Belgrade']['TZ']='MET-1METDST';
+
+// These independent countries are represented as links to other TZs 
+// in GNU C. Use real entries instead of a links in order to have them on menu
+$aTimeZones['Europe/Ljubljana']['NAME']='Slovenia';
+$aTimeZones['Europe/Ljubljana']['TZ']='MET-1METDST';
+$aTimeZones['Europe/Sarajevo']['NAME']='Bosnia and Herzegovina';
+$aTimeZones['Europe/Sarajevo']['TZ']='MET-1METDST';
+$aTimeZones['Europe/Skopje']['NAME']='Macedonia';
+$aTimeZones['Europe/Skopje']['TZ']='MET-1METDST';
+$aTimeZones['Europe/Zagreb']['NAME']='Croatia';
+$aTimeZones['Europe/Zagreb']['TZ']='MET-1METDST';
+$aTimeZones['Europe/Bratislava']['NAME']='Slovakia';
+$aTimeZones['Europe/Bratislava']['TZ']='MET-1METDST';
+
+// Spain
+$aTimeZones['Europe/Madrid']['NAME']='Spain';
+$aTimeZones['Europe/Madrid']['TZ']='MET-1METDST';
+$aTimeZones['Africa/Ceuta']['NAME']='Ceuta';
+$aTimeZones['Africa/Ceuta']['TZ']='MET-1METDST';
+$aTimeZones['Atlantic/Canary']['NAME']='Canary';
+$aTimeZones['Atlantic/Canary']['TZ']='WET0WETDST';
+
+$aTimeZones['Europe/Stockholm']['NAME']='Sweden';
+$aTimeZones['Europe/Stockholm']['TZ']='MET-1METDST';
+$aTimeZones['Europe/Zurich']['NAME']='Switzerland';
+$aTimeZones['Europe/Zurich']['TZ']='MET-1METDST';
+$aTimeZones['Europe/Istanbul']['NAME']='Turkey';
+$aTimeZones['Europe/Istanbul']['TZ']='EET-2EETDST';
+$aTimeZones['Asia/Istanbul']['LINK']='Europe/Istanbul';
+
+// Ukraine
+$aTimeZones['Europe/Kiev']['NAME']='Ukraine';
+$aTimeZones['Europe/Kiev']['TZ']='EET-2EETDST';
+$aTimeZones['Europe/Uzhgorod']['NAME']='Ukraine, Ruthenia';
+$aTimeZones['Europe/Uzhgorod']['TZ']='EET-2EETDST';
+$aTimeZones['Europe/Zaporozhye']['NAME']='Ukraine, Zaporozhye';
+$aTimeZones['Europe/Zaporozhye']['TZ']='EET-2EETDST';
+$aTimeZones['Europe/Simferopol']['NAME']='Ukraine, Crimea';
+$aTimeZones['Europe/Simferopol']['TZ']='EET-2EETDST';
+
+/** northamerica **/
+// Rule    US      1967    max     -       Oct     lastSun 2:00    0       S
+// Rule    US      1987    max     -       Apr     Sun>=1  2:00    1:00    D
+//
+$aTimeZones['America/New_York']['NAME']='US Eastern standard time';
+$aTimeZones['America/New_York']['TZ']='EST5EDT';
+$aTimeZones['America/Chicago']['NAME']='US Central standard time';
+$aTimeZones['America/Chicago']['TZ']='CST6CDT';
+
+// Oliver County, ND
+//$aTimeZones['America/North_Dakota/Center']['NAME']='';
+$aTimeZones['America/North_Dakota/Center']['TZ']='CST6CDT'; // CST since 1992
+
+$aTimeZones['America/Denver']['NAME']='US Mountain standard time';
+$aTimeZones['America/Denver']['TZ']='MST7MDT';
+$aTimeZones['America/Los_Angeles']['NAME']='US Pacific standard time';
+$aTimeZones['America/Los_Angeles']['TZ']='PST8PDT';
+
+// Aliaska
+//$aTimeZones['America/Juneau']['NAME']='';
+$aTimeZones['America/Juneau']['TZ']='NAST9NADT';
+//$aTimeZones['America/Yakutat']['NAME']='';
+$aTimeZones['America/Yakutat']['TZ']='NAST9NADT';
+//$aTimeZones['America/Anchorage']['NAME']='';
+$aTimeZones['America/Anchorage']['TZ']='NAST9NADT';
+//$aTimeZones['America/Nome']['NAME']='';
+$aTimeZones['America/Nome']['TZ']='NAST9NADT';
+// $aTimeZones['America/Adak']['NAME']='';
+$aTimeZones['America/Adak']['TZ']='AST10ADT';
+
+$aTimeZones['Pacific/Honolulu']['NAME']='US, Hawaii';
+$aTimeZones['Pacific/Honolulu']['TZ']='UCT10';
+$aTimeZones['America/Phoenix']['NAME']='US, Arizona';
+$aTimeZones['America/Phoenix']['TZ']='MST7'; // gmt-7
+$aTimeZones['America/Shiprock']['LINK']='America/Denver';
+
+$aTimeZones['America/Boise']['NAME']='US, South Idaho';
+$aTimeZones['America/Boise']['TZ']='MST7MDT';
+$aTimeZones['America/Indianapolis']['NAME']='US, Indiana';
+$aTimeZones['America/Indianapolis']['TZ']='EST5';
+$aTimeZones['America/Indiana/Indianapolis']['LINK']='America/Indianapolis';
+// Crawford County, Indiana
+// $aTimeZones['America/Indiana/Marengo']['NAME']='';
+$aTimeZones['America/Indiana/Marengo']['TZ']='EST5';
+// Starke County, Indiana
+//$aTimeZones['America/Indiana/Knox']['NAME']='';
+$aTimeZones['America/Indiana/Knox']['TZ']='EST5';
+// Switzerland County, Indiana
+//$aTimeZones['America/Indiana/Vevay']['NAME']='';
+$aTimeZones['America/Indiana/Vevay']['TZ']='EST5';
+//$aTimeZones['America/Louisville']['NAME']='';
+$aTimeZones['America/Louisville']['TZ']='EST5EDT';
+$aTimeZones['America/Kentucky/Louisville']['LINK']='America/Louisville';
+// Wayne, Clinton, and Russell Counties, Kentucky
+//$aTimeZones['America/Kentucky/Monticello']['NAME']='';
+$aTimeZones['America/Kentucky/Monticello']['TZ']='EST5EDT';
+// Michigan
+$aTimeZones['America/Detroit']['NAME']='US, Michigan';
+$aTimeZones['America/Detroit']['TZ']='EST5EDT';
+// The Michigan border with Wisconsin switched from EST to CST/CDT in 1973.
+//$aTimeZones['America/Menominee']['NAME']='';
+$aTimeZones['America/Menominee']['TZ']='CST6CDT';
+
+$aTimeZones['EST5EDT']['LINK']='America/New_York';
+$aTimeZones['CST6CDT']['LINK']='America/Chicago';
+$aTimeZones['MST7MDT']['LINK']='America/Denver';
+$aTimeZones['PST8PDT']['LINK']='America/Los_Angeles';
+$aTimeZones['EST']['LINK']='America/Indianapolis';
+$aTimeZones['MST']['LINK']='America/Phoenix';
+$aTimeZones['HST']['LINK']='Pacific/Honolulu';
+
+
+// Canada
+// Rule    Canada  1974    max     -       Oct     lastSun 2:00    0       S
+// Rule    Canada  1987    max     -       Apr     Sun>=1  2:00    1:00    D
+// Rule    StJohns 1987    max     -       Oct     lastSun 0:01    0       S
+// Rule    StJohns 1989    max     -       Apr     Sun>=1  0:01    1:00    D
+$aTimeZones['America/St_Johns']['NAME']='Canada, Newfoundland';
+$aTimeZones['America/St_Johns']['TZ']='NST3:30NDT';
+$aTimeZones['America/Goose_Bay']['NAME']='Canada, Atlantic';
+$aTimeZones['America/Goose_Bay']['TZ']='AST4ADT'; // gmt-4 StJohns daylight savings
+$aTimeZones['America/Halifax']['NAME']='';
+$aTimeZones['America/Halifax']['TZ']='AST4ADT'; // gmt-4 Canada daylight savings
+$aTimeZones['America/Glace_Bay']['NAME']='';
+$aTimeZones['America/Glace_Bay']['TZ']='AST4ADT'; // gmt-4 Canada daylight savings
+// Ontario, Quebec
+//$aTimeZones['America/Montreal']['NAME']='';
+$aTimeZones['America/Montreal']['TZ']='EST5EDT';
+//$aTimeZones['America/Toronto']['NAME']='';
+$aTimeZones['America/Toronto']['TZ']='EST5EDT';
+//$aTimeZones['America/Thunder_Bay']['NAME']='';
+$aTimeZones['America/Thunder_Bay']['TZ']='EST5EDT';
+//$aTimeZones['America/Nipigon']['NAME']='';
+$aTimeZones['America/Nipigon']['TZ']='EST5EDT';
+//$aTimeZones['America/Rainy_River']['NAME']='';
+$aTimeZones['America/Rainy_River']['TZ']='CST6CDT';
+// Manitoba
+// Rule    Winn    1987    max     -       Apr     Sun>=1  2:00    1:00    D
+// Rule    Winn    1987    max     -       Oct     lastSun 2:00s   0       S
+$aTimeZones['America/Winnipeg']['NAME']='Canada, Manitoba';
+$aTimeZones['America/Winnipeg']['TZ']='CST6CDT';
+// Saskatchewan
+//$aTimeZones['America/Regina']['NAME']='';
+$aTimeZones['America/Regina']['TZ']='CST6';
+//$aTimeZones['America/Swift_Current']['NAME']='';
+$aTimeZones['America/Swift_Current']['TZ']='CST6';
+// Alberta
+// Rule    Edm     1972    max     -       Oct     lastSun 2:00    0       S
+// Rule    Edm     1987    max     -       Apr     Sun>=1  2:00    1:00    D
+$aTimeZones['America/Edmonton']['NAME']='Canada, Alberta';
+$aTimeZones['America/Edmonton']['TZ']='MST7MDT';
+// British Columbia
+// Rule    Vanc    1962    max     -       Oct     lastSun 2:00    0       S
+// Rule    Vanc    1987    max     -       Apr     Sun>=1  2:00    1:00    D
+$aTimeZones['America/Vancouver']['NAME']='Canada, British Columbia';
+$aTimeZones['America/Vancouver']['TZ']='PST8PDT';
+$aTimeZones['America/Dawson_Creek']['NAME']='Canada, Dawson Creek';
+$aTimeZones['America/Dawson_Creek']['TZ']='MST7';
+// Northwest Territories, Nunavut, Yukon
+// Rule    NT_YK   1980    max     -       Oct     lastSun 2:00    0       S
+// Rule    NT_YK   1987    max     -       Apr     Sun>=1  2:00    1:00    D
+//$aTimeZones['America/Pangnirtung']['NAME']='';
+$aTimeZones['America/Pangnirtung']['TZ']='EST5EDT'; // Canada daylight saving
+//$aTimeZones['America/Iqaluit']['NAME']='';
+$aTimeZones['America/Iqaluit']['TZ']='EST5EDT'; // Canada daylight saving
+//$aTimeZones['America/Rankin_Inlet']['NAME']='';
+$aTimeZones['America/Rankin_Inlet']['TZ']='CST6CDT'; // Canada daylight saving
+//$aTimeZones['America/Cambridge_Bay']['NAME']='';
+$aTimeZones['America/Cambridge_Bay']['TZ']='MST7MDT'; // Canada daylight saving
+//$aTimeZones['America/Yellowknife']['NAME']='';
+$aTimeZones['America/Yellowknife']['TZ']='MST7MDT';  // NT_YK daylight saving
+//$aTimeZones['America/Inuvik']['NAME']='';
+$aTimeZones['America/Inuvik']['TZ']='MST7MDT';  // NT_YK daylight saving
+//$aTimeZones['America/Whitehorse']['NAME']='';
+$aTimeZones['America/Whitehorse']['TZ']='PST8PDT';  // NT_YK daylight saving
+//$aTimeZones['America/Dawson']['NAME']='';
+$aTimeZones['America/Dawson']['TZ']='PST8PDT';  // NT_YK daylight saving
+
+// Mexico
+// Rule    Mexico  2002    max     -       Apr     Sun>=1  2:00    1:00    D
+// Rule    Mexico  2002    max     -       Oct     lastSun 2:00    0       S
+// Quintana Roo
+//$aTimeZones['America/Cancun']['NAME']='';
+$aTimeZones['America/Cancun']['TZ']='CST6CDT';
+// Campeche, Yucatan
+//$aTimeZones['America/Merida']['NAME']='';
+$aTimeZones['America/Merida']['TZ']='CST6CDT';
+// Coahuila, Durango, Nuevo Leon, Tamaulipas
+//$aTimeZones['America/Monterrey']['NAME']='';
+$aTimeZones['America/Monterrey']['TZ']='CST6CDT';
+// Central Mexico 
+//$aTimeZones['America/Mexico_City']['NAME']='';
+$aTimeZones['America/Mexico_City']['TZ']='CST6CDT';
+// Chihuahua
+//$aTimeZones['America/Chihuahua']['NAME']='';
+$aTimeZones['America/Chihuahua']['TZ']='MST7MDT';
+// Sonora
+//$aTimeZones['America/Hermosillo']['NAME']='';
+$aTimeZones['America/Hermosillo']['TZ']='MST7';
+// Baja California Sur, Nayarit, Sinaloa
+//$aTimeZones['America/Mazatlan']['NAME']='';
+$aTimeZones['America/Mazatlan']['TZ']='MST7MDT';
+// Baja California
+//$aTimeZones['America/Tijuana']['NAME']='';
+$aTimeZones['America/Tijuana']['TZ']='PST8PDT';
+
+$aTimeZones['America/Anguilla']['NAME']='Anguilla';
+$aTimeZones['America/Anguilla']['TZ']='UCT4'; // gmt-4 AST
+$aTimeZones['America/Antigua']['NAME']='Antigua';
+$aTimeZones['America/Antigua']['TZ']='UCT4';
+
+// Bahamas 
+// 1964    max     -       Oct     lastSun 2:00    0       S
+// 1987    max     -       Apr     Sun>=1  2:00    1:00    D
+$aTimeZones['America/Nassau']['NAME']='Bahamas';
+$aTimeZones['America/Nassau']['TZ']='EST5EDT';
+
+$aTimeZones['America/Barbados']['NAME']='Barbados';
+$aTimeZones['America/Barbados']['TZ']='UCT4';
+$aTimeZones['America/Belize']['NAME']='Belize';
+$aTimeZones['America/Belize']['TZ']='UCT6';
+$aTimeZones['Atlantic/Bermuda']['NAME']='Bermuda';
+$aTimeZones['Atlantic/Bermuda']['TZ']='AST4ADT'; // Bahamas daylight saving rules
+$aTimeZones['America/Cayman']['NAME']='Cayman Islands';
+$aTimeZones['America/Cayman']['TZ']='EST5';
+$aTimeZones['America/Costa_Rica']['NAME']='Costa Rica';
+$aTimeZones['America/Costa_Rica']['TZ']='UCT6';
+// Cuba
+// 2000    max     -       Apr     Sun>=1  0:00s   1:00    D
+// 2005    max     -       Oct     lastSun 0:00s   0       S
+$aTimeZones['America/Havana']['NAME']='Cuba';
+$aTimeZones['America/Havana']['TZ']='UCT5'; // ? C%sT check daylight savings
+
+$aTimeZones['America/Dominica']['NAME']='Dominica';
+$aTimeZones['America/Dominica']['TZ']='UCT4'; // AST4
+$aTimeZones['America/Santo_Domingo']['NAME']='Dominican Republic';
+$aTimeZones['America/Santo_Domingo']['TZ']='UCT4';
+$aTimeZones['America/El_Salvador']['NAME']='El_Salvador';
+$aTimeZones['America/El_Salvador']['TZ']='UCT6';
+$aTimeZones['America/Grenada']['NAME']='Grenada';
+$aTimeZones['America/Grenada']['TZ']='UCT4';
+$aTimeZones['America/Guadeloupe']['NAME']='Guadeloupe';
+$aTimeZones['America/Guadeloupe']['TZ']='UCT4';
+$aTimeZones['America/Guatemala']['NAME']='Guatemala';
+$aTimeZones['America/Guatemala']['TZ']='UCT6';
+$aTimeZones['America/Port-au-Prince']['NAME']='Haiti';
+$aTimeZones['America/Port-au-Prince']['TZ']='EST5EDT';
+$aTimeZones['America/Tegucigalpa']['NAME']='Honduras';
+$aTimeZones['America/Tegucigalpa']['TZ']='UCT6';
+$aTimeZones['America/Jamaica']['NAME']='Jamaica';
+$aTimeZones['America/Jamaica']['TZ']='EST5';
+$aTimeZones['America/Martinique']['NAME']='Martinique';
+$aTimeZones['America/Martinique']['TZ']='UCT4'; // AST4
+$aTimeZones['America/Montserrat']['NAME']='Montserrat';
+$aTimeZones['America/Montserrat']['TZ']='UCT4';
+// Nicaragua
+// Rule    Nic     2005    only    -       Apr     10      0:00    1:00    D
+// Rule    Nic     2005    only    -       Sep     11      0:00    0       S
+$aTimeZones['America/Managua']['NAME']='Nicaragua';
+$aTimeZones['America/Managua']['TZ']='CST6CDT';
+$aTimeZones['America/Panama']['NAME']='Panama';
+$aTimeZones['America/Panama']['TZ']='EST5';
+$aTimeZones['America/Puerto_Rico']['NAME']='Puerto Rico';
+$aTimeZones['America/Puerto_Rico']['TZ']='UCT4'; // AST4
+$aTimeZones['America/St_Kitts']['NAME']='St Kitts-Nevis';
+$aTimeZones['America/St_Kitts']['TZ']='UCT4'; // AST4
+$aTimeZones['America/St_Lucia']['NAME']='St Lucia';
+$aTimeZones['America/St_Lucia']['TZ']='UCT4'; // AST4
+$aTimeZones['America/Miquelon']['NAME']='St Pierre and Miquelon';
+$aTimeZones['America/Miquelon']['TZ']='UCT3'; // gmt-3 Canada daylight saving rules PMST3PMDT
+$aTimeZones['America/St_Vincent']['NAME']='St Vincent and the Grenadines';
+$aTimeZones['America/St_Vincent']['TZ']='UCT4'; // AST4
+
+// Rule    TC      1979    max     -       Oct     lastSun 0:00    0       S
+// Rule    TC      1987    max     -       Apr     Sun>=1  0:00    1:00    D
+$aTimeZones['America/Grand_Turk']['NAME']='Turks and Caicos';
+$aTimeZones['America/Grand_Turk']['TZ']='EST5EDT';
+
+$aTimeZones['America/Tortola']['NAME']='British Virgin Islands';
+$aTimeZones['America/Tortola']['TZ']='UCT4'; // AST4
+$aTimeZones['America/St_Thomas']['NAME']='Virgin Islands';
+$aTimeZones['America/St_Thomas']['TZ']='UCT4'; // AST4
+
+// Pacific Presidential Election Time
+$aTimeZones['US/Pacific-New']['LINK']='America/Los_Angeles';
+
+/** southamerica **/
+
+// Argentina
+// Buenos Aires (BA), Capital Federal (CF)
+//$aTimeZones['America/Argentina/Buenos_Aires']['NAME']='';
+$aTimeZones['America/Argentina/Buenos_Aires']['TZ']='SAT3'; // gmt-3 2000
+// Santa Fe (SF), Entre Rios (ER), Corrientes (CN), Misiones (MN), Chaco (CC),
+// Formosa (FM), Salta (SA), Santiago del Estero (SE), Cordoba (CB),
+// San Luis (SL), La Pampa (LP), Neuquen (NQ), Rio Negro (RN)
+//$aTimeZones['America/Argentina/Cordoba']['NAME']='';
+$aTimeZones['America/Argentina/Cordoba']['TZ']='SAT3'; // gmt-3 since 2000
+// Tucuman (TM)
+//$aTimeZones['America/Argentina/Tucuman']['NAME']='';
+$aTimeZones['America/Argentina/Tucuman']['TZ']='SAT3'; // gmt-3 since 2004
+// La Rioja (LR)
+//$aTimeZones['America/Argentina/La_Rioja']['NAME']='';
+$aTimeZones['America/Argentina/La_Rioja']['TZ']='SAT3'; // gmt-3 since 2004
+// San Juan (SJ)
+//$aTimeZones['America/Argentina/San_Juan']['NAME']='';
+$aTimeZones['America/Argentina/San_Juan']['TZ']='SAT3'; // gmt-3 since 2004
+// Jujuy (JY)
+//$aTimeZones['America/Argentina/Jujuy']['NAME']='';
+$aTimeZones['America/Argentina/Jujuy']['TZ']='SAT3'; // gmt-3 since 2000
+// Catamarca (CT)
+//$aTimeZones['America/Argentina/Catamarca']['NAME']='';
+$aTimeZones['America/Argentina/Catamarca']['TZ']='SAT3'; // gmt-3 since 2004
+// Mendoza (MZ)
+//$aTimeZones['America/Argentina/Mendoza']['NAME']='';
+$aTimeZones['America/Argentina/Mendoza']['TZ']='SAT3'; // gmt-3 since 2004
+// Chubut (CH)
+//$aTimeZones['America/Argentina/ComodRivadavia']['NAME']='';
+$aTimeZones['America/Argentina/ComodRivadavia']['TZ']='SAT3'; // gmt-3 since 2004
+// Santa Cruz (SC)
+// $aTimeZones['America/Argentina/Rio_Gallegos']['NAME']='';
+$aTimeZones['America/Argentina/Rio_Gallegos']['TZ']='SAT3'; // gmt-3 since 2004
+// Tierra del Fuego, Antartida e Islas del Atlantico Sur (TF)
+//$aTimeZones['America/Argentina/Ushuaia']['NAME']='';
+$aTimeZones['America/Argentina/Ushuaia']['TZ']='SAT3'; // gmt-3 since 2004
+
+$aTimeZones['America/Aruba']['NAME']='Aruba';
+$aTimeZones['America/Aruba']['TZ']='UCT4'; // AST4
+$aTimeZones['America/La_Paz']['NAME']='Bolivia';
+$aTimeZones['America/La_Paz']['TZ']='UCT4'; // BOT4
+
+// Brazil
+// 2001    max     -       Feb     Sun>=15  0:00   0       -
+// 2004    only    -       Nov      2       0:00   1:00    S
+// 2005    max     -       Oct     Sun>=15  0:00   1:00    S
+// Fernando de Noronha (administratively part of PE)
+// $aTimeZones['America/Noronha']['NAME']='';
+$aTimeZones['America/Noronha']['TZ']='NORO2';
+// Amapa (AP), east Para (PA)
+//$aTimeZones['America/Belem']['NAME']='';
+$aTimeZones['America/Belem']['TZ']='BRT3'; // gmt-3
+//  Maranhao (MA), Piaui (PI), Ceara (CE), Rio Grande do Norte (RN), Paraiba (PB)
+//$aTimeZones['America/Fortaleza']['NAME']='';
+$aTimeZones['America/Fortaleza']['TZ']='BRT3'; // gmt-3
+// Pernambuco (PE) (except Atlantic islands)
+//$aTimeZones['America/Recife']['NAME']='';
+$aTimeZones['America/Recife']['TZ']='BRT3'; // gmt-3
+// Tocantins (TO)
+//$aTimeZones['America/Araguaina']['NAME']='';
+$aTimeZones['America/Araguaina']['TZ']='BRT3';
+// Alagoas (AL), Sergipe (SE)
+//$aTimeZones['America/Maceio']['NAME']='';
+$aTimeZones['America/Maceio']['TZ']='BRT3';
+// Bahia (BA)
+//$aTimeZones['America/Bahia']['NAME']='';
+$aTimeZones['America/Bahia']['TZ']='BRT3';
+// Goias (GO), Distrito Federal (DF), Minas Gerais (MG),
+// Espirito Santo (ES), Rio de Janeiro (RJ), Sao Paulo (SP), Parana (PR),
+// Santa Catarina (SC), Rio Grande do Sul (RS)
+//$aTimeZones['America/Sao_Paulo']['NAME']='';
+$aTimeZones['America/Sao_Paulo']['TZ']='BRT3BRST'; // ? gmt-3 Brasil daylight saving rules
+// Mato Grosso do Sul (MS)
+//$aTimeZones['America/Campo_Grande']['NAME']='';
+$aTimeZones['America/Campo_Grande']['TZ']='AMT4AMST'; // ? gmt-4 Brasil daylight saving rules
+// Mato Grosso (MT)
+//$aTimeZones['America/Cuiaba']['NAME']='';
+$aTimeZones['America/Cuiaba']['TZ']='AMT4AMST'; // ? gmt-4 Brasil daylight saving rules
+// west Para (PA), Rondonia (RO)
+//$aTimeZones['America/Porto_Velho']['NAME']='';
+$aTimeZones['America/Porto_Velho']['TZ']='AMT4'; // gmt-4
+// Roraima (RR)
+//$aTimeZones['America/Boa_Vista']['NAME']='';
+$aTimeZones['America/Boa_Vista']['TZ']='AMT4'; // gmt-4
+// east Amazonas (AM): Boca do Acre, Jutai, Manaus, Floriano Peixoto
+//$aTimeZones['America/Manaus']['NAME']='';
+$aTimeZones['America/Manaus']['TZ']='AMT4';
+// west Amazonas (AM): Atalaia do Norte, Boca do Maoco, Benjamin Constant,
+// Eirunepe, Envira, Ipixuna
+//$aTimeZones['America/Eirunepe']['NAME']='';
+$aTimeZones['America/Eirunepe']['TZ']='ACT5';
+// Acre (AC)
+//$aTimeZones['America/Rio_Branco']['NAME']='';
+$aTimeZones['America/Rio_Branco']['TZ']='ACT5';
+
+// Chile
+//Rule    Chile   1999    max     -       Oct     Sun>=9  4:00u   1:00    S
+//Rule    Chile   2000    max     -       Mar     Sun>=9  3:00u   0       -
+$aTimeZones['America/Santiago']['NAME']='Chile';
+$aTimeZones['America/Santiago']['TZ']='CST4CDT';
+$aTimeZones['Pacific/Easter']['NAME']='Chile, Easter Island';
+$aTimeZones['Pacific/Easter']['TZ']='EIST6EIDT';
+
+$aTimeZones['America/Bogota']['NAME']='Colombia';
+$aTimeZones['America/Bogota']['TZ']='UCT5'; // COT5
+$aTimeZones['America/Curacao']['NAME']='Curacao';
+$aTimeZones['America/Curacao']['TZ']='UCT4'; // AST4
+$aTimeZones['America/Guayaquil']['NAME']='Equador';
+$aTimeZones['America/Guayaquil']['TZ']='UCT5'; // ECT5
+$aTimeZones['Pacific/Galapagos']['NAME']='Equador, Galapagos';
+$aTimeZones['Pacific/Galapagos']['TZ']='UCT6'; // GALT6
+
+// Falklands
+//Rule    Falk    2001    max     -       Apr     Sun>=15 2:00    0       -
+//Rule    Falk    2001    max     -       Sep     Sun>=1  2:00    1:00    S
+$aTimeZones['Atlantic/Stanley']['NAME']='Falklands';
+$aTimeZones['Atlantic/Stanley']['TZ']='FKT4FKST';
+
+$aTimeZones['America/Cayenne']['NAME']='French Guiana';
+$aTimeZones['America/Cayenne']['TZ']='SAT3';
+$aTimeZones['America/Guyana']['NAME']='Guyana';
+$aTimeZones['America/Guyana']['TZ']='UCT4';
+// Paraguay
+// Rule    Para    2004    max     -       Oct     Sun>=15 0:00    1:00    S
+// Rule    Para    2005    max     -       Mar     Sun>=8  0:00    0       -
+$aTimeZones['America/Asuncion']['NAME']='Paraguay';
+$aTimeZones['America/Asuncion']['TZ']='PYT4PYST';
+
+$aTimeZones['America/Lima']['NAME']='Peru';
+$aTimeZones['America/Lima']['TZ']='PET5';
+$aTimeZones['Atlantic/South_Georgia']['NAME']='South Georgia';
+$aTimeZones['Atlantic/South_Georgia']['TZ']='UCT2'; // gmt-2 GST2
+$aTimeZones['America/Paramaribo']['NAME']='Suriname';
+$aTimeZones['America/Paramaribo']['TZ']='UCT3'; // gmt-3 SRT3
+$aTimeZones['America/Port_of_Spain']['NAME']='Trinidad and Tobago';
+$aTimeZones['America/Port_of_Spain']['TZ']='UCT4'; // AST4
+
+// Uruguay
+//Rule    Uruguay 2004    only    -       Sep     19       0:00   1:00    S
+//Rule    Uruguay 2005    only    -       Mar     27       2:00   0       -
+$aTimeZones['America/Montevideo']['NAME']='Uruguay';
+$aTimeZones['America/Montevideo']['TZ']='SAT3'; // ?
+
+$aTimeZones['America/Caracas']['NAME']='Venezuela';
+$aTimeZones['America/Caracas']['TZ']='UCT4'; // VET4
+
+/** SystemV **/
+$aTimeZones['SystemV/AST4ADT']['LINK']='America/Halifax';
+$aTimeZones['SystemV/EST5EDT']['LINK']='America/New_York';
+$aTimeZones['SystemV/CST6CDT']['LINK']='America/Chicago';
+$aTimeZones['SystemV/MST7MDT']['LINK']='America/Denver';
+$aTimeZones['SystemV/PST8PDT']['LINK']='America/Los_Angeles';
+$aTimeZones['SystemV/YST9YDT']['LINK']='America/Anchorage';
+$aTimeZones['SystemV/AST4']['LINK']='America/Puerto_Rico';
+$aTimeZones['SystemV/EST5']['LINK']='America/Indianapolis';
+$aTimeZones['SystemV/CST6']['LINK']='America/Regina';
+$aTimeZones['SystemV/MST7']['LINK']='America/Phoenix';
+$aTimeZones['SystemV/PST8']['LINK']='Pacific/Pitcairn';
+$aTimeZones['SystemV/YST9']['LINK']='Pacific/Gambier';
+$aTimeZones['SystemV/HST10']['LINK']='Pacific/Honolulu';
+
+// Saudi Arabia (solar87/solar88/solar89)
+//$aTimeZones['Asia/Riyadh87']['NAME']='';
+$aTimeZones['Asia/Riyadh87']['TZ']='UCT-3:07:04';
+$aTimeZones['Mideast/Riyadh87']['LINK']='Asia/Riyadh87';
+//$aTimeZones['Asia/Riyadh88']['NAME']='';
+$aTimeZones['Asia/Riyadh88']['TZ']='UCT-3:07:04';
+$aTimeZones['Mideast/Riyadh88']['LINK']='Asia/Riyadh88';
+//$aTimeZones['Asia/Riyadh89']['NAME']='';
+$aTimeZones['Asia/Riyadh89']['TZ']='UCT-3:07:04';
+$aTimeZones['Mideast/Riyadh89']['LINK']='Asia/Riyadh89';
+
+?>
\ No newline at end of file
diff --git a/include/timezones/standard_orig.php b/include/timezones/standard_orig.php
new file mode 100644 (file)
index 0000000..2128a13
--- /dev/null
@@ -0,0 +1,569 @@
+<?php
+/**
+ * Original SquirrelMail time zone library
+ *
+ * locale/timezones.cfg file converted to array. DON'T modify $aTimeZones 
+ * array stored in this file. It is used for backward compatibility testing.
+ *
+ * Copyright (c) 2005 The SquirrelMail Project Team
+ * This file is part of SquirrelMail webmail interface.
+ *
+ * SquirrelMail is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * SquirrelMail is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with SquirrelMail; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * @version $Id$
+ * @package squirrelmail
+ * @subpackage timezones
+ */
+
+/** standard time zone */
+$aTimeZones=array();
+$aTimeZones['Africa/Abidjan']['TZ']='Africa/Abidjan';
+$aTimeZones['Africa/Accra']['TZ']='Africa/Accra';
+$aTimeZones['Africa/Addis_Ababa']['TZ']='Africa/Addis_Ababa';
+$aTimeZones['Africa/Algiers']['TZ']='Africa/Algiers';
+$aTimeZones['Africa/Asmera']['TZ']='Africa/Asmera';
+$aTimeZones['Africa/Bamako']['TZ']='Africa/Bamako';
+$aTimeZones['Africa/Bangui']['TZ']='Africa/Bangui';
+$aTimeZones['Africa/Banjul']['TZ']='Africa/Banjul';
+$aTimeZones['Africa/Bissau']['TZ']='Africa/Bissau';
+$aTimeZones['Africa/Blantyre']['TZ']='Africa/Blantyre';
+$aTimeZones['Africa/Brazzaville']['TZ']='Africa/Brazzaville';
+$aTimeZones['Africa/Bujumbura']['TZ']='Africa/Bujumbura';
+$aTimeZones['Africa/Cairo']['TZ']='Africa/Cairo';
+$aTimeZones['Africa/Casablanca']['TZ']='Africa/Casablanca';
+$aTimeZones['Africa/Ceuta']['TZ']='Africa/Ceuta';
+$aTimeZones['Africa/Conakry']['TZ']='Africa/Conakry';
+$aTimeZones['Africa/Dakar']['TZ']='Africa/Dakar';
+$aTimeZones['Africa/Dar_es_Salaam']['TZ']='Africa/Dar_es_Salaam';
+$aTimeZones['Africa/Djibouti']['TZ']='Africa/Djibouti';
+$aTimeZones['Africa/Douala']['TZ']='Africa/Douala';
+$aTimeZones['Africa/El_Aaiun']['TZ']='Africa/El_Aaiun';
+$aTimeZones['Africa/Freetown']['TZ']='Africa/Freetown';
+$aTimeZones['Africa/Gaborone']['TZ']='Africa/Gaborone';
+$aTimeZones['Africa/Harare']['TZ']='Africa/Harare';
+$aTimeZones['Africa/Johannesburg']['TZ']='Africa/Johannesburg';
+$aTimeZones['Africa/Kampala']['TZ']='Africa/Kampala';
+$aTimeZones['Africa/Khartoum']['TZ']='Africa/Khartoum';
+$aTimeZones['Africa/Kigali']['TZ']='Africa/Kigali';
+$aTimeZones['Africa/Kinshasa']['TZ']='Africa/Kinshasa';
+$aTimeZones['Africa/Lagos']['TZ']='Africa/Lagos';
+$aTimeZones['Africa/Libreville']['TZ']='Africa/Libreville';
+$aTimeZones['Africa/Lome']['TZ']='Africa/Lome';
+$aTimeZones['Africa/Luanda']['TZ']='Africa/Luanda';
+$aTimeZones['Africa/Lubumbashi']['TZ']='Africa/Lubumbashi';
+$aTimeZones['Africa/Lusaka']['TZ']='Africa/Lusaka';
+$aTimeZones['Africa/Malabo']['TZ']='Africa/Malabo';
+$aTimeZones['Africa/Maputo']['TZ']='Africa/Maputo';
+$aTimeZones['Africa/Maseru']['TZ']='Africa/Maseru';
+$aTimeZones['Africa/Mbabane']['TZ']='Africa/Mbabane';
+$aTimeZones['Africa/Mogadishu']['TZ']='Africa/Mogadishu';
+$aTimeZones['Africa/Monrovia']['TZ']='Africa/Monrovia';
+$aTimeZones['Africa/Nairobi']['TZ']='Africa/Nairobi';
+$aTimeZones['Africa/Ndjamena']['TZ']='Africa/Ndjamena';
+$aTimeZones['Africa/Niamey']['TZ']='Africa/Niamey';
+$aTimeZones['Africa/Nouakchott']['TZ']='Africa/Nouakchott';
+$aTimeZones['Africa/Ouagadougou']['TZ']='Africa/Ouagadougou';
+$aTimeZones['Africa/Porto-Novo']['TZ']='Africa/Porto-Novo';
+$aTimeZones['Africa/Sao_Tome']['TZ']='Africa/Sao_Tome';
+$aTimeZones['Africa/Timbuktu']['TZ']='Africa/Timbuktu';
+$aTimeZones['Africa/Tripoli']['TZ']='Africa/Tripoli';
+$aTimeZones['Africa/Tunis']['TZ']='Africa/Tunis';
+$aTimeZones['Africa/Windhoek']['TZ']='Africa/Windhoek';
+$aTimeZones['America/Adak']['TZ']='America/Adak';
+$aTimeZones['America/Anchorage']['TZ']='America/Anchorage';
+$aTimeZones['America/Anguilla']['TZ']='America/Anguilla';
+$aTimeZones['America/Antigua']['TZ']='America/Antigua';
+$aTimeZones['America/Araguaina']['TZ']='America/Araguaina';
+$aTimeZones['America/Aruba']['TZ']='America/Aruba';
+$aTimeZones['America/Asuncion']['TZ']='America/Asuncion';
+$aTimeZones['America/Atka']['TZ']='America/Atka';
+$aTimeZones['America/Barbados']['TZ']='America/Barbados';
+$aTimeZones['America/Belem']['TZ']='America/Belem';
+$aTimeZones['America/Belize']['TZ']='America/Belize';
+$aTimeZones['America/Boa_Vista']['TZ']='America/Boa_Vista';
+$aTimeZones['America/Bogota']['TZ']='America/Bogota';
+$aTimeZones['America/Boise']['TZ']='America/Boise';
+$aTimeZones['America/Buenos_Aires']['TZ']='America/Buenos_Aires';
+$aTimeZones['America/Cambridge_Bay']['TZ']='America/Cambridge_Bay';
+$aTimeZones['America/Cancun']['TZ']='America/Cancun';
+$aTimeZones['America/Caracas']['TZ']='America/Caracas';
+$aTimeZones['America/Catamarca']['TZ']='America/Catamarca';
+$aTimeZones['America/Cayenne']['TZ']='America/Cayenne';
+$aTimeZones['America/Cayman']['TZ']='America/Cayman';
+$aTimeZones['America/Chicago']['TZ']='America/Chicago';
+$aTimeZones['America/Chihuahua']['TZ']='America/Chihuahua';
+$aTimeZones['America/Cordoba']['TZ']='America/Cordoba';
+$aTimeZones['America/Costa_Rica']['TZ']='America/Costa_Rica';
+$aTimeZones['America/Cuiaba']['TZ']='America/Cuiaba';
+$aTimeZones['America/Curacao']['TZ']='America/Curacao';
+$aTimeZones['America/Danmarkshavn']['TZ']='America/Danmarkshavn';
+$aTimeZones['America/Dawson']['TZ']='America/Dawson';
+$aTimeZones['America/Dawson_Creek']['TZ']='America/Dawson_Creek';
+$aTimeZones['America/Denver']['TZ']='America/Denver';
+$aTimeZones['America/Detroit']['TZ']='America/Detroit';
+$aTimeZones['America/Dominica']['TZ']='America/Dominica';
+$aTimeZones['America/Edmonton']['TZ']='America/Edmonton';
+$aTimeZones['America/Eirunepe']['TZ']='America/Eirunepe';
+$aTimeZones['America/El_Salvador']['TZ']='America/El_Salvador';
+$aTimeZones['America/Ensenada']['TZ']='America/Ensenada';
+$aTimeZones['America/Fort_Wayne']['TZ']='America/Fort_Wayne';
+$aTimeZones['America/Fortaleza']['TZ']='America/Fortaleza';
+$aTimeZones['America/Glace_Bay']['TZ']='America/Glace_Bay';
+$aTimeZones['America/Godthab']['TZ']='America/Godthab';
+$aTimeZones['America/Goose_Bay']['TZ']='America/Goose_Bay';
+$aTimeZones['America/Grand_Turk']['TZ']='America/Grand_Turk';
+$aTimeZones['America/Grenada']['TZ']='America/Grenada';
+$aTimeZones['America/Guadeloupe']['TZ']='America/Guadeloupe';
+$aTimeZones['America/Guatemala']['TZ']='America/Guatemala';
+$aTimeZones['America/Guayaquil']['TZ']='America/Guayaquil';
+$aTimeZones['America/Guyana']['TZ']='America/Guyana';
+$aTimeZones['America/Halifax']['TZ']='America/Halifax';
+$aTimeZones['America/Havana']['TZ']='America/Havana';
+$aTimeZones['America/Hermosillo']['TZ']='America/Hermosillo';
+$aTimeZones['America/Indiana/Indianapolis']['TZ']='America/Indiana/Indianapolis';
+$aTimeZones['America/Indiana/Knox']['TZ']='America/Indiana/Knox';
+$aTimeZones['America/Indiana/Marengo']['TZ']='America/Indiana/Marengo';
+$aTimeZones['America/Indiana/Vevay']['TZ']='America/Indiana/Vevay';
+$aTimeZones['America/Indianapolis']['TZ']='America/Indianapolis';
+$aTimeZones['America/Inuvik']['TZ']='America/Inuvik';
+$aTimeZones['America/Iqaluit']['TZ']='America/Iqaluit';
+$aTimeZones['America/Jamaica']['TZ']='America/Jamaica';
+$aTimeZones['America/Jujuy']['TZ']='America/Jujuy';
+$aTimeZones['America/Juneau']['TZ']='America/Juneau';
+$aTimeZones['America/Kentucky/Louisville']['TZ']='America/Kentucky/Louisville';
+$aTimeZones['America/Kentucky/Monticello']['TZ']='America/Kentucky/Monticello';
+$aTimeZones['America/Knox_IN']['TZ']='America/Knox_IN';
+$aTimeZones['America/La_Paz']['TZ']='America/La_Paz';
+$aTimeZones['America/Lima']['TZ']='America/Lima';
+$aTimeZones['America/Los_Angeles']['TZ']='America/Los_Angeles';
+$aTimeZones['America/Louisville']['TZ']='America/Louisville';
+$aTimeZones['America/Maceio']['TZ']='America/Maceio';
+$aTimeZones['America/Managua']['TZ']='America/Managua';
+$aTimeZones['America/Manaus']['TZ']='America/Manaus';
+$aTimeZones['America/Martinique']['TZ']='America/Martinique';
+$aTimeZones['America/Mazatlan']['TZ']='America/Mazatlan';
+$aTimeZones['America/Mendoza']['TZ']='America/Mendoza';
+$aTimeZones['America/Menominee']['TZ']='America/Menominee';
+$aTimeZones['America/Merida']['TZ']='America/Merida';
+$aTimeZones['America/Mexico_City']['TZ']='America/Mexico_City';
+$aTimeZones['America/Miquelon']['TZ']='America/Miquelon';
+$aTimeZones['America/Monterrey']['TZ']='America/Monterrey';
+$aTimeZones['America/Montevideo']['TZ']='America/Montevideo';
+$aTimeZones['America/Montreal']['TZ']='America/Montreal';
+$aTimeZones['America/Montserrat']['TZ']='America/Montserrat';
+$aTimeZones['America/Nassau']['TZ']='America/Nassau';
+$aTimeZones['America/New_York']['TZ']='America/New_York';
+$aTimeZones['America/Nipigon']['TZ']='America/Nipigon';
+$aTimeZones['America/Nome']['TZ']='America/Nome';
+$aTimeZones['America/Noronha']['TZ']='America/Noronha';
+$aTimeZones['America/North_Dakota/Center']['TZ']='America/North_Dakota/Center';
+$aTimeZones['America/Panama']['TZ']='America/Panama';
+$aTimeZones['America/Pangnirtung']['TZ']='America/Pangnirtung';
+$aTimeZones['America/Paramaribo']['TZ']='America/Paramaribo';
+$aTimeZones['America/Phoenix']['TZ']='America/Phoenix';
+$aTimeZones['America/Port-au-Prince']['TZ']='America/Port-au-Prince';
+$aTimeZones['America/Port_of_Spain']['TZ']='America/Port_of_Spain';
+$aTimeZones['America/Porto_Acre']['TZ']='America/Porto_Acre';
+$aTimeZones['America/Porto_Velho']['TZ']='America/Porto_Velho';
+$aTimeZones['America/Puerto_Rico']['TZ']='America/Puerto_Rico';
+$aTimeZones['America/Rainy_River']['TZ']='America/Rainy_River';
+$aTimeZones['America/Rankin_Inlet']['TZ']='America/Rankin_Inlet';
+$aTimeZones['America/Recife']['TZ']='America/Recife';
+$aTimeZones['America/Regina']['TZ']='America/Regina';
+$aTimeZones['America/Rio_Branco']['TZ']='America/Rio_Branco';
+$aTimeZones['America/Rosario']['TZ']='America/Rosario';
+$aTimeZones['America/Santiago']['TZ']='America/Santiago';
+$aTimeZones['America/Santo_Domingo']['TZ']='America/Santo_Domingo';
+$aTimeZones['America/Sao_Paulo']['TZ']='America/Sao_Paulo';
+$aTimeZones['America/Scoresbysund']['TZ']='America/Scoresbysund';
+$aTimeZones['America/Shiprock']['TZ']='America/Shiprock';
+$aTimeZones['America/St_Johns']['TZ']='America/St_Johns';
+$aTimeZones['America/St_Kitts']['TZ']='America/St_Kitts';
+$aTimeZones['America/St_Lucia']['TZ']='America/St_Lucia';
+$aTimeZones['America/St_Thomas']['TZ']='America/St_Thomas';
+$aTimeZones['America/St_Vincent']['TZ']='America/St_Vincent';
+$aTimeZones['America/Swift_Current']['TZ']='America/Swift_Current';
+$aTimeZones['America/Tegucigalpa']['TZ']='America/Tegucigalpa';
+$aTimeZones['America/Thule']['TZ']='America/Thule';
+$aTimeZones['America/Thunder_Bay']['TZ']='America/Thunder_Bay';
+$aTimeZones['America/Tijuana']['TZ']='America/Tijuana';
+$aTimeZones['America/Tortola']['TZ']='America/Tortola';
+$aTimeZones['America/Vancouver']['TZ']='America/Vancouver';
+$aTimeZones['America/Virgin']['TZ']='America/Virgin';
+$aTimeZones['America/Whitehorse']['TZ']='America/Whitehorse';
+$aTimeZones['America/Winnipeg']['TZ']='America/Winnipeg';
+$aTimeZones['America/Yakutat']['TZ']='America/Yakutat';
+$aTimeZones['America/Yellowknife']['TZ']='America/Yellowknife';
+$aTimeZones['Antarctica/Casey']['TZ']='Antarctica/Casey';
+$aTimeZones['Antarctica/Davis']['TZ']='Antarctica/Davis';
+$aTimeZones['Antarctica/DumontDUrville']['TZ']='Antarctica/DumontDUrville';
+$aTimeZones['Antarctica/Mawson']['TZ']='Antarctica/Mawson';
+$aTimeZones['Antarctica/McMurdo']['TZ']='Antarctica/McMurdo';
+$aTimeZones['Antarctica/Palmer']['TZ']='Antarctica/Palmer';
+$aTimeZones['Antarctica/South_Pole']['TZ']='Antarctica/South_Pole';
+$aTimeZones['Antarctica/Syowa']['TZ']='Antarctica/Syowa';
+$aTimeZones['Antarctica/Vostok']['TZ']='Antarctica/Vostok';
+$aTimeZones['Arctic/Longyearbyen']['TZ']='Arctic/Longyearbyen';
+$aTimeZones['Asia/Aden']['TZ']='Asia/Aden';
+$aTimeZones['Asia/Almaty']['TZ']='Asia/Almaty';
+$aTimeZones['Asia/Amman']['TZ']='Asia/Amman';
+$aTimeZones['Asia/Anadyr']['TZ']='Asia/Anadyr';
+$aTimeZones['Asia/Aqtau']['TZ']='Asia/Aqtau';
+$aTimeZones['Asia/Aqtobe']['TZ']='Asia/Aqtobe';
+$aTimeZones['Asia/Ashgabat']['TZ']='Asia/Ashgabat';
+$aTimeZones['Asia/Ashkhabad']['TZ']='Asia/Ashkhabad';
+$aTimeZones['Asia/Baghdad']['TZ']='Asia/Baghdad';
+$aTimeZones['Asia/Bahrain']['TZ']='Asia/Bahrain';
+$aTimeZones['Asia/Baku']['TZ']='Asia/Baku';
+$aTimeZones['Asia/Bangkok']['TZ']='Asia/Bangkok';
+$aTimeZones['Asia/Beirut']['TZ']='Asia/Beirut';
+$aTimeZones['Asia/Bishkek']['TZ']='Asia/Bishkek';
+$aTimeZones['Asia/Brunei']['TZ']='Asia/Brunei';
+$aTimeZones['Asia/Calcutta']['TZ']='Asia/Calcutta';
+$aTimeZones['Asia/Choibalsan']['TZ']='Asia/Choibalsan';
+$aTimeZones['Asia/Chongqing']['TZ']='Asia/Chongqing';
+$aTimeZones['Asia/Chungking']['TZ']='Asia/Chungking';
+$aTimeZones['Asia/Colombo']['TZ']='Asia/Colombo';
+$aTimeZones['Asia/Dacca']['TZ']='Asia/Dacca';
+$aTimeZones['Asia/Damascus']['TZ']='Asia/Damascus';
+$aTimeZones['Asia/Dhaka']['TZ']='Asia/Dhaka';
+$aTimeZones['Asia/Dili']['TZ']='Asia/Dili';
+$aTimeZones['Asia/Dubai']['TZ']='Asia/Dubai';
+$aTimeZones['Asia/Dushanbe']['TZ']='Asia/Dushanbe';
+$aTimeZones['Asia/Gaza']['TZ']='Asia/Gaza';
+$aTimeZones['Asia/Harbin']['TZ']='Asia/Harbin';
+$aTimeZones['Asia/Hong_Kong']['TZ']='Asia/Hong_Kong';
+$aTimeZones['Asia/Hovd']['TZ']='Asia/Hovd';
+$aTimeZones['Asia/Irkutsk']['TZ']='Asia/Irkutsk';
+$aTimeZones['Asia/Ishigaki']['TZ']='Asia/Ishigaki';
+$aTimeZones['Asia/Istanbul']['TZ']='Asia/Istanbul';
+$aTimeZones['Asia/Jakarta']['TZ']='Asia/Jakarta';
+$aTimeZones['Asia/Jayapura']['TZ']='Asia/Jayapura';
+$aTimeZones['Asia/Jerusalem']['TZ']='Asia/Jerusalem';
+$aTimeZones['Asia/Kabul']['TZ']='Asia/Kabul';
+$aTimeZones['Asia/Kamchatka']['TZ']='Asia/Kamchatka';
+$aTimeZones['Asia/Karachi']['TZ']='Asia/Karachi';
+$aTimeZones['Asia/Kashgar']['TZ']='Asia/Kashgar';
+$aTimeZones['Asia/Katmandu']['TZ']='Asia/Katmandu';
+$aTimeZones['Asia/Krasnoyarsk']['TZ']='Asia/Krasnoyarsk';
+$aTimeZones['Asia/Kuala_Lumpur']['TZ']='Asia/Kuala_Lumpur';
+$aTimeZones['Asia/Kuching']['TZ']='Asia/Kuching';
+$aTimeZones['Asia/Kuwait']['TZ']='Asia/Kuwait';
+$aTimeZones['Asia/Macao']['TZ']='Asia/Macao';
+$aTimeZones['Asia/Macau']['TZ']='Asia/Macau';
+$aTimeZones['Asia/Magadan']['TZ']='Asia/Magadan';
+$aTimeZones['Asia/Manila']['TZ']='Asia/Manila';
+$aTimeZones['Asia/Muscat']['TZ']='Asia/Muscat';
+$aTimeZones['Asia/Nicosia']['TZ']='Asia/Nicosia';
+$aTimeZones['Asia/Novosibirsk']['TZ']='Asia/Novosibirsk';
+$aTimeZones['Asia/Omsk']['TZ']='Asia/Omsk';
+$aTimeZones['Asia/Oral']['TZ']='Asia/Oral';
+$aTimeZones['Asia/Phnom_Penh']['TZ']='Asia/Phnom_Penh';
+$aTimeZones['Asia/Pontianak']['TZ']='Asia/Pontianak';
+$aTimeZones['Asia/Pyongyang']['TZ']='Asia/Pyongyang';
+$aTimeZones['Asia/Qatar']['TZ']='Asia/Qatar';
+$aTimeZones['Asia/Qyzylorda']['TZ']='Asia/Qyzylorda';
+$aTimeZones['Asia/Rangoon']['TZ']='Asia/Rangoon';
+$aTimeZones['Asia/Riyadh']['TZ']='Asia/Riyadh';
+$aTimeZones['Asia/Riyadh87']['TZ']='Asia/Riyadh87';
+$aTimeZones['Asia/Riyadh88']['TZ']='Asia/Riyadh88';
+$aTimeZones['Asia/Riyadh89']['TZ']='Asia/Riyadh89';
+$aTimeZones['Asia/Saigon']['TZ']='Asia/Saigon';
+$aTimeZones['Asia/Sakhalin']['TZ']='Asia/Sakhalin';
+$aTimeZones['Asia/Samarkand']['TZ']='Asia/Samarkand';
+$aTimeZones['Asia/Seoul']['TZ']='Asia/Seoul';
+$aTimeZones['Asia/Shanghai']['TZ']='Asia/Shanghai';
+$aTimeZones['Asia/Singapore']['TZ']='Asia/Singapore';
+$aTimeZones['Asia/Taipei']['TZ']='Asia/Taipei';
+$aTimeZones['Asia/Tashkent']['TZ']='Asia/Tashkent';
+$aTimeZones['Asia/Tbilisi']['TZ']='Asia/Tbilisi';
+$aTimeZones['Asia/Tehran']['TZ']='Asia/Tehran';
+$aTimeZones['Asia/Tel_Aviv']['TZ']='Asia/Tel_Aviv';
+$aTimeZones['Asia/Thimbu']['TZ']='Asia/Thimbu';
+$aTimeZones['Asia/Thimphu']['TZ']='Asia/Thimphu';
+$aTimeZones['Asia/Tokyo']['TZ']='Asia/Tokyo';
+$aTimeZones['Asia/Ujung_Pandang']['TZ']='Asia/Ujung_Pandang';
+$aTimeZones['Asia/Ulaanbaatar']['TZ']='Asia/Ulaanbaatar';
+$aTimeZones['Asia/Ulan_Bator']['TZ']='Asia/Ulan_Bator';
+$aTimeZones['Asia/Urumqi']['TZ']='Asia/Urumqi';
+$aTimeZones['Asia/Vientiane']['TZ']='Asia/Vientiane';
+$aTimeZones['Asia/Vladivostok']['TZ']='Asia/Vladivostok';
+$aTimeZones['Asia/Yakutsk']['TZ']='Asia/Yakutsk';
+$aTimeZones['Asia/Yekaterinburg']['TZ']='Asia/Yekaterinburg';
+$aTimeZones['Asia/Yerevan']['TZ']='Asia/Yerevan';
+$aTimeZones['Atlantic/Azores']['TZ']='Atlantic/Azores';
+$aTimeZones['Atlantic/Bermuda']['TZ']='Atlantic/Bermuda';
+$aTimeZones['Atlantic/Canary']['TZ']='Atlantic/Canary';
+$aTimeZones['Atlantic/Cape_Verde']['TZ']='Atlantic/Cape_Verde';
+$aTimeZones['Atlantic/Faeroe']['TZ']='Atlantic/Faeroe';
+$aTimeZones['Atlantic/Jan_Mayen']['TZ']='Atlantic/Jan_Mayen';
+$aTimeZones['Atlantic/Madeira']['TZ']='Atlantic/Madeira';
+$aTimeZones['Atlantic/Reykjavik']['TZ']='Atlantic/Reykjavik';
+$aTimeZones['Atlantic/South_Georgia']['TZ']='Atlantic/South_Georgia';
+$aTimeZones['Atlantic/St_Helena']['TZ']='Atlantic/St_Helena';
+$aTimeZones['Atlantic/Stanley']['TZ']='Atlantic/Stanley';
+$aTimeZones['Australia/ACT']['TZ']='Australia/ACT';
+$aTimeZones['Australia/Adelaide']['TZ']='Australia/Adelaide';
+$aTimeZones['Australia/Brisbane']['TZ']='Australia/Brisbane';
+$aTimeZones['Australia/Broken_Hill']['TZ']='Australia/Broken_Hill';
+$aTimeZones['Australia/Canberra']['TZ']='Australia/Canberra';
+$aTimeZones['Australia/Darwin']['TZ']='Australia/Darwin';
+$aTimeZones['Australia/Hobart']['TZ']='Australia/Hobart';
+$aTimeZones['Australia/LHI']['TZ']='Australia/LHI';
+$aTimeZones['Australia/Lindeman']['TZ']='Australia/Lindeman';
+$aTimeZones['Australia/Lord_Howe']['TZ']='Australia/Lord_Howe';
+$aTimeZones['Australia/Melbourne']['TZ']='Australia/Melbourne';
+$aTimeZones['Australia/NSW']['TZ']='Australia/NSW';
+$aTimeZones['Australia/North']['TZ']='Australia/North';
+$aTimeZones['Australia/Perth']['TZ']='Australia/Perth';
+$aTimeZones['Australia/Queensland']['TZ']='Australia/Queensland';
+$aTimeZones['Australia/South']['TZ']='Australia/South';
+$aTimeZones['Australia/Sydney']['TZ']='Australia/Sydney';
+$aTimeZones['Australia/Tasmania']['TZ']='Australia/Tasmania';
+$aTimeZones['Australia/Victoria']['TZ']='Australia/Victoria';
+$aTimeZones['Australia/West']['TZ']='Australia/West';
+$aTimeZones['Australia/Yancowinna']['TZ']='Australia/Yancowinna';
+$aTimeZones['Brazil/Acre']['TZ']='Brazil/Acre';
+$aTimeZones['Brazil/DeNoronha']['TZ']='Brazil/DeNoronha';
+$aTimeZones['Brazil/East']['TZ']='Brazil/East';
+$aTimeZones['Brazil/West']['TZ']='Brazil/West';
+$aTimeZones['CET']['TZ']='CET';
+$aTimeZones['CST6CDT']['TZ']='CST6CDT';
+$aTimeZones['Canada/Atlantic']['TZ']='Canada/Atlantic';
+$aTimeZones['Canada/Central']['TZ']='Canada/Central';
+$aTimeZones['Canada/East-Saskatchewan']['TZ']='Canada/East-Saskatchewan';
+$aTimeZones['Canada/Eastern']['TZ']='Canada/Eastern';
+$aTimeZones['Canada/Mountain']['TZ']='Canada/Mountain';
+$aTimeZones['Canada/Newfoundland']['TZ']='Canada/Newfoundland';
+$aTimeZones['Canada/Pacific']['TZ']='Canada/Pacific';
+$aTimeZones['Canada/Saskatchewan']['TZ']='Canada/Saskatchewan';
+$aTimeZones['Canada/Yukon']['TZ']='Canada/Yukon';
+$aTimeZones['Chile/Continental']['TZ']='Chile/Continental';
+$aTimeZones['Chile/EasterIsland']['TZ']='Chile/EasterIsland';
+$aTimeZones['China/Beijing']['TZ']='China/Beijing';
+$aTimeZones['China/Shanghai']['TZ']='China/Shanghai';
+$aTimeZones['Cuba']['TZ']='Cuba';
+$aTimeZones['EET']['TZ']='EET';
+$aTimeZones['EST']['TZ']='EST';
+$aTimeZones['EST5EDT']['TZ']='EST5EDT';
+$aTimeZones['Egypt']['TZ']='Egypt';
+$aTimeZones['Eire']['TZ']='Eire';
+$aTimeZones['Etc/GMT']['TZ']='Etc/GMT';
+$aTimeZones['Etc/GMT+0']['TZ']='Etc/GMT+0';
+$aTimeZones['Etc/GMT+1']['TZ']='Etc/GMT+1';
+$aTimeZones['Etc/GMT+10']['TZ']='Etc/GMT+10';
+$aTimeZones['Etc/GMT+11']['TZ']='Etc/GMT+11';
+$aTimeZones['Etc/GMT+12']['TZ']='Etc/GMT+12';
+$aTimeZones['Etc/GMT+2']['TZ']='Etc/GMT+2';
+$aTimeZones['Etc/GMT+3']['TZ']='Etc/GMT+3';
+$aTimeZones['Etc/GMT+4']['TZ']='Etc/GMT+4';
+$aTimeZones['Etc/GMT+5']['TZ']='Etc/GMT+5';
+$aTimeZones['Etc/GMT+6']['TZ']='Etc/GMT+6';
+$aTimeZones['Etc/GMT+7']['TZ']='Etc/GMT+7';
+$aTimeZones['Etc/GMT+8']['TZ']='Etc/GMT+8';
+$aTimeZones['Etc/GMT+9']['TZ']='Etc/GMT+9';
+$aTimeZones['Etc/GMT-0']['TZ']='Etc/GMT-0';
+$aTimeZones['Etc/GMT-1']['TZ']='Etc/GMT-1';
+$aTimeZones['Etc/GMT-10']['TZ']='Etc/GMT-10';
+$aTimeZones['Etc/GMT-11']['TZ']='Etc/GMT-11';
+$aTimeZones['Etc/GMT-12']['TZ']='Etc/GMT-12';
+$aTimeZones['Etc/GMT-13']['TZ']='Etc/GMT-13';
+$aTimeZones['Etc/GMT-14']['TZ']='Etc/GMT-14';
+$aTimeZones['Etc/GMT-2']['TZ']='Etc/GMT-2';
+$aTimeZones['Etc/GMT-3']['TZ']='Etc/GMT-3';
+$aTimeZones['Etc/GMT-4']['TZ']='Etc/GMT-4';
+$aTimeZones['Etc/GMT-5']['TZ']='Etc/GMT-5';
+$aTimeZones['Etc/GMT-6']['TZ']='Etc/GMT-6';
+$aTimeZones['Etc/GMT-7']['TZ']='Etc/GMT-7';
+$aTimeZones['Etc/GMT-8']['TZ']='Etc/GMT-8';
+$aTimeZones['Etc/GMT-9']['TZ']='Etc/GMT-9';
+$aTimeZones['Etc/GMT0']['TZ']='Etc/GMT0';
+$aTimeZones['Etc/Greenwich']['TZ']='Etc/Greenwich';
+$aTimeZones['Etc/UCT']['TZ']='Etc/UCT';
+$aTimeZones['Etc/UTC']['TZ']='Etc/UTC';
+$aTimeZones['Etc/Universal']['TZ']='Etc/Universal';
+$aTimeZones['Etc/Zulu']['TZ']='Etc/Zulu';
+$aTimeZones['Europe/Amsterdam']['TZ']='Europe/Amsterdam';
+$aTimeZones['Europe/Andorra']['TZ']='Europe/Andorra';
+$aTimeZones['Europe/Athens']['TZ']='Europe/Athens';
+$aTimeZones['Europe/Belfast']['TZ']='Europe/Belfast';
+$aTimeZones['Europe/Belgrade']['TZ']='Europe/Belgrade';
+$aTimeZones['Europe/Berlin']['TZ']='Europe/Berlin';
+$aTimeZones['Europe/Bratislava']['TZ']='Europe/Bratislava';
+$aTimeZones['Europe/Brussels']['TZ']='Europe/Brussels';
+$aTimeZones['Europe/Bucharest']['TZ']='Europe/Bucharest';
+$aTimeZones['Europe/Budapest']['TZ']='Europe/Budapest';
+$aTimeZones['Europe/Chisinau']['TZ']='Europe/Chisinau';
+$aTimeZones['Europe/Copenhagen']['TZ']='Europe/Copenhagen';
+$aTimeZones['Europe/Dublin']['TZ']='Europe/Dublin';
+$aTimeZones['Europe/Gibraltar']['TZ']='Europe/Gibraltar';
+$aTimeZones['Europe/Helsinki']['TZ']='Europe/Helsinki';
+$aTimeZones['Europe/Istanbul']['TZ']='Europe/Istanbul';
+$aTimeZones['Europe/Kaliningrad']['TZ']='Europe/Kaliningrad';
+$aTimeZones['Europe/Kiev']['TZ']='Europe/Kiev';
+$aTimeZones['Europe/Lisbon']['TZ']='Europe/Lisbon';
+$aTimeZones['Europe/Ljubljana']['TZ']='Europe/Ljubljana';
+$aTimeZones['Europe/London']['TZ']='Europe/London';
+$aTimeZones['Europe/Luxembourg']['TZ']='Europe/Luxembourg';
+$aTimeZones['Europe/Madrid']['TZ']='Europe/Madrid';
+$aTimeZones['Europe/Malta']['TZ']='Europe/Malta';
+$aTimeZones['Europe/Minsk']['TZ']='Europe/Minsk';
+$aTimeZones['Europe/Monaco']['TZ']='Europe/Monaco';
+$aTimeZones['Europe/Moscow']['TZ']='Europe/Moscow';
+$aTimeZones['Europe/Nicosia']['TZ']='Europe/Nicosia';
+$aTimeZones['Europe/Oslo']['TZ']='Europe/Oslo';
+$aTimeZones['Europe/Paris']['TZ']='Europe/Paris';
+$aTimeZones['Europe/Prague']['TZ']='Europe/Prague';
+$aTimeZones['Europe/Riga']['TZ']='Europe/Riga';
+$aTimeZones['Europe/Rome']['TZ']='Europe/Rome';
+$aTimeZones['Europe/Samara']['TZ']='Europe/Samara';
+$aTimeZones['Europe/San_Marino']['TZ']='Europe/San_Marino';
+$aTimeZones['Europe/Sarajevo']['TZ']='Europe/Sarajevo';
+$aTimeZones['Europe/Simferopol']['TZ']='Europe/Simferopol';
+$aTimeZones['Europe/Skopje']['TZ']='Europe/Skopje';
+$aTimeZones['Europe/Sofia']['TZ']='Europe/Sofia';
+$aTimeZones['Europe/Stockholm']['TZ']='Europe/Stockholm';
+$aTimeZones['Europe/Tallinn']['TZ']='Europe/Tallinn';
+$aTimeZones['Europe/Tirane']['TZ']='Europe/Tirane';
+$aTimeZones['Europe/Tiraspol']['TZ']='Europe/Tiraspol';
+$aTimeZones['Europe/Uzhgorod']['TZ']='Europe/Uzhgorod';
+$aTimeZones['Europe/Vaduz']['TZ']='Europe/Vaduz';
+$aTimeZones['Europe/Vatican']['TZ']='Europe/Vatican';
+$aTimeZones['Europe/Vienna']['TZ']='Europe/Vienna';
+$aTimeZones['Europe/Vilnius']['TZ']='Europe/Vilnius';
+$aTimeZones['Europe/Warsaw']['TZ']='Europe/Warsaw';
+$aTimeZones['Europe/Zagreb']['TZ']='Europe/Zagreb';
+$aTimeZones['Europe/Zaporozhye']['TZ']='Europe/Zaporozhye';
+$aTimeZones['Europe/Zurich']['TZ']='Europe/Zurich';
+$aTimeZones['Factory']['TZ']='Factory';
+$aTimeZones['GB']['TZ']='GB';
+$aTimeZones['GB-Eire']['TZ']='GB-Eire';
+$aTimeZones['GMT']['TZ']='GMT';
+$aTimeZones['GMT+0']['TZ']='GMT+0';
+$aTimeZones['GMT-0']['TZ']='GMT-0';
+$aTimeZones['GMT0']['TZ']='GMT0';
+$aTimeZones['Greenwich']['TZ']='Greenwich';
+$aTimeZones['HST']['TZ']='HST';
+$aTimeZones['Hongkong']['TZ']='Hongkong';
+$aTimeZones['Iceland']['TZ']='Iceland';
+$aTimeZones['Indian/Antananarivo']['TZ']='Indian/Antananarivo';
+$aTimeZones['Indian/Chagos']['TZ']='Indian/Chagos';
+$aTimeZones['Indian/Christmas']['TZ']='Indian/Christmas';
+$aTimeZones['Indian/Cocos']['TZ']='Indian/Cocos';
+$aTimeZones['Indian/Comoro']['TZ']='Indian/Comoro';
+$aTimeZones['Indian/Kerguelen']['TZ']='Indian/Kerguelen';
+$aTimeZones['Indian/Mahe']['TZ']='Indian/Mahe';
+$aTimeZones['Indian/Maldives']['TZ']='Indian/Maldives';
+$aTimeZones['Indian/Mauritius']['TZ']='Indian/Mauritius';
+$aTimeZones['Indian/Mayotte']['TZ']='Indian/Mayotte';
+$aTimeZones['Indian/Reunion']['TZ']='Indian/Reunion';
+$aTimeZones['Iran']['TZ']='Iran';
+$aTimeZones['Israel']['TZ']='Israel';
+$aTimeZones['Jamaica']['TZ']='Jamaica';
+$aTimeZones['Japan']['TZ']='Japan';
+$aTimeZones['Kwajalein']['TZ']='Kwajalein';
+$aTimeZones['Libya']['TZ']='Libya';
+$aTimeZones['MET']['TZ']='MET';
+$aTimeZones['MST']['TZ']='MST';
+$aTimeZones['MST7MDT']['TZ']='MST7MDT';
+$aTimeZones['Mexico/BajaNorte']['TZ']='Mexico/BajaNorte';
+$aTimeZones['Mexico/BajaSur']['TZ']='Mexico/BajaSur';
+$aTimeZones['Mexico/General']['TZ']='Mexico/General';
+$aTimeZones['Mideast/Riyadh87']['TZ']='Mideast/Riyadh87';
+$aTimeZones['Mideast/Riyadh88']['TZ']='Mideast/Riyadh88';
+$aTimeZones['Mideast/Riyadh89']['TZ']='Mideast/Riyadh89';
+$aTimeZones['NZ']['TZ']='NZ';
+$aTimeZones['NZ-CHAT']['TZ']='NZ-CHAT';
+$aTimeZones['Navajo']['TZ']='Navajo';
+$aTimeZones['PRC']['TZ']='PRC';
+$aTimeZones['PST8PDT']['TZ']='PST8PDT';
+$aTimeZones['Pacific/Apia']['TZ']='Pacific/Apia';
+$aTimeZones['Pacific/Auckland']['TZ']='Pacific/Auckland';
+$aTimeZones['Pacific/Chatham']['TZ']='Pacific/Chatham';
+$aTimeZones['Pacific/Easter']['TZ']='Pacific/Easter';
+$aTimeZones['Pacific/Efate']['TZ']='Pacific/Efate';
+$aTimeZones['Pacific/Enderbury']['TZ']='Pacific/Enderbury';
+$aTimeZones['Pacific/Fakaofo']['TZ']='Pacific/Fakaofo';
+$aTimeZones['Pacific/Fiji']['TZ']='Pacific/Fiji';
+$aTimeZones['Pacific/Funafuti']['TZ']='Pacific/Funafuti';
+$aTimeZones['Pacific/Galapagos']['TZ']='Pacific/Galapagos';
+$aTimeZones['Pacific/Gambier']['TZ']='Pacific/Gambier';
+$aTimeZones['Pacific/Guadalcanal']['TZ']='Pacific/Guadalcanal';
+$aTimeZones['Pacific/Guam']['TZ']='Pacific/Guam';
+$aTimeZones['Pacific/Honolulu']['TZ']='Pacific/Honolulu';
+$aTimeZones['Pacific/Johnston']['TZ']='Pacific/Johnston';
+$aTimeZones['Pacific/Kiritimati']['TZ']='Pacific/Kiritimati';
+$aTimeZones['Pacific/Kosrae']['TZ']='Pacific/Kosrae';
+$aTimeZones['Pacific/Kwajalein']['TZ']='Pacific/Kwajalein';
+$aTimeZones['Pacific/Majuro']['TZ']='Pacific/Majuro';
+$aTimeZones['Pacific/Marquesas']['TZ']='Pacific/Marquesas';
+$aTimeZones['Pacific/Midway']['TZ']='Pacific/Midway';
+$aTimeZones['Pacific/Nauru']['TZ']='Pacific/Nauru';
+$aTimeZones['Pacific/Niue']['TZ']='Pacific/Niue';
+$aTimeZones['Pacific/Norfolk']['TZ']='Pacific/Norfolk';
+$aTimeZones['Pacific/Noumea']['TZ']='Pacific/Noumea';
+$aTimeZones['Pacific/Pago_Pago']['TZ']='Pacific/Pago_Pago';
+$aTimeZones['Pacific/Palau']['TZ']='Pacific/Palau';
+$aTimeZones['Pacific/Pitcairn']['TZ']='Pacific/Pitcairn';
+$aTimeZones['Pacific/Ponape']['TZ']='Pacific/Ponape';
+$aTimeZones['Pacific/Port_Moresby']['TZ']='Pacific/Port_Moresby';
+$aTimeZones['Pacific/Rarotonga']['TZ']='Pacific/Rarotonga';
+$aTimeZones['Pacific/Saipan']['TZ']='Pacific/Saipan';
+$aTimeZones['Pacific/Samoa']['TZ']='Pacific/Samoa';
+$aTimeZones['Pacific/Tahiti']['TZ']='Pacific/Tahiti';
+$aTimeZones['Pacific/Tarawa']['TZ']='Pacific/Tarawa';
+$aTimeZones['Pacific/Tongatapu']['TZ']='Pacific/Tongatapu';
+$aTimeZones['Pacific/Truk']['TZ']='Pacific/Truk';
+$aTimeZones['Pacific/Wake']['TZ']='Pacific/Wake';
+$aTimeZones['Pacific/Wallis']['TZ']='Pacific/Wallis';
+$aTimeZones['Pacific/Yap']['TZ']='Pacific/Yap';
+$aTimeZones['Poland']['TZ']='Poland';
+$aTimeZones['Portugal']['TZ']='Portugal';
+$aTimeZones['ROC']['TZ']='ROC';
+$aTimeZones['ROK']['TZ']='ROK';
+$aTimeZones['Singapore']['TZ']='Singapore';
+$aTimeZones['SystemV/AST4']['TZ']='SystemV/AST4';
+$aTimeZones['SystemV/AST4ADT']['TZ']='SystemV/AST4ADT';
+$aTimeZones['SystemV/CST6']['TZ']='SystemV/CST6';
+$aTimeZones['SystemV/CST6CDT']['TZ']='SystemV/CST6CDT';
+$aTimeZones['SystemV/EST5']['TZ']='SystemV/EST5';
+$aTimeZones['SystemV/EST5EDT']['TZ']='SystemV/EST5EDT';
+$aTimeZones['SystemV/HST10']['TZ']='SystemV/HST10';
+$aTimeZones['SystemV/MST7']['TZ']='SystemV/MST7';
+$aTimeZones['SystemV/MST7MDT']['TZ']='SystemV/MST7MDT';
+$aTimeZones['SystemV/PST8']['TZ']='SystemV/PST8';
+$aTimeZones['SystemV/PST8PDT']['TZ']='SystemV/PST8PDT';
+$aTimeZones['SystemV/YST9']['TZ']='SystemV/YST9';
+$aTimeZones['SystemV/YST9YDT']['TZ']='SystemV/YST9YDT';
+$aTimeZones['Turkey']['TZ']='Turkey';
+$aTimeZones['UCT']['TZ']='UCT';
+$aTimeZones['US/Alaska']['TZ']='US/Alaska';
+$aTimeZones['US/Aleutian']['TZ']='US/Aleutian';
+$aTimeZones['US/Arizona']['TZ']='US/Arizona';
+$aTimeZones['US/Central']['TZ']='US/Central';
+$aTimeZones['US/East-Indiana']['TZ']='US/East-Indiana';
+$aTimeZones['US/Eastern']['TZ']='US/Eastern';
+$aTimeZones['US/Hawaii']['TZ']='US/Hawaii';
+$aTimeZones['US/Indiana-Starke']['TZ']='US/Indiana-Starke';
+$aTimeZones['US/Michigan']['TZ']='US/Michigan';
+$aTimeZones['US/Mountain']['TZ']='US/Mountain';
+$aTimeZones['US/Pacific']['TZ']='US/Pacific';
+$aTimeZones['US/Samoa']['TZ']='US/Samoa';
+$aTimeZones['UTC']['TZ']='UTC';
+$aTimeZones['Universal']['TZ']='Universal';
+$aTimeZones['W-SU']['TZ']='W-SU';
+$aTimeZones['WET']['TZ']='WET';
+$aTimeZones['Zulu']['TZ']='Zulu';
+?>
\ No newline at end of file
index 37dcaa7df5bcf49530f130f6ac5f7c53fc7ee4df..738e2d3f51e10fbf4598551bbdbcbb07bf8014b7 100644 (file)
@@ -102,7 +102,21 @@ $tzChangeAllowed = (!ini_get('safe_mode')) ||
 
 if ( $timeZone != SMPREF_NONE && ($timeZone != "")
     && $tzChangeAllowed ) {
-    putenv("TZ=".$timeZone);
+
+    // get time zone key, if strict or custom strict timezones are used
+    if (isset($time_zone_type) && 
+        ($time_zone_type == 1 || $time_zone_type == 3)) {
+        /* load time zone functions */
+        require_once(SM_PATH . 'include/timezones.php');
+        $realTimeZone = sq_get_tz_key($timeZone);
+    } else {
+        $realTimeZone = $timeZone;
+    }
+
+    // set time zone
+    if ($realTimeZone) {
+        putenv("TZ=".$realTimeZone);
+    }
 }
 
 ?>
\ No newline at end of file