فهرست منبع

modified time zone support. It works the same way as timezones.cfg and extra
configuration option is still needed.

tokul 20 سال پیش
والد
کامیت
2b46d810ed
7فایلهای تغییر یافته به همراه2210 افزوده شده و 12 حذف شده
  1. 37 11
      include/options/personal.php
  2. 86 0
      include/timezones.php
  3. 215 0
      include/timezones/check.php
  4. 16 0
      include/timezones/index.php
  5. 1272 0
      include/timezones/standard.php
  6. 569 0
      include/timezones/standard_orig.php
  7. 15 1
      include/validate.php

+ 37 - 11
include/options/personal.php

@@ -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();

+ 86 - 0
include/timezones.php

@@ -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;
+    }
+}
+?>

+ 215 - 0
include/timezones/check.php

@@ -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";
+?>

+ 16 - 0
include/timezones/index.php

@@ -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");
+?>

+ 1272 - 0
include/timezones/standard.php

@@ -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';
+
+?>

+ 569 - 0
include/timezones/standard_orig.php

@@ -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';
+?>

+ 15 - 1
include/validate.php

@@ -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);
+    }
 }
 
 ?>