summaryrefslogtreecommitdiff
path: root/js/dojo-1.7.2/dojox/date
diff options
context:
space:
mode:
Diffstat (limited to 'js/dojo-1.7.2/dojox/date')
-rw-r--r--js/dojo-1.7.2/dojox/date/README48
-rw-r--r--js/dojo-1.7.2/dojox/date/buddhist.js241
-rw-r--r--js/dojo-1.7.2/dojox/date/buddhist/Date.js289
-rw-r--r--js/dojo-1.7.2/dojox/date/buddhist/locale.js408
-rw-r--r--js/dojo-1.7.2/dojox/date/hebrew.js250
-rw-r--r--js/dojo-1.7.2/dojox/date/hebrew/Date.js721
-rw-r--r--js/dojo-1.7.2/dojox/date/hebrew/locale.js511
-rw-r--r--js/dojo-1.7.2/dojox/date/hebrew/numerals.js141
-rw-r--r--js/dojo-1.7.2/dojox/date/islamic.js250
-rw-r--r--js/dojo-1.7.2/dojox/date/islamic/Date.js425
-rw-r--r--js/dojo-1.7.2/dojox/date/islamic/locale.js417
-rw-r--r--js/dojo-1.7.2/dojox/date/php.js310
-rw-r--r--js/dojo-1.7.2/dojox/date/posix.js291
-rw-r--r--js/dojo-1.7.2/dojox/date/relative.js92
-rw-r--r--js/dojo-1.7.2/dojox/date/timezone.js720
-rw-r--r--js/dojo-1.7.2/dojox/date/zoneinfo/LICENSE10
-rw-r--r--js/dojo-1.7.2/dojox/date/zoneinfo/africa310
-rw-r--r--js/dojo-1.7.2/dojox/date/zoneinfo/antarctica68
-rw-r--r--js/dojo-1.7.2/dojox/date/zoneinfo/asia720
-rw-r--r--js/dojo-1.7.2/dojox/date/zoneinfo/australasia299
-rw-r--r--js/dojo-1.7.2/dojox/date/zoneinfo/backward108
-rw-r--r--js/dojo-1.7.2/dojox/date/zoneinfo/etcetera36
-rw-r--r--js/dojo-1.7.2/dojox/date/zoneinfo/europe1045
-rw-r--r--js/dojo-1.7.2/dojox/date/zoneinfo/northamerica895
-rw-r--r--js/dojo-1.7.2/dojox/date/zoneinfo/pacificnew1
-rw-r--r--js/dojo-1.7.2/dojox/date/zoneinfo/southamerica501
26 files changed, 9107 insertions, 0 deletions
diff --git a/js/dojo-1.7.2/dojox/date/README b/js/dojo-1.7.2/dojox/date/README
new file mode 100644
index 0000000..401e6c1
--- /dev/null
+++ b/js/dojo-1.7.2/dojox/date/README
@@ -0,0 +1,48 @@
+-------------------------------------------------------------------------------
+DojoX Date
+-------------------------------------------------------------------------------
+Version 0.9
+Release date: 5/17/2007
+-------------------------------------------------------------------------------
+Project state:
+varies
+
+Buddhist, Hebrew, Islamic calendars: stable
+posix, php: beta
+timezone: experimental
+
+-------------------------------------------------------------------------------
+Credits
+ Paul Sowden (dojox.date.posix)
+ Neil Roberts (dojox.date.php)
+ Hossam Aldin Katory (dojox.date.islamic, dojox.date.hebrew)
+ Helena Halperin, Moshe Wajnberg, Tomer Mahlin (dojox.date.hebrew)
+ Nathan Toone (dojox.date.relative, dojox.date.tzdate, dojox.date.timezone)
+-------------------------------------------------------------------------------
+Project description
+
+Placeholder for any kind of date operations, including formatters that are
+common to other languages (posix and php).
+
+-------------------------------------------------------------------------------
+Dependencies:
+
+Depends only on the Dojo Core.
+-------------------------------------------------------------------------------
+Documentation
+
+See the API documentation for details.
+-------------------------------------------------------------------------------
+Installation instructions
+
+Grab the following from the Dojo SVN Repository:
+http://svn.dojotoolkit.org/var/src/dojo/dojox/trunk/date/*
+
+Install into the following directory structure:
+/dojox/date/
+
+...which should be at the same level as your Dojo checkout.
+
+To use the non-Gregorian calendars, you must do a complete build of dojo.cldr.
+See util/buildscripts/cldr/README for details.
+-------------------------------------------------------------------------------
diff --git a/js/dojo-1.7.2/dojox/date/buddhist.js b/js/dojo-1.7.2/dojox/date/buddhist.js
new file mode 100644
index 0000000..866c2c1
--- /dev/null
+++ b/js/dojo-1.7.2/dojox/date/buddhist.js
@@ -0,0 +1,241 @@
+//>>built
+define("dojox/date/buddhist", ["dojo/_base/kernel", "dojo/date", "./buddhist/Date"], function(dojo, dd, buddhistDate){
+ dojo.getObject("date.buddhist", true, dojox);
+ dojo.experimental("dojox.date.buddhist");
+
+// Utility methods to do arithmetic calculations with buddhist.Dates
+
+dojox.date.buddhist.getDaysInMonth = function(/*buddhist.Date*/dateObject){
+ return dd.getDaysInMonth(dateObject.toGregorian());
+};
+
+dojox.date.buddhist.isLeapYear = function(/*buddhist.Date*/dateObject){
+ return dd.isLeapYear(dateObject.toGregorian());
+};
+
+//FIXME: reduce compare, add, diff also
+dojox.date.buddhist.compare = function(/*buddhist.Date*/date1, /*buddhist.Date*/date2, /*String?*/portion){
+ // summary:
+ // Compare two buddhist date objects by date, time, or both.
+ return dd.compare(date1,date2, portion); // int
+};
+
+
+dojox.date.buddhist.add = function(/*dojox.date.buddhist.Date*/date, /*String*/interval, /*int*/amount){
+ // based on and similar to dojo.date.add
+ // summary:
+ // Add to a Date in intervals of different size, from milliseconds to years
+ // date: buddhist.Date
+ // Date object to start with
+ // interval:
+ // A string representing the interval. One of the following:
+ // "year", "month", "day", "hour", "minute", "second",
+ // "millisecond", "week", "weekday"
+ // amount:
+ // How much to add to the date.
+
+ var newBuddDate = new buddhistDate(date);
+
+ switch(interval){
+ case "day":
+ newBuddDate.setDate(date.getDate(true) + amount);
+ break;
+ case "weekday":
+ var days, weeks;
+ var mod = amount % 5;
+ if(!mod){
+ days = (amount > 0) ? 5 : -5;
+ weeks = (amount > 0) ? ((amount-5)/5) : ((amount+5)/5);
+ }else{
+ days = mod;
+ weeks = parseInt(amount/5);
+ }
+ // Get weekday value for orig date param
+ var strt = date.getDay();
+ // Orig date is Sat / positive incrementer
+ // Jump over Sun
+ var adj = 0;
+ if(strt == 6 && amount > 0){
+ adj = 1;
+ }else if(strt == 0 && amount < 0){
+ // Orig date is Sun / negative incrementer
+ // Jump back over Sat
+ adj = -1;
+ }
+ // Get weekday val for the new date
+ var trgt = strt + days;
+ // New date is on Sat or Sun
+ if(trgt == 0 || trgt == 6){
+ adj = (amount > 0) ? 2 : -2;
+ }
+ // Increment by number of weeks plus leftover days plus
+ // weekend adjustments
+ amount = (7 * weeks) + days + adj;
+ newBuddDate.setDate(date.getDate(true) + amount);
+ break;
+ case "year":
+ newBuddDate.setFullYear(date.getFullYear() + amount );
+ break;
+ case "week":
+ amount *= 7;
+ newBuddDate.setDate(date.getDate(true) + amount);
+ break;
+ case "month":
+ newBuddDate.setMonth(date.getMonth() + amount);
+ break;
+ case "hour":
+ newBuddDate.setHours(date.getHours() + amount );
+ break;
+ case "minute":
+ newBuddDate._addMinutes(amount);
+ break;
+ case "second":
+ newBuddDate._addSeconds(amount);
+ break;
+ case "millisecond":
+ newBuddDate._addMilliseconds(amount);
+ break;
+ }
+ return newBuddDate; // dojox.date.buddhist.Date
+};
+
+dojox.date.buddhist.difference = function(/*dojox.date.buddhist.Date*/date1, /*dojox.date.buddhist.Date?*/date2, /*String?*/interval){
+ // based on and similar to dojo.date.difference
+ // summary:
+ // date2 - date1
+ // date2 is hebrew.Date object. If not specified, the current hebrew.Date is used.
+ // interval:
+ // A string representing the interval. One of the following:
+ // "year", "month", "day", "hour", "minute", "second",
+ // "millisecond", "week", "weekday"
+ // Defaults to "day".
+
+ date2 = date2 || new buddhistDate();
+ interval = interval || "day";
+ var yearDiff = date2.getFullYear() - date1.getFullYear();
+ var delta = 1; // Integer return value
+ switch(interval){
+ case "weekday":
+ var days = Math.round(dojox.date.buddhist.difference(date1, date2, "day"));
+ var weeks = parseInt(dojox.date.buddhist.difference(date1, date2, "week"));
+ var mod = days % 7;
+
+ // Even number of weeks
+ if(mod == 0){
+ days = weeks*5;
+ }else{
+ // Weeks plus spare change (< 7 days)
+ var adj = 0;
+ var aDay = date1.getDay();
+ var bDay = date2.getDay();
+
+ weeks = parseInt(days/7);
+ mod = days % 7;
+ // Mark the date advanced by the number of
+ // round weeks (may be zero)
+ var dtMark = new buddhistDate(date2);
+ dtMark.setDate(dtMark.getDate(true)+(weeks*7));
+ var dayMark = dtMark.getDay();
+
+ // Spare change days -- 6 or less
+ if(days > 0){
+ switch(true){
+ // Range starts on Fri
+ case aDay == 5:
+ adj = -1;
+ break;
+ // Range starts on Sat
+ case aDay == 6:
+ adj = 0;
+ break;
+ // Range ends on Fri
+ case bDay == 5:
+ adj = -1;
+ break;
+ // Range ends on Sat
+ case bDay == 6:
+ adj = -2;
+ break;
+ // Range contains weekend
+ case (dayMark + mod) > 5:
+ adj = -2;
+ }
+ }else if(days < 0){
+ switch(true){
+ // Range starts on Fri
+ case aDay == 5:
+ adj = 0;
+ break;
+ // Range starts on Sat
+ case aDay == 6:
+ adj = 1;
+ break;
+ // Range ends on Fri
+ case bDay == 5:
+ adj = 2;
+ break;
+ // Range ends on Sat
+ case bDay == 6:
+ adj = 1;
+ break;
+ // Range contains weekend
+ case (dayMark + mod) < 0:
+ adj = 2;
+ }
+ }
+ days += adj;
+ days -= (weeks*2);
+ }
+ delta = days;
+ break;
+ case "year":
+ delta = yearDiff;
+ break;
+ case "month":
+ var startdate = (date2.toGregorian() > date1.toGregorian()) ? date2 : date1; // more
+ var enddate = (date2.toGregorian() > date1.toGregorian()) ? date1 : date2;
+
+ var month1 = startdate.getMonth();
+ var month2 = enddate.getMonth();
+
+ if (yearDiff == 0){
+ delta = startdate.getMonth() - enddate.getMonth() ;
+ }else{
+ delta = 12-month2;
+ delta += month1;
+ var i = enddate.getFullYear()+1;
+ var e = startdate.getFullYear();
+ for (i; i < e; i++){
+ delta += 12;
+ }
+ }
+ if (date2.toGregorian() < date1.toGregorian()){
+ delta = -delta;
+ }
+ break;
+ case "week":
+ // Truncate instead of rounding
+ // Don't use Math.floor -- value may be negative
+ delta = parseInt(dojox.date.buddhist.difference(date1, date2, "day")/7);
+ break;
+ case "day":
+ delta /= 24;
+ // fallthrough
+ case "hour":
+ delta /= 60;
+ // fallthrough
+ case "minute":
+ delta /= 60;
+ // fallthrough
+ case "second":
+ delta /= 1000;
+ // fallthrough
+ case "millisecond":
+ delta *= date2.toGregorian().getTime()- date1.toGregorian().getTime();
+ }
+
+ // Round for fractional values and DST leaps
+ return Math.round(delta); // Number (integer)
+};
+return dojox.date.buddhist;
+}); \ No newline at end of file
diff --git a/js/dojo-1.7.2/dojox/date/buddhist/Date.js b/js/dojo-1.7.2/dojox/date/buddhist/Date.js
new file mode 100644
index 0000000..f7025ae
--- /dev/null
+++ b/js/dojo-1.7.2/dojox/date/buddhist/Date.js
@@ -0,0 +1,289 @@
+//>>built
+define("dojox/date/buddhist/Date", [
+ "dojo/_base/kernel",
+ "dojo/_base/declare",
+ "dojo/date"
+], function(dojo, declare, dd){
+
+dojo.getObject("date.buddhist.Date", true, dojox);
+dojo.experimental("dojox.date.buddhist.Date");
+
+dojo.declare("dojox.date.buddhist.Date", null, {
+
+ _date: 0,
+ _month: 0,
+ _year: 0,
+ _hours: 0,
+ _minutes: 0,
+ _seconds: 0,
+ _milliseconds: 0,
+ _day: 0,
+
+ constructor: function(){
+ // summary: This is the constructor
+ // description:
+ // This fucntion initialize the date object values
+ //
+ // example:
+ // | var date1 = new dojox.date.buddhist.Date();
+ // |
+ // | var date2 = new dojox.date.buddhist.Date(date1);
+ // |
+ // | var date3 = new dojox.date.buddhist.Date(2552,2,12);
+ var len = arguments.length;
+ if(!len){// use the current date value, added "" to the similarity to date
+ this.fromGregorian(new Date());
+ }else if(len == 1){
+ var arg0 = arguments[0];
+ if(typeof arg0 == "number"){ // this is time "valueof"
+ arg0 = new Date(arg0);
+ }
+
+ if(arg0 instanceof Date){
+ this.fromGregorian(arg0);
+ }else if(arg0 == ""){
+ this._date = new Date("");
+ }else{
+ this._year = arg0._year;
+ this._month = arg0._month;
+ this._date = arg0._date;
+ this._hours = arg0._hours;
+ this._minutes = arg0._minutes;
+ this._seconds = arg0._seconds;
+ this._milliseconds = arg0._milliseconds;
+ }
+ }else if(len >=3){
+ this._year += arguments[0];
+ this._month += arguments[1];
+ this._date += arguments[2];
+
+ if(this._month >11){
+ console.warn("the month is incorrect , set 0");
+ this._month = 0;
+ }
+ this._hours += arguments[3] || 0;
+ this._minutes += arguments[4] || 0;
+ this._seconds += arguments[5] || 0;
+ this._milliseconds += arguments[6] || 0;
+ }
+ },
+
+ getDate: function(/*boolean?*/isNumber){
+ // summary: This function returns the date value (0 - 30)
+ //
+ // example:
+ // | var date1 = new dojox.date.buddhist.Date();
+ // |
+ // | console.log(date1.getDate());
+ return parseInt(this._date);
+ },
+
+ getMonth: function(){
+ // summary: This function return the month value ( 0 - 11 )
+ //
+ // example:
+ // | var date1 = new dojox.date.buddhist.Date();
+ // |
+ // | console.log(date1.getMonth()+1);
+ return parseInt(this._month);
+ },
+
+
+ getFullYear: function(){
+ // summary: This function return the Year value
+ //
+ // example:
+ // | var date1 = new dojox.date.buddhist.Date();
+ // |
+ // | console.log(date1.getFullYear());
+ return parseInt(this._year);
+ },
+
+ getHours: function(){
+ //summary: returns the Hour value
+ return this._hours;
+ },
+
+ getMinutes: function(){
+ //summary: returns the Minuites value
+ return this._minutes;
+ },
+
+ getSeconds: function(){
+ //summary: returns the seconde value
+ return this._seconds;
+ },
+
+ getMilliseconds: function(){
+ //summary: returns the Milliseconds value
+ return this._milliseconds;
+ },
+
+ setDate: function(/*number*/date){
+ // summary: This function sets the Date
+ // example:
+ // | var date1 = new dojox.date.buddhist.Date();
+ // | date1.setDate(2);
+ date = parseInt(date);
+
+ if(date > 0 && date <= this._getDaysInMonth(this._month, this._year)){
+ this._date = date;
+ }else{
+ var mdays;
+ if(date>0){
+ for(mdays = this._getDaysInMonth(this._month, this._year);
+ date > mdays;
+ date -= mdays,mdays = this._getDaysInMonth(this._month, this._year)){
+ this._month++;
+ if(this._month >= 12){this._year++; this._month -= 12;}
+ }
+
+ this._date = date;
+ }else{
+ for(mdays = this._getDaysInMonth((this._month-1)>=0 ?(this._month-1) :11 ,((this._month-1)>=0)? this._year: this._year-1);
+ date <= 0;
+ mdays = this._getDaysInMonth((this._month-1)>=0 ? (this._month-1) :11,((this._month-1)>=0)? this._year: this._year-1)){
+ this._month--;
+ if(this._month < 0){this._year--; this._month += 12;}
+
+ date+=mdays;
+ }
+ this._date = date;
+ }
+ }
+ return this;
+ },
+
+ setFullYear: function(/*number*/year, /*number?*/month, /*number?*/ date){
+ // summary: This function set Year
+ //
+ // example:
+ // | var date1 = new dojox.date.buddhist.Date();
+ // | date1.setFullYear(2552);
+ // | date1.setFullYear(2552, 1, 1);
+ this._year = parseInt(year);
+ },
+
+ setMonth: function(/*number*/month){
+ // summary: This function set Month
+ //
+ // example:
+ // | var date1 = new dojox.date.buddhist.Date();
+ // | date1.setMonth(0); //first month
+ this._year += Math.floor(month / 12);
+ this._month = Math.floor(month % 12);
+ for(; this._month < 0; this._month = this._month+12);
+ },
+
+ setHours: function(){
+ //summary: set the Hours 0-23
+ var hours_arg_no = arguments.length;
+ var hours = 0;
+ if(hours_arg_no >= 1){
+ hours = parseInt(arguments[0]);
+ }
+
+ if(hours_arg_no >= 2){
+ this._minutes = parseInt(arguments[1]);
+ }
+
+ if(hours_arg_no >= 3){
+ this._seconds = parseInt(arguments[2]);
+ }
+
+ if(hours_arg_no == 4){
+ this._milliseconds = parseInt(arguments[3]);
+ }
+
+ while(hours >= 24){
+ this._date++;
+ var mdays = this._getDaysInMonth(this._month, this._year);
+ if(this._date > mdays){
+ this._month ++;
+ if(this._month >= 12){this._year++; this._month -= 12;}
+ this._date -= mdays;
+ }
+ hours -= 24;
+ }
+ this._hours = hours;
+ },
+
+ _addMinutes: function(/*Number*/minutes){
+ minutes += this._minutes;
+ this.setMinutes(minutes);
+ this.setHours(this._hours + parseInt(minutes / 60));
+ return this;
+ },
+
+ _addSeconds: function(/*Number*/seconds){
+ seconds += this._seconds;
+ this.setSeconds(seconds);
+ this._addMinutes(parseInt(seconds / 60));
+ return this;
+ },
+
+ _addMilliseconds: function(/*Number*/milliseconds){
+ milliseconds += this._milliseconds;
+ this.setMilliseconds(milliseconds);
+ this._addSeconds(parseInt(milliseconds / 1000));
+ return this;
+ },
+
+ setMinutes: function(/*Number*/minutes){
+ //summary: sets the minutes (0-59) only.
+ this._minutes = minutes % 60;
+ return this;
+ },
+
+ setSeconds: function(/*Number*/seconds){
+ //summary: sets the seconds (0-59) only.
+ this._seconds = seconds % 60;
+ return this;
+ },
+
+ setMilliseconds: function(/*Number*/milliseconds){
+ this._milliseconds = milliseconds % 1000;
+ return this;
+ },
+
+ toString: function(){
+ // summary: This returns a string representation of the date in "dd, MM, YYYY HH:MM:SS" format
+ return this._date + ", " + this._month + ", " + this._year + " " + this._hours + ":" + this._minutes + ":" + this._seconds; // String
+ },
+
+//FIXME: remove this and replace usage with dojox.date.buddhist.getDaysInMonth?
+ _getDaysInMonth: function(/*number*/month, /*number*/ year){
+ return dd.getDaysInMonth(new Date(year-543, month));
+ },
+
+ fromGregorian: function(/*Date*/gdate){
+ // summary: This function sets this Date to the Hebrew Date corresponding to the Gregorian Date
+ var date = new Date(gdate);
+ this._date = date.getDate();
+ this._month = date.getMonth();
+ this._year = date.getFullYear()+543;
+ this._hours = date.getHours();
+ this._minutes = date.getMinutes();
+ this._seconds = date.getSeconds();
+ this._milliseconds = date.getMilliseconds();
+ this._day = date.getDay();
+ return this;
+ },
+
+ toGregorian: function(){
+ // summary: This returns the equivalent Gregorian date value as a Date object
+ return new Date(this._year-543, this._month, this._date, this._hours, this._minutes, this._seconds, this._milliseconds); // Date
+ },
+
+ getDay: function(){
+ // summary: This function return Week Day value ( 0 - 6 )
+ return this.toGregorian().getDay(); // int
+ }
+});
+
+dojox.date.buddhist.Date.prototype.valueOf = function(){
+ return this.toGregorian().valueOf();
+};
+
+return dojox.date.buddhist.Date;
+});
diff --git a/js/dojo-1.7.2/dojox/date/buddhist/locale.js b/js/dojo-1.7.2/dojox/date/buddhist/locale.js
new file mode 100644
index 0000000..c9199b0
--- /dev/null
+++ b/js/dojo-1.7.2/dojox/date/buddhist/locale.js
@@ -0,0 +1,408 @@
+//>>built
+define("dojox/date/buddhist/locale", ["dojo/main", "dojo/date", "dojo/i18n", "dojo/regexp", "dojo/string", "./Date", "dojo/i18n!dojo/cldr/nls/buddhist"],
+ function(dojo, dd, i18n, regexp, string, buddhistDate){
+
+ dojo.getObject("date.buddhist.locale", true, dojox);
+ dojo.experimental("dojox.date.buddhist.locale");
+
+ // Format a pattern without literals
+ function formatPattern(dateObject, bundle, locale, fullYear, pattern){
+
+ return pattern.replace(/([a-z])\1*/ig, function(match){
+ var s, pad;
+ var c = match.charAt(0);
+ var l = match.length;
+ var widthList = ["abbr", "wide", "narrow"];
+
+ switch(c){
+ case 'G':
+ s = bundle["eraAbbr"][0];
+ break;
+ case 'y':
+ s = String(dateObject.getFullYear());
+ break;
+ case 'M':
+ var m = dateObject.getMonth();
+ if(l<3){
+ s = m+1; pad = true;
+ }else{
+ var propM = ["months", "format", widthList[l-3]].join("-");
+ s = bundle[propM][m];
+ }
+ break;
+ case 'd':
+ s = dateObject.getDate(true); pad = true;
+ break;
+ case 'E':
+ var d = dateObject.getDay();
+ if(l<3){
+ s = d+1; pad = true;
+ }else{
+ var propD = ["days", "format", widthList[l-3]].join("-");
+ s = bundle[propD][d];
+ }
+ break;
+ case 'a':
+ var timePeriod = (dateObject.getHours() < 12) ? 'am' : 'pm';
+ s = bundle['dayPeriods-format-wide-' + timePeriod];
+ break;
+ case 'h':
+ case 'H':
+ case 'K':
+ case 'k':
+ var h = dateObject.getHours();
+ switch (c){
+ case 'h': // 1-12
+ s = (h % 12) || 12;
+ break;
+ case 'H': // 0-23
+ s = h;
+ break;
+ case 'K': // 0-11
+ s = (h % 12);
+ break;
+ case 'k': // 1-24
+ s = h || 24;
+ break;
+ }
+ pad = true;
+ break;
+ case 'm':
+ s = dateObject.getMinutes(); pad = true;
+ break;
+ case 's':
+ s = dateObject.getSeconds(); pad = true;
+ break;
+ case 'S':
+ s = Math.round(dateObject.getMilliseconds() * Math.pow(10, l-3)); pad = true;
+ break;
+ case 'z':
+ // We only have one timezone to offer; the one from the browser
+ s = dojo.date.getTimezoneName(dateObject.toGregorian());
+ if(s){ break; }
+ l = 4;
+ // fallthrough... use GMT if tz not available
+ case 'Z':
+ var offset = dateObject.toGregorian().getTimezoneOffset();
+ var tz = [
+ (offset <= 0 ? "+" : "-"),
+ string.pad(Math.floor(Math.abs(offset) / 60), 2),
+ string.pad(Math.abs(offset) % 60, 2)
+ ];
+ if(l == 4){
+ tz.splice(0, 0, "GMT");
+ tz.splice(3, 0, ":");
+ }
+ s = tz.join("");
+ break;
+ default:
+ throw new Error("dojox.date.buddhist.locale.formatPattern: invalid pattern char: "+pattern);
+ }
+ if(pad){ s = string.pad(s, l); }
+ return s;
+ });
+ }
+
+ dojox.date.buddhist.locale.format = function(/*buddhist.Date*/dateObject, /*object?*/options){
+ // based on and similar to dojo.date.locale.format
+ // summary:
+ // Format a Date object as a String, using settings.
+ options = options || {};
+
+ var locale = i18n.normalizeLocale(options.locale);
+ var formatLength = options.formatLength || 'short';
+ var bundle = dojox.date.buddhist.locale._getBuddhistBundle(locale);
+ var str = [];
+
+ var sauce = dojo.hitch(this, formatPattern, dateObject, bundle, locale, options.fullYear);
+ if(options.selector == "year"){
+ var year = dateObject.getFullYear();
+ return year;
+ }
+ if(options.selector != "time"){
+ var datePattern = options.datePattern || bundle["dateFormat-"+formatLength];
+ if(datePattern){str.push(_processPattern(datePattern, sauce));}
+ }
+ if(options.selector != "date"){
+ var timePattern = options.timePattern || bundle["timeFormat-"+formatLength];
+ if(timePattern){str.push(_processPattern(timePattern, sauce));}
+ }
+ var result = str.join(" "); //TODO: use locale-specific pattern to assemble date + time
+
+ return result; // String
+ };
+
+ dojox.date.buddhist.locale.regexp = function(/*Object?*/options){
+ // based on and similar to dojo.date.locale.regexp
+ // summary:
+ // Builds the regular needed to parse a buddhist.Date
+ return dojox.date.buddhist.locale._parseInfo(options).regexp; // String
+ };
+
+ dojox.date.buddhist.locale._parseInfo = function(/*Object?*/options){
+ /* based on and similar to dojo.date.locale._parseInfo */
+
+ options = options || {};
+ var locale = i18n.normalizeLocale(options.locale);
+ var bundle = dojox.date.buddhist.locale._getBuddhistBundle(locale);
+ var formatLength = options.formatLength || 'short';
+ var datePattern = options.datePattern || bundle["dateFormat-" + formatLength];
+ var timePattern = options.timePattern || bundle["timeFormat-" + formatLength];
+
+ var pattern;
+ if(options.selector == 'date'){
+ pattern = datePattern;
+ }else if(options.selector == 'time'){
+ pattern = timePattern;
+ }else{
+ pattern = (typeof (timePattern) == "undefined") ? datePattern : datePattern + ' ' + timePattern;
+ }
+
+ var tokens = [];
+
+ var re = _processPattern(pattern, dojo.hitch(this, _buildDateTimeRE, tokens, bundle, options));
+ return {regexp: re, tokens: tokens, bundle: bundle};
+ };
+
+ dojox.date.buddhist.locale.parse = function(/*String*/value, /*Object?*/options){
+ // based on and similar to dojo.date.locale.parse
+ // summary: This function parses string date value according to options
+ value = value.replace(/[\u200E\u200F\u202A-\u202E]/g, ""); //remove special chars
+
+ if(!options){options={};}
+ var info = dojox.date.buddhist.locale._parseInfo(options);
+
+ var tokens = info.tokens, bundle = info.bundle;
+ var re = new RegExp("^" + info.regexp + "$");
+
+ var match = re.exec(value);
+
+ var locale = i18n.normalizeLocale(options.locale);
+
+ if(!match){
+ console.debug("dojox.date.buddhist.locale.parse: value "+value+" doesn't match pattern " + re);
+ return null;
+ } // null
+
+ var date, date1;
+
+ var result = [2513,0,1,0,0,0,0]; // buddhist date for [1970,0,1,0,0,0,0] used in gregorian locale
+ var amPm = "";
+ var mLength = 0;
+ var widthList = ["abbr", "wide", "narrow"];
+ var valid = dojo.every(match, function(v, i){
+ if(!i){return true;}
+ var token=tokens[i-1];
+ var l=token.length;
+ switch(token.charAt(0)){
+ case 'y':
+ result[0] = Number(v);
+ break;
+ case 'M':
+ if(l>2){
+ var months = bundle['months-format-' + widthList[l-3]].concat();
+ if(!options.strict){
+ //Tolerate abbreviating period in month part
+ //Case-insensitive comparison
+ v = v.replace(".","").toLowerCase();
+ months = dojo.map(months, function(s){ return s ? s.replace(".","").toLowerCase() : s; } );
+ }
+ v = dojo.indexOf(months, v);
+ if(v == -1){
+ return false;
+ }
+ mLength = l;
+ }else{
+ v--;
+ }
+ result[1] = Number(v);
+ break;
+ case 'D':
+ result[1] = 0;
+ // fallthrough...
+ case 'd':
+ result[2] = Number(v);
+ break;
+ case 'a': //am/pm
+ var am = options.am || bundle['dayPeriods-format-wide-am'],
+ pm = options.pm || bundle['dayPeriods-format-wide-pm'];
+ if(!options.strict){
+ var period = /\./g;
+ v = v.replace(period,'').toLowerCase();
+ am = am.replace(period,'').toLowerCase();
+ pm = pm.replace(period,'').toLowerCase();
+ }
+ if(options.strict && v != am && v != pm){
+ return false;
+ }
+
+ // we might not have seen the hours field yet, so store the state and apply hour change later
+ amPm = (v == pm) ? 'p' : (v == am) ? 'a' : '';
+ break;
+ case 'K': //hour (1-24)
+ if(v == 24){ v = 0; }
+ // fallthrough...
+ case 'h': //hour (1-12)
+ case 'H': //hour (0-23)
+ case 'k': //hour (0-11)
+ //in the 12-hour case, adjusting for am/pm requires the 'a' part
+ //which could come before or after the hour, so we will adjust later
+ result[3] = Number(v);
+ break;
+ case 'm': //minutes
+ result[4] = Number(v);
+ break;
+ case 's': //seconds
+ result[5] = Number(v);
+ break;
+ case 'S': //milliseconds
+ result[6] = Number(v);
+ }
+ return true;
+ });
+
+ var hours = +result[3];
+ if(amPm === 'p' && hours < 12){
+ result[3] = hours + 12; //e.g., 3pm -> 15
+ }else if(amPm === 'a' && hours == 12){
+ result[3] = 0; //12am -> 0
+ }
+ var dateObject = new buddhistDate(result[0], result[1], result[2], result[3], result[4], result[5], result[6]);
+ return dateObject;
+ };
+
+
+ function _processPattern(pattern, applyPattern, applyLiteral, applyAll){
+ // summary: Process a pattern with literals in it
+
+ // Break up on single quotes, treat every other one as a literal, except '' which becomes '
+ var identity = function(x){return x;};
+ applyPattern = applyPattern || identity;
+ applyLiteral = applyLiteral || identity;
+ applyAll = applyAll || identity;
+
+ //split on single quotes (which escape literals in date format strings)
+ //but preserve escaped single quotes (e.g., o''clock)
+ var chunks = pattern.match(/(''|[^'])+/g);
+ var literal = pattern.charAt(0) == "'";
+
+ dojo.forEach(chunks, function(chunk, i){
+ if(!chunk){
+ chunks[i]='';
+ }else{
+ chunks[i]=(literal ? applyLiteral : applyPattern)(chunk);
+ literal = !literal;
+ }
+ });
+ return applyAll(chunks.join(''));
+ }
+
+ function _buildDateTimeRE (tokens, bundle, options, pattern){
+ // based on and similar to dojo.date.locale._buildDateTimeRE
+ //
+
+ pattern = regexp.escapeString(pattern);
+ var locale = i18n.normalizeLocale(options.locale);
+
+ return pattern.replace(/([a-z])\1*/ig, function(match){
+
+ // Build a simple regexp. Avoid captures, which would ruin the tokens list
+ var s;
+ var c = match.charAt(0);
+ var l = match.length;
+ var p2 = '', p3 = '';
+ if(options.strict){
+ if(l > 1){ p2 = '0' + '{'+(l-1)+'}'; }
+ if(l > 2){ p3 = '0' + '{'+(l-2)+'}'; }
+ }else{
+ p2 = '0?'; p3 = '0{0,2}';
+ }
+ switch(c){
+ case 'y':
+ s = '\\d+';
+ break;
+ case 'M':
+ s = (l>2) ? '\\S+' : p2+'[1-9]|1[0-2]';
+ break;
+ case 'd':
+ s = '[12]\\d|'+p2+'[1-9]|3[01]';
+ break;
+ case 'E':
+ s = '\\S+';
+ break;
+ case 'h': //hour (1-12)
+ s = p2+'[1-9]|1[0-2]';
+ break;
+ case 'k': //hour (0-11)
+ s = p2+'\\d|1[01]';
+ break;
+ case 'H': //hour (0-23)
+ s = p2+'\\d|1\\d|2[0-3]';
+ break;
+ case 'K': //hour (1-24)
+ s = p2+'[1-9]|1\\d|2[0-4]';
+ break;
+ case 'm':
+ case 's':
+ s = p2+'\\d|[0-5]\\d';
+ break;
+ case 'S':
+ s = '\\d{'+l+'}';
+ break;
+ case 'a':
+ var am = options.am || bundle['dayPeriods-format-wide-am'],
+ pm = options.pm || bundle['dayPeriods-format-wide-pm'];
+ if(options.strict){
+ s = am + '|' + pm;
+ }else{
+ s = am + '|' + pm;
+ if(am != am.toLowerCase()){ s += '|' + am.toLowerCase(); }
+ if(pm != pm.toLowerCase()){ s += '|' + pm.toLowerCase(); }
+ }
+ break;
+ default:
+ s = ".*";
+ }
+ if(tokens){ tokens.push(match); }
+ return "(" + s + ")"; // add capture
+ }).replace(/[\xa0 ]/g, "[\\s\\xa0]"); // normalize whitespace. Need explicit handling of \xa0 for IE. */
+ }
+
+ var _customFormats = [];
+ dojox.date.buddhist.locale.addCustomFormats = function(/*String*/packageName, /*String*/bundleName){
+ // summary:
+ // Add a reference to a bundle containing localized custom formats to be
+ // used by date/time formatting and parsing routines.
+ _customFormats.push({pkg:packageName,name:bundleName});
+ };
+
+ dojox.date.buddhist.locale._getBuddhistBundle = function(/*String*/locale){
+ var buddhist = {};
+ dojo.forEach(_customFormats, function(desc){
+ var bundle = i18n.getLocalization(desc.pkg, desc.name, locale);
+ buddhist = dojo.mixin(buddhist, bundle);
+ }, this);
+ return buddhist; /*Object*/
+ };
+
+ dojox.date.buddhist.locale.addCustomFormats("dojo.cldr","buddhist");
+
+ dojox.date.buddhist.locale.getNames = function(/*String*/item, /*String*/type, /*String?*/context, /*String?*/locale, /*buddhist Date Object?*/date){
+ // summary:
+ // Used to get localized strings from dojo.cldr for day or month names.
+ var label;
+ var lookup = dojox.date.buddhist.locale._getBuddhistBundle(locale);
+ var props = [item, context, type];
+ if(context == 'standAlone'){
+ var key = props.join('-');
+ label = lookup[key];
+ // Fall back to 'format' flavor of name
+ if(label[0] == 1){ label = undefined; } // kludge, in the absence of real aliasing support in dojo.cldr
+ }
+ props[1] = 'format';
+
+ // return by copy so changes won't be made accidentally to the in-memory model
+ return (label || lookup[props.join('-')]).concat(); /*Array*/
+ };
+
+});
diff --git a/js/dojo-1.7.2/dojox/date/hebrew.js b/js/dojo-1.7.2/dojox/date/hebrew.js
new file mode 100644
index 0000000..de5b17c
--- /dev/null
+++ b/js/dojo-1.7.2/dojox/date/hebrew.js
@@ -0,0 +1,250 @@
+//>>built
+define("dojox/date/hebrew", ["dojo/_base/kernel", "dojo/date", "./hebrew/Date"], function(dojo, dd, hebrewDate){
+
+dojo.getObject("date.hebrew", true, dojox);
+dojo.experimental("dojox.date.hebrew");
+
+// Utility methods to do arithmetic calculations with hebrew.Dates
+
+// added for compat to date
+dojox.date.hebrew.getDaysInMonth = function(/*hebrew.Date*/month){
+ return month.getDaysInHebrewMonth(month.getMonth(), month.getFullYear());
+};
+
+//TODO: define hebrew.isLeapYear? Or should it be invalid, since it has different meaning?
+
+dojox.date.hebrew.compare = function(/*hebrew.Date*/dateheb1, /*hebrew.Date*/dateheb2, /*String?*/portion){
+ // summary:
+ // Compare two hebrew date objects by date, time, or both.
+ // description:
+ // Returns 0 if equal, positive if a > b, else negative.
+ // date1:
+ // hebrew.Date object
+ // date2:
+ // hebrew.Date object. If not specified, the current hebrew.Date is used.
+ // portion:
+ // A string indicating the "date" or "time" portion of a Date object.
+ // Compares both "date" and "time" by default. One of the following:
+ // "date", "time", "datetime"
+
+ if(dateheb1 instanceof hebrewDate){
+ dateheb1 = dateheb1.toGregorian();
+ }
+ if(dateheb2 instanceof hebrewDate){
+ dateheb2 = dateheb2.toGregorian();
+ }
+
+ return dd.compare.apply(null, arguments);
+};
+
+
+dojox.date.hebrew.add = function(/*dojox.date.hebrew.Date*/date, /*String*/interval, /*int*/amount){
+ // based on and similar to dojo.date.add
+ // summary:
+ // Add to a Date in intervals of different size, from milliseconds to years
+ // date: hebrew.Date
+ // Date object to start with
+ // interval:
+ // A string representing the interval. One of the following:
+ // "year", "month", "day", "hour", "minute", "second",
+ // "millisecond", "week", "weekday"
+ // amount:
+ // How much to add to the date.
+
+ var newHebrDate = new hebrewDate(date);
+
+ switch(interval){
+ case "day":
+ newHebrDate.setDate(date.getDate() + amount);
+ break;
+ case "weekday":
+ var day = date.getDay();
+ var remdays = 0;
+ if(amount < 0 && day == 6){ day = 5; remdays = -1; }
+
+ if((day + amount) < 5 && (day + amount) >= 0){ //in the same week
+ newHebrDate.setDate(date.getDate() + amount + remdays);
+ }else{
+ var add = (amount > 0) ? 5 : -1;
+ var adddays = (amount > 0) ? 2 : -2 ; /*first weekend */
+ if (amount > 0 && (day == 5 || day == 6)) { remdays = 4 - day; day = 4;}
+ var newamount = day + amount - add;
+ var weeks = parseInt(newamount / 5);
+ var newday = newamount%5;
+ newHebrDate.setDate(date.getDate() - day+ adddays + weeks * 7 + remdays + newday + add);
+ }
+ break;
+ case "year":
+ newHebrDate.setFullYear(date.getFullYear() + amount);
+ break;
+ case "week":
+ amount *= 7;
+ newHebrDate.setDate(date.getDate() + amount);
+ break;
+ case "month":
+ var month = date.getMonth(),
+ newMonth = month + amount;
+ if(!date.isLeapYear(date.getFullYear())){
+ if(month < 5 && newMonth >= 5){ newMonth++;}
+ else if (month > 5 && newMonth <= 5){ newMonth--;}
+ }
+ newHebrDate.setMonth(newMonth);
+ break;
+ case "hour":
+ newHebrDate.setHours(date.getHours() + amount);
+ break;
+ case "minute":
+ newHebrDate._addMinutes(amount);
+ break;
+ case "second":
+ newHebrDate._addSeconds(amount);
+ break;
+ case "millisecond":
+ newHebrDate._addMilliseconds(amount);
+ break;
+ }
+
+ return newHebrDate; // dojox.date.hebrew.Date
+};
+
+dojox.date.hebrew.difference = function(/*dojox.date.hebrew.Date*/date1, /*dojox.date.hebrew.Date?*/date2, /*String?*/interval){
+ // based on and similar to dojo.date.difference
+ // summary:
+ // date2 - date1
+ // date2 is hebrew.Date object. If not specified, the current hebrew.Date is used.
+ // interval:
+ // A string representing the interval. One of the following:
+ // "year", "month", "day", "hour", "minute", "second",
+ // "millisecond", "week", "weekday"
+ // Defaults to "day".
+
+ date2 = date2 || new hebrewDate();
+ interval = interval || "day";
+ var yearDiff = date2.getFullYear() - date1.getFullYear();
+ var delta = 1; // Integer return value
+ switch(interval){
+ case "weekday":
+ var days = Math.round(dojox.date.hebrew.difference(date1, date2, "day"));
+ var weeks = parseInt(dojox.date.hebrew.difference(date1, date2, "week"));
+ var mod = days % 7;
+
+ // Even number of weeks
+ if(mod == 0){
+ days = weeks*5;
+ }else{
+ // Weeks plus spare change (< 7 days)
+ var adj = 0;
+ var aDay = date1.getDay();
+ var bDay = date2.getDay();
+
+ weeks = parseInt(days/7);
+ mod = days % 7;
+ // Mark the date advanced by the number of
+ // round weeks (may be zero)
+ var dtMark = new hebrewDate(date1);
+ dtMark.setDate(dtMark.getDate()+(weeks*7));
+ var dayMark = dtMark.getDay();
+
+ // Spare change days -- 6 or less
+ if(days > 0){
+ switch(true){
+ // Range starts on Fri
+ case aDay == 5:
+ adj = -1;
+ break;
+ // Range starts on Sat
+ case aDay == 6:
+ adj = 0;
+ break;
+ // Range ends on Fri
+ case bDay == 5:
+ adj = -1;
+ break;
+ // Range ends on Sat
+ case bDay == 6:
+ adj = -2;
+ break;
+ // Range contains weekend
+ case (dayMark + mod) > 5:
+ adj = -2;
+ }
+ }else if(days < 0){
+ switch(true){
+ // Range starts on Fri
+ case aDay == 5:
+ adj = 0;
+ break;
+ // Range starts on Sat
+ case aDay == 6:
+ adj = 1;
+ break;
+ // Range ends on Fri
+ case bDay == 5:
+ adj = 2;
+ break;
+ // Range ends on Sat
+ case bDay == 6:
+ adj = 1;
+ break;
+ // Range contains weekend
+ case (dayMark + mod) < 0:
+ adj = 2;
+ }
+ }
+ days += adj;
+ days -= (weeks*2);
+ }
+ delta = days;
+ break;
+ case "year":
+ delta = yearDiff;
+ break;
+ case "month":
+ var startdate = (date2.toGregorian() > date1.toGregorian()) ? date2 : date1; // more
+ var enddate = (date2.toGregorian() > date1.toGregorian()) ? date1 : date2;
+
+ var month1 = startdate.getMonth();
+ var month2 = enddate.getMonth();
+
+ if(yearDiff == 0){
+ delta = ( !date2.isLeapYear(date2.getFullYear()) && startdate.getMonth() > 5 && enddate.getMonth() <=5) ? (startdate.getMonth() - enddate.getMonth() - 1) :
+ (startdate.getMonth() - enddate.getMonth() );
+ }else{
+ delta = (!enddate.isLeapYear(enddate.getFullYear()) && month2 < 6) ? (13-month2-1) : (13-month2);
+ delta += (!startdate.isLeapYear(startdate.getFullYear()) && month1 > 5) ? (month1 -1): month1;
+ var i = enddate.getFullYear() + 1;
+ var e = startdate.getFullYear();
+ for (i; i < e; i++){
+ delta += enddate.isLeapYear(i) ? 13 : 12;
+ }
+ }
+ if(date2.toGregorian() < date1.toGregorian()){
+ delta = -delta;
+ }
+ break;
+ case "week":
+ // Truncate instead of rounding
+ // Don't use Math.floor -- value may be negative
+ delta = parseInt(dojox.date.hebrew.difference(date1, date2, "day")/7);
+ break;
+ case "day":
+ delta /= 24;
+ // fallthrough
+ case "hour":
+ delta /= 60;
+ // fallthrough
+ case "minute":
+ delta /= 60;
+ // fallthrough
+ case "second":
+ delta /= 1000;
+ // fallthrough
+ case "millisecond":
+ delta *= date2.toGregorian().getTime()- date1.toGregorian().getTime();
+ }
+
+ // Round for fractional values and DST leaps
+ return Math.round(delta); // Number (integer)
+};
+return dojox.date.hebrew;
+});
diff --git a/js/dojo-1.7.2/dojox/date/hebrew/Date.js b/js/dojo-1.7.2/dojox/date/hebrew/Date.js
new file mode 100644
index 0000000..6255eff
--- /dev/null
+++ b/js/dojo-1.7.2/dojox/date/hebrew/Date.js
@@ -0,0 +1,721 @@
+//>>built
+define("dojox/date/hebrew/Date", [
+ "dojo/_base/kernel",
+ "dojo/_base/declare",
+ "./numerals"
+], function(dojo, declare, numerals){
+
+dojo.getObject("date.hebrew.Date", true, dojox);
+dojo.experimental("dojox.date.hebrew.Date");
+
+dojo.declare("dojox.date.hebrew.Date", null, {
+ // summary: A Date-like object which implements the Hebrew calendar
+ //
+ // description:
+ // A Date-like object which implements the Hebrew Calendar. Because this object
+ // implements many of the same methods as the native JavaScript Date object, which
+ // implements the Gregorian calendar, it can often be used its place. Note that
+ // this object does not extend Date or use its prototype.
+ //
+ // example:
+ // | dojo.require("dojox.date.hebrew.Date");
+ // |
+ // | var date = new dojox.date.hebrew.Date();
+ // | console.log(date.getFullYear()+'\'+date.getMonth()+'\'+date.getDate());
+
+ // Hebrew date calculations are performed in terms of days, hours, and
+ // "parts" (or halakim), which are 1/1080 of an hour, or 3 1/3 seconds.
+ //_HOUR_PARTS: 1080,
+ //_DAY_PARTS: 24*1080,
+
+ // An approximate value for the length of a lunar month.
+ // It is used to calculate the approximate year and month of a given
+ // absolute date.
+ //_MONTH_FRACT: 12*1080 + 793,
+ //_MONTH_PARTS: 29*24*1080 + 12*1080 + 793,
+
+ // The time of the new moon (in parts) on 1 Tishri, year 1 (the epoch)
+ // counting from noon on the day before. BAHARAD is an abbreviation of
+ // Bet (Monday), Hey (5 hours from sunset), Resh-Daled (204).
+ //_BAHARAD: 11*1080 + 204,
+
+ // The Julian day of the Gregorian epoch, that is, January 1, 1 on the
+ // Gregorian calendar.
+ //_JAN_1_1_JULIAN_DAY: 1721426,
+
+ /**
+ * The lengths of the Hebrew months. This is complicated, because there
+ * are three different types of years, or six if you count leap years.
+ * Due to the rules for postponing the start of the year to avoid having
+ * certain holidays fall on the sabbath, the year can end up being three
+ * different lengths, called "deficient", "normal", and "complete".
+ */
+
+ //"Absolute" indexes of months: Tishri - 0, Heshvan - 1, Kislev - 2, Tevet - 3, Shevat - 4, Adar I (leap years only) - 5, Adar - 6, Nisan - 7, Iyar - 8, Sivan - 9, Tammuz-10, Av - 11, Elul - 12.
+
+ _MONTH_LENGTH: [
+ // Deficient Normal Complete
+ [ 30, 30, 30 ], //Tishri 0
+ [ 29, 29, 30 ], //Heshvan 1
+ [ 29, 30, 30 ], //Kislev 2
+ [ 29, 29, 29 ], //Tevet 3
+ [ 30, 30, 30 ], //Shevat 4
+ [ 30, 30, 30 ], //Adar I (leap years only) 5
+ [ 29, 29, 29 ], //Adar 6
+ [ 30, 30, 30 ], //Nisan 7
+ [ 29, 29, 29 ], //Iyar 8
+ [ 30, 30, 30 ], //Sivan 9
+ [ 29, 29, 29 ], //Tammuz 10
+ [ 30, 30, 30 ], //Av 11
+ [ 29, 29, 29 ] //Elul 12
+ ],
+
+ /**
+ * The cumulative # of days to the end of each month in a non-leap year
+ * Although this can be calculated from the MONTH_LENGTH table,
+ * keeping it around separately makes some calculations a lot faster
+ */
+ _MONTH_START: [
+ // Deficient Normal Complete
+ [ 0, 0, 0 ], // (placeholder)
+ [ 30, 30, 30 ], // Tishri
+ [ 59, 59, 60 ], // Heshvan
+ [ 88, 89, 90 ], // Kislev
+ [ 117, 118, 119 ], // Tevet
+ [ 147, 148, 149 ], // Shevat
+ [ 147, 148, 149 ], // (Adar I placeholder)
+ [ 176, 177, 178 ], // Adar
+ [ 206, 207, 208 ], // Nisan
+ [ 235, 236, 237 ], // Iyar
+ [ 265, 266, 267 ], // Sivan
+ [ 294, 295, 296 ], // Tammuz
+ [ 324, 325, 326 ], // Av
+ [ 353, 354, 355 ] // Elul
+ ],
+
+ /**
+ * The cumulative # of days to the end of each month in a leap year
+ */
+ _LEAP_MONTH_START: [
+ // Deficient Normal Complete
+ [ 0, 0, 0 ], // (placeholder)
+ [ 30, 30, 30 ], // Tishri
+ [ 59, 59, 60 ], // Heshvan
+ [ 88, 89, 90 ], // Kislev
+ [ 117, 118, 119 ], // Tevet
+ [ 147, 148, 149 ], // Shevat
+ [ 177, 178, 179 ], // Adar I
+ [ 206, 207, 208 ], // Adar II
+ [ 236, 237, 238 ], // Nisan
+ [ 265, 266, 267 ], // Iyar
+ [ 295, 296, 297 ], // Sivan
+ [ 324, 325, 326 ], // Tammuz
+ [ 354, 355, 356 ], // Av
+ [ 383, 384, 385 ] // Elul
+ ],
+
+ _GREGORIAN_MONTH_COUNT: [
+ //len len2 st st2
+ [ 31, 31, 0, 0 ], // Jan
+ [ 28, 29, 31, 31 ], // Feb
+ [ 31, 31, 59, 60 ], // Mar
+ [ 30, 30, 90, 91 ], // Apr
+ [ 31, 31, 120, 121 ], // May
+ [ 30, 30, 151, 152 ], // Jun
+ [ 31, 31, 181, 182 ], // Jul
+ [ 31, 31, 212, 213 ], // Aug
+ [ 30, 30, 243, 244 ], // Sep
+ [ 31, 31, 273, 274 ], // Oct
+ [ 30, 30, 304, 305 ], // Nov
+ [ 31, 31, 334, 335 ] // Dec
+ // len length of month
+ // len2 length of month in a leap year
+ // st days in year before start of month
+ // st2 days in year before month in leap year
+ ],
+
+ _date: 0,
+ _month: 0,
+ _year: 0,
+ _hours: 0,
+ _minutes: 0,
+ _seconds: 0,
+ _milliseconds: 0,
+ _day: 0,
+
+ constructor: function(){
+ // summary: initialize the date object value
+ //
+ // example:
+ // | var date1 = new dojox.date.hebrew.Date();
+ // |
+ // | var date2 = new dojox.date.hebrew.Date(date1);
+ // |
+ // | var date3 = new dojox.date.hebrew.Date(5768,2,12);
+
+ var len = arguments.length;
+ if(!len){// use the current date value, added "" to the similarity to date
+ this.fromGregorian(new Date());
+ }else if(len == 1){
+ var arg0 = arguments[0];
+ if(typeof arg0 == "number"){ // this is time "valueof"
+ arg0 = new Date(arg0);
+ }
+
+ if(arg0 instanceof Date){
+ this.fromGregorian(arg0);
+ }else if(arg0 == ""){
+ // date should be invalid. Dijit relies on this behavior.
+ this._date = new Date(""); //TODO: should this be NaN? _date is not a Date object
+ }else{ // this is hebrew.Date object
+ this._year = arg0._year;
+ this._month = arg0._month;
+ this._date = arg0._date;
+ this._hours = arg0._hours;
+ this._minutes = arg0._minutes;
+ this._seconds = arg0._seconds;
+ this._milliseconds = arg0._milliseconds;
+ }
+ }else if(len >= 3){
+ // YYYY, MM, DD arguments passed, month is from 0-12, "absolute" index of month
+ this._year += arguments[0];
+ this._month += arguments[1];
+ this._date += arguments[2];
+
+ if(this._month > 12){
+ console.warn("the month is incorrect , set 0 " + this._month + " " + this._year );
+ this._month = 0;
+ }
+ this._hours += arguments[3] || 0;
+ this._minutes += arguments[4] || 0;
+ this._seconds += arguments[5] || 0;
+ this._milliseconds += arguments[6] || 0;
+ }
+
+ this._setDay();
+ },
+
+ getDate: function(){
+ // summary: returns the date value (1 - 30)
+ //
+ // example:
+ // | var date1 = new dojox.date.hebrew.Date();
+ // |
+ // | console.log(date1.getDate());
+
+ return this._date; // int
+ },
+
+ getDateLocalized: function(/*String?*/locale){
+ // summary: returns the date value as hebrew numerals for the Hebrew locale,
+ // a number for all others.
+ //
+ // example:
+ // | var date1 = new dojox.date.hebrew.Date();
+ // |
+ // | console.log(date1.getDate());
+
+ return (locale || dojo.locale).match(/^he(?:-.+)?$/) ?
+ numerals.getDayHebrewLetters(this._date) : this.getDate();
+ },
+
+ getMonth: function(){
+ // summary: returns the month value (0 - 12)
+ //
+ // description: the result is the index in the month array:
+ // 0. Tishri
+ // 1. Heshvan
+ // 2. Kislev
+ // 3. Tevet
+ // 4. Shevat
+ // 5. Adar I (leap years only)
+ // 6. Adar
+ // 7. Nisan
+ // 8. Iyar
+ // 9. Sivan
+ // 10. Tammuz
+ // 11. Av
+ // 12. Elul - 12
+ // For non leap years, for months after Shevat, the actual position of
+ // the month in the year (used for short format) is less than
+ // the "absolute" index by 1.
+ //
+ // example:
+ // | var date1 = new dojox.date.hebrew.Date(5769, 6, 1);
+ // |
+ // | console.log(date1.getMonth()+1);
+ // | >> 7
+
+ return this._month;
+ },
+
+ getFullYear: function(){
+ // summary: returns the Year value
+ //
+ // example:
+ // | var date1 = new dojox.date.hebrew.Date(5769, 6, 1);
+ // |
+ // | console.log(date1.getFullYear());
+ // | >> 5769
+ return this._year;
+ },
+
+ getHours: function(){
+ //summary: returns the hour value
+ return this._hours;
+ },
+
+ getMinutes: function(){
+ //summary: returns the minutes value
+
+ return this._minutes;
+ },
+
+ getSeconds: function(){
+ //summary: returns the seconds value
+ return this._seconds;
+ },
+
+ getMilliseconds: function(){
+ //summary: returns the milliseconds value
+
+ return this._milliseconds;
+ },
+
+ setDate: function(/*number*/date){
+ // summary: sets the date number for a given month
+ // example:
+ // | var date1 = new dojox.date.hebrew.Date(5769, 6, 1);
+ // | date1.setDate(2);
+
+ date = +date;
+ var mdays;
+ if(date>0){
+ while (date > (mdays = this.getDaysInHebrewMonth(this._month, this._year))){
+ date -= mdays;
+ this._month++;
+ if(this._month >= 13){this._year++; this._month -= 13;}
+ }
+ }else{
+ while(date<=0){
+ mdays = this.getDaysInHebrewMonth((this._month-1)>=0 ? (this._month-1) : 12, ((this._month-1)>=0)? this._year : this._year-1);
+ this._month--;
+ if(this._month < 0){this._year--; this._month += 13;}
+ date += mdays;
+ }
+ }
+ this._date = date;
+ this._setDay();
+ return this;
+ },
+
+
+ setFullYear: function(/*number*/year, /*number?*/month, /*number?*/ date){
+ // summary: set the year
+ //
+ // example:
+ // | var date1 = new dojox.date.hebrew.Date();
+ // | date1.setFullYear(5768);
+ // | date1.setFullYear(5768, 1, 1);
+
+ this._year = year = +year;
+ if(!this.isLeapYear(year) && this._month==5){ //incorrect month number for non leap year
+ this._month++;
+ }
+
+ if(month !== undefined){this.setMonth(month);}
+ if(date !== undefined){this.setDate(date);}
+
+ var dnum = this.getDaysInHebrewMonth(this._month, this._year);
+ if(dnum < this._date){
+ this._date = dnum;
+ } // if the date in this month more than number of the days in this month
+
+ this._setDay();
+ return this;
+ },
+
+ setMonth: function(/*number*/month){
+ // summary: sets the month. You should use "absolute" index in the month array:
+ // 0. Tishri
+ // 1. Heshvan
+ // 2. Kislev
+ // 3. Tevet
+ // 4. Shevat
+ // 5. Adar I (leap years only)
+ // 6. Adar
+ // 7. Nisan
+ // 8. Iyar
+ // 9. Sivan
+ // 10. Tammuz
+ // 11. Av
+ // 12. Elul - 12
+ // For non leap years, for months after Shevat, the actual position of
+ // the month in the year (used for short format) is less than
+ // the "absolute" index by 1.
+ //
+ // example:
+ // | var date1 = new dojox.date.hebrew.Date();
+ // | date1.setMonth(0); //first month
+
+ month = +month; // coerce to a Number
+ if(!this.isLeapYear(this._year) && month == 5){month++;}
+
+ if(month>=0){
+ while(month >12){
+ this._year++;
+ month -= 13;
+ if (!this.isLeapYear(this._year) && month >= 5){month++;}
+ }
+ }else{
+ while(month<0){
+ this._year--;
+ month += (!this.isLeapYear(this._year) && month < -7) ? 12 : 13;
+ }
+ }
+
+ this._month = month;
+
+ var dnum = this.getDaysInHebrewMonth(this._month, this._year);
+ if(dnum < this._date){
+ this._date = dnum;
+ } // if the date in this month more than number of the days in this month
+
+ this._setDay();
+ return this;
+ },
+
+ setHours: function(){
+ // summary: sets the hour
+ //
+ // description: Sets the hour and optionally minutes, seconds, milliseconds also.
+ //
+ // example:
+ // | var date1 = new dojox.date.hebrew.Date();
+ // | date1.setHours(12, 30, 0, 0);
+
+ var hours_arg_no = arguments.length;
+ var hours = 0;
+ if(hours_arg_no >= 1){
+ hours += +arguments[0];
+ }
+
+ if(hours_arg_no >= 2){
+ this._minutes += +arguments[1];
+ }
+
+ if(hours_arg_no >= 3){
+ this._seconds += +arguments[2];
+ }
+
+ if(hours_arg_no == 4){
+ this._milliseconds += +arguments[3];
+ }
+
+ while(hours >= 24){
+ this._date++;
+ var mdays = this.getDaysInHebrewMonth(this._month, this._year);
+ if(this._date > mdays)
+ {
+ this._month++;
+ if(!this.isLeapYear(this._year) && this._month==5){ this._month++; }
+ if(this._month >= 13){this._year++; this._month -= 13;}
+ this._date -= mdays;
+ }
+ hours -= 24;
+ }
+ this._hours = hours;
+ this._setDay();
+ return this;
+ },
+
+ _addMinutes: function(/*Number*/minutes){
+ minutes += this._minutes;
+ this.setMinutes(minutes);
+ this.setHours(this._hours + parseInt(minutes / 60));
+ return this;
+ },
+
+ _addSeconds: function(/*Number*/seconds){
+ seconds += this._seconds;
+ this.setSeconds(seconds);
+ this._addMinutes(parseInt(seconds / 60));
+ return this;
+ },
+
+ _addMilliseconds: function(/*Number*/milliseconds){
+ milliseconds += this._milliseconds;
+ this.setMilliseconds(milliseconds);
+ this._addSeconds(parseInt(milliseconds / 1000));
+ return this;
+ },
+
+ setMinutes: function(/*Number*/minutes){
+ //summary: sets the minutes (0-59) only.
+ this._minutes = minutes % 60;
+ return this;
+ },
+
+ setSeconds: function(/*Number*/seconds){
+ //summary: sets the seconds (0-59) only.
+ this._seconds = seconds % 60;
+ return this;
+ },
+
+ setMilliseconds: function(/*Number*/milliseconds){
+ this._milliseconds = milliseconds % 1000;
+ return this;
+ },
+
+ _setDay: function(){
+ var day = this._startOfYear(this._year);
+ if(this._month != 0){
+ day += (this.isLeapYear(this._year) ? this._LEAP_MONTH_START : this._MONTH_START)[this._month || 0][this._yearType(this._year)];
+ }
+ day += this._date - 1;
+ this._day = (day+1) % 7;
+ },
+
+ toString: function(){
+ // summary: returns a string representation of the date in "dd, MM, yyyy HH:mm:ss" format
+ //
+ // description: returns a string representation of the date in "dd, MM, yyyy HH:mm:ss" format (all numeric)
+ // For user presentation, use dojox.date.hebrew.locale.format which will present in the appropriate language
+ // and format. toString() language- and culturally-specific conventions to keep this module free of
+ // dependencies on dojox.date.locale and dojo.cldr.
+ //
+ // example:
+ // | var date1 = new dojox.date.hebrew.Date(5769, 6, 1);
+ // | console.log(date1.toString());
+ // | >>> "1, 6, 5769 0:0:0"
+ return this._date + ", " + this._month + ", " + this._year + " " + this._hours + ":" + this._minutes + ":" + this._seconds; // String
+ },
+
+ // ported from the Java class com.ibm.icu.util.HebrewCalendar from ICU4J v3.6.1 at http://www.icu-project.org/
+ getDaysInHebrewMonth: function(/*Number*/month, /*Number*/ year){
+ // summary: returns the number of days in the given month and year
+
+ // Aside from the leap month, these two months can vary: 1=HESHVAN, 2=KISLEV
+ // The rest are a fixed length
+ var yearType = (month == 1 || month == 2) ? this._yearType(year) : 0;
+ return (!this.isLeapYear(this._year) && month == 5) ? 0 : this._MONTH_LENGTH[month][yearType];
+ },
+
+ // ported from the Java class com.ibm.icu.util.HebrewCalendar from ICU4J v3.6.1 at http://www.icu-project.org/
+ _yearType: function(/*Number*/year){
+ var yearLength = this._handleGetYearLength(Number(year));
+ if(yearLength > 380){
+ yearLength -= 30; // Subtract length of leap month.
+ }
+
+ var yearType = yearLength - 353;
+ if (yearType < 0 || yearType > 2){
+ throw new Error("Illegal year length " + yearLength + " in year " + year);
+ }
+ return yearType;
+ },
+
+ // ported from the Java class com.ibm.icu.util.HebrewCalendar from ICU4J v3.6.1 at http://www.icu-project.org/
+ _handleGetYearLength: function(/*number*/eyear){
+ return this._startOfYear(eyear+1) - this._startOfYear(eyear);
+ },
+
+ // ported from the Java class com.ibm.icu.util.HebrewCalendar from ICU4J v3.6.1 at http://www.icu-project.org/
+ _startOfYear: function(/*number*/year){
+ var months = Math.floor((235 * year - 234) / 19), // # of months before year
+ frac = months * (12*1080 + 793) + 11*1080 + 204/*BAHARAD*/, // Fractional part of day #
+ day = months * 29 + Math.floor(frac / (24*1080)); // Whole # part of calculation
+ frac %= 24*1080; // Time of day
+
+ var wd = day % 7; // Day of week (0 == Monday)
+
+ if(wd == 2 || wd == 4 || wd == 6){
+ // If the 1st is on Sun, Wed, or Fri, postpone to the next day
+ day += 1;
+ wd = day % 7;
+ }
+ if(wd == 1 && frac > 15 * 1080 + 204 && !this.isLeapYear(year)){
+ // If the new moon falls after 3:11:20am (15h204p from the previous noon)
+ // on a Tuesday and it is not a leap year, postpone by 2 days.
+ // This prevents 356-day years.
+ day += 2;
+ }else if(wd == 0 && frac > 21 * 1080 + 589 && this.isLeapYear(year-1)){
+ // If the new moon falls after 9:32:43 1/3am (21h589p from yesterday noon)
+ // on a Monday and *last* year was a leap year, postpone by 1 day.
+ // Prevents 382-day years.
+ day += 1;
+ }
+
+ return day;
+ },
+
+ // ported from the Java class com.ibm.icu.util.HebrewCalendar from ICU4J v3.6.1 at http://www.icu-project.org/
+ isLeapYear: function(/*Number*/year){
+ // summary:
+ // Determines if the year (argument) is a leap year
+ // description: The Leap year contains additional month adar sheni
+ //
+ //return (year * 12 + 17) % 19 >= 12;
+ var x = (year*12 + 17) % 19;
+ return x >= ((x < 0) ? -7 : 12);
+ },
+
+
+ fromGregorian: function(/*Date*/gdate){
+ // summary: This function sets this Date to the Hebrew Date corresponding to the Gregorian Date
+ // example:
+ // | var dateHebrew = new dojox.date.hebrew.Date();
+ // | var dateGregorian = new Date(2008,10,12);
+ // | dateHebrew.fromGregorian(dateGregorian);
+
+ var result = (!isNaN(gdate)) ? this._computeHebrewFields(gdate) : NaN;
+ this._year = (!isNaN(gdate)) ? result[0] : NaN;
+ this._month = (!isNaN(gdate))? result[1] : NaN;
+ this._date = (!isNaN(gdate)) ? result[2] : NaN;
+ this._hours = gdate.getHours();
+ this._milliseconds = gdate.getMilliseconds();
+ this._minutes = gdate.getMinutes();
+ this._seconds = gdate.getSeconds();
+ if (!isNaN(gdate)) this._setDay();
+ return this;
+ },
+
+ // ported from the Java class com.ibm.icu.util.HebrewCalendar.handleComputeFields from ICU4J v3.6.1 at http://www.icu-project.org/
+ _computeHebrewFields: function(/*Date*/gdate){
+ var julianDay = this._getJulianDayFromGregorianDate(gdate),
+ d = julianDay - 347997,
+ m = Math.floor((d * 24*1080) / (29*24*1080 + 12*1080 + 793)), // Months (approx)
+ year = Math.floor((19 * m + 234) / 235) + 1, // Years (approx)
+ ys = this._startOfYear(year), // 1st day of year
+ dayOfYear = (d - ys);
+ // Because of the postponement rules, it's possible to guess wrong. Fix it.
+ while(dayOfYear < 1){
+ year--;
+ ys = this._startOfYear(year);
+ dayOfYear = d - ys;
+ }
+
+ // Now figure out which month we're in, and the date within that month
+
+ var typeofYear = this._yearType(year),
+ monthStart = this.isLeapYear(year) ? this._LEAP_MONTH_START : this._MONTH_START,
+ month = 0;
+
+ while(dayOfYear > monthStart[month][typeofYear]){
+ month++;
+ }
+ month--;
+ var dayOfMonth = dayOfYear - monthStart[month][typeofYear];
+ return [year, month, dayOfMonth];
+ },
+
+ // ported from the Java class com.ibm.icu.util.Calendar.computeGregorianFields from ICU4J v3.6.1 at http://www.icu-project.org/
+ toGregorian: function(){
+ // summary: returns the equivalent Grogorian date value as a native Date object
+ // example:
+ // | var dateHebrew = new dojox.date.hebrew.Date(5768,11,20);
+ // | var dateGregorian = dateHebrew.toGregorian();
+
+ var hYear = this._year || 0,
+ hMonth = this._month || 0,
+ hDate = this._date || 0,
+ day = this._startOfYear(hYear);
+
+ if(hMonth != 0){
+ day += (this.isLeapYear(hYear) ? this._LEAP_MONTH_START : this._MONTH_START)[hMonth][this._yearType(hYear)];
+ }
+
+ var julianDay = (hDate + day + 347997),
+ // The Gregorian epoch day is zero for Monday January 1, year 1.
+ gregorianEpochDay = julianDay - 1721426;
+
+ // Here we convert from the day number to the multiple radix
+ // representation. We use 400-year, 100-year, and 4-year cycles.
+ // For example, the 4-year cycle has 4 years + 1 leap day; giving
+ // 1461 == 365*4 + 1 days.
+ var rem = [];
+ var n400 = this._floorDivide(gregorianEpochDay , 146097, rem), // 400-year cycle length
+ n100 = this._floorDivide(rem[0] , 36524, rem), // 100-year cycle length
+ n4 = this._floorDivide(rem[0] , 1461, rem), // 4-year cycle length
+ n1 = this._floorDivide(rem[0] , 365, rem),
+ year = 400*n400 + 100*n100 + 4*n4 + n1,
+ dayOfYear = rem[0]; // zero-based day of year
+
+ if(n100 == 4 || n1 == 4){
+ dayOfYear = 365; // Dec 31 at end of 4- or 400-yr cycle
+ }else{
+ ++year;
+ }
+
+ var isLeap = !(year%4) && // equiv. to (year%4 == 0)
+ (year%100 || !(year%400)),
+ correction = 0,
+ march1 = isLeap ? 60 : 59; // zero-based DOY for March 1
+ if(dayOfYear >= march1){ correction = isLeap ? 1 : 2; }
+ var month = Math.floor((12 * (dayOfYear + correction) + 6) / 367); // zero-based month
+ var dayOfMonth = dayOfYear -
+ this._GREGORIAN_MONTH_COUNT[month][isLeap ? 3 : 2] + 1; // one-based DOM
+
+ return new Date(year, month, dayOfMonth, this._hours, this._minutes, this._seconds, this._milliseconds); // Date
+ },
+ _floorDivide: function(numerator, denominator, remainder){
+ if(numerator >= 0){
+ remainder[0] = (numerator % denominator);
+ return Math.floor(numerator / denominator);
+ }
+ var quotient = Math.floor(numerator / denominator);
+ remainder[0] = numerator - (quotient * denominator);
+ return quotient;
+ },
+
+ getDay: function(){
+ // summary: returns weekday value (0 - 6)
+ //
+ // example:
+ // | var date1 = new dojox.date.hebrew.Date();
+ // |
+ // | console.log(date1.getDay());
+
+ var hYear = this._year,
+ hMonth = this._month,
+ hDate = this._date,
+ day = this._startOfYear(hYear);
+
+ if(hMonth != 0){
+ day += (this.isLeapYear(hYear) ? this._LEAP_MONTH_START : this._MONTH_START)[hMonth][this._yearType(hYear)];
+ }
+
+ day += hDate - 1;
+ return (day+1) % 7;
+ },
+
+ // ported from the Java class com.ibm.icu.util.Calendar.computeGregorianMonthStart from ICU4J v3.6.1 at http://www.icu-project.org/
+ _getJulianDayFromGregorianDate: function(gdate){
+ //summary: returns the Julian day of a Gregorian date
+
+ var year = gdate.getFullYear(),
+ month = gdate.getMonth(),
+ d = gdate.getDate(),
+ isLeap = !(year%4) && (year%100 || !(year%400)), //TODO: dup
+ y = year - 1;
+ // This computation is actually ... + (_JAN_1_1_JULIAN_DAY - 3) + 2.
+ // Add 2 because Gregorian calendar starts 2 days after Julian
+ // calendar.
+ var julianDay = 365*y + Math.floor(y/4) - Math.floor(y/100) +
+ Math.floor(y/400) + 1721426 - 1;
+ // At this point julianDay indicates the day BEFORE the first day
+ // of January 1, <eyear> of the Gregorian calendar.
+ if(month > 0) {
+ julianDay += this._GREGORIAN_MONTH_COUNT[month][isLeap ? 3 : 2];
+ }
+
+ julianDay += d;
+ return julianDay;
+ }
+});
+
+dojox.date.hebrew.Date.prototype.valueOf = function(){
+ return this.toGregorian().valueOf();
+};
+return dojox.date.hebrew.Date;
+});
diff --git a/js/dojo-1.7.2/dojox/date/hebrew/locale.js b/js/dojo-1.7.2/dojox/date/hebrew/locale.js
new file mode 100644
index 0000000..df3e401
--- /dev/null
+++ b/js/dojo-1.7.2/dojox/date/hebrew/locale.js
@@ -0,0 +1,511 @@
+//>>built
+define("dojox/date/hebrew/locale", ["dojo/main", "dojo/date", "dojo/i18n", "dojo/regexp", "dojo/string", "./Date", "./numerals", "dojo/i18n!dojo/cldr/nls/hebrew"],
+ function(dojo, dd, i18n, regexp, string, hebrewDate, numerals){
+
+ dojo.getObject("date.hebrew.locale", true, dojox);
+ dojo.experimental("dojox.date.hebrew.locale");
+
+ //Load the bundles containing localization information for
+ // names and formats
+ dojo.requireLocalization("dojo.cldr", "hebrew");
+
+ // Format a pattern without literals
+ function formatPattern(dateObject, bundle, locale, fullYear, pattern){
+
+ return pattern.replace(/([a-z])\1*/ig, function(match){
+ var s, pad;
+ var c = match.charAt(0);
+ var l = match.length;
+ var widthList = ["abbr", "wide", "narrow"];
+
+ switch(c){
+ case 'y':
+ if(locale.match(/^he(?:-.+)?$/)){
+ s = numerals.getYearHebrewLetters(dateObject.getFullYear());
+ }else{
+ s = String(dateObject.getFullYear());
+ }
+ break;
+ case 'M':
+ var m = dateObject.getMonth();
+ if(l<3){
+ if(!dateObject.isLeapYear(dateObject.getFullYear()) && m>5){m--;}
+ if(locale.match(/^he(?:-.+)?$/)){
+ s = numerals.getMonthHebrewLetters(m);
+ }else{
+ s = m+1; pad = true;
+ }
+ }else{
+ var monthNames = dojox.date.hebrew.locale.getNames('months',widthList[l-3], 'format', locale, dateObject);
+ s = monthNames[m];
+ }
+ break;
+ case 'd':
+ if(locale.match(/^he(?:-.+)?$/)){
+ s = dateObject.getDateLocalized(locale);
+ }else{
+ s = dateObject.getDate(); pad = true;
+ }
+ break;
+ case 'E':
+ var d = dateObject.getDay();
+ if(l<3){
+ s = d+1; pad = true;
+ }else{
+ var propD = ["days", "format", widthList[l-3]].join("-");
+ s = bundle[propD][d];
+ }
+ break;
+ case 'a':
+ var timePeriod = (dateObject.getHours() < 12) ? 'am' : 'pm';
+ s = bundle['dayPeriods-format-wide-' + timePeriod];
+ break;
+ case 'h':
+ case 'H':
+ case 'K':
+ case 'k':
+ var h = dateObject.getHours();
+ // strange choices in the date format make it impossible to write this succinctly
+ switch (c){
+ case 'h': // 1-12
+ s = (h % 12) || 12;
+ break;
+ case 'H': // 0-23
+ s = h;
+ break;
+ case 'K': // 0-11
+ s = (h % 12);
+ break;
+ case 'k': // 1-24
+ s = h || 24;
+ break;
+ }
+ pad = true;
+ break;
+ case 'm':
+ s = dateObject.getMinutes(); pad = true;
+ break;
+ case 's':
+ s = dateObject.getSeconds(); pad = true;
+ break;
+ case 'S':
+ s = Math.round(dateObject.getMilliseconds() * Math.pow(10, l-3)); pad = true;
+ break;
+ case 'z':
+ s = "";
+ break;
+ default:
+ throw new Error("dojox.date.hebrew.locale.formatPattern: invalid pattern char: "+pattern);
+ }
+ if(pad){ s = string.pad(s, l); }
+ return s;
+ });
+ }
+
+ dojox.date.hebrew.locale.format = function(/*hebrew.Date*/dateObject, /*object?*/options){
+ // based on and similar to dojo.date.locale.format
+ //summary:
+ // Format a Date object as a String, using settings.
+ //
+ // description:
+ // Create a string from a hebrew.Date object using a known pattern.
+ // By default, this method formats both date and time from dateObject.
+ // Default formatting lengths is 'short'
+ //
+ // dateObject:
+ // the date and/or time to be formatted. If a time only is formatted,
+ // the values in the year, month, and day fields are irrelevant. The
+ // opposite is true when formatting only dates.
+
+ options = options || {};
+
+ var locale = i18n.normalizeLocale(options.locale);
+ var formatLength = options.formatLength || 'short';
+ var bundle = dojox.date.hebrew.locale._getHebrewBundle(locale);
+ var str = [];
+
+ var sauce = dojo.hitch(this, formatPattern, dateObject, bundle, locale, options.fullYear);
+ if(options.selector == "year"){
+ var year = dateObject.getFullYear();
+ return locale.match(/^he(?:-.+)?$/) ?
+ numerals.getYearHebrewLetters(year) : year;
+ }
+ if(options.selector != "time"){
+ var datePattern = options.datePattern || bundle["dateFormat-"+formatLength];
+ if(datePattern){str.push(_processPattern(datePattern, sauce));}
+ }
+ if(options.selector != "date"){
+ var timePattern = options.timePattern || bundle["timeFormat-"+formatLength];
+ if(timePattern){str.push(_processPattern(timePattern, sauce));}
+ }
+ var result = str.join(" "); //TODO: use locale-specific pattern to assemble date + time
+
+ return result; // String
+ };
+
+ dojox.date.hebrew.locale.regexp = function(/*object?*/options){
+ // based on and similar to dojo.date.locale.regexp
+ // summary:
+ // Builds the regular needed to parse a hebrew.Date
+
+ return dojox.date.hebrew.locale._parseInfo(options).regexp; // String
+ };
+
+ dojox.date.hebrew.locale._parseInfo = function(/*oblect?*/options){
+ /* based on and similar to dojo.date.locale._parseInfo */
+
+ options = options || {};
+ var locale = i18n.normalizeLocale(options.locale);
+ var bundle = dojox.date.hebrew.locale._getHebrewBundle(locale);
+
+ var formatLength = options.formatLength || 'short';
+ var datePattern = options.datePattern || bundle["dateFormat-" + formatLength];
+ var timePattern = options.timePattern || bundle["timeFormat-" + formatLength];
+
+ var pattern;
+ if(options.selector == 'date'){
+ pattern = datePattern;
+ }else if(options.selector == 'time'){
+ pattern = timePattern;
+ }else{
+ pattern = (timePattern === undefined) ? datePattern : datePattern + ' ' + timePattern; //hebrew resource file does not contain time patterns - a bug?
+ }
+
+ var tokens = [];
+
+ var re = _processPattern(pattern, dojo.hitch(this, _buildDateTimeRE, tokens, bundle, options));
+ return {regexp: re, tokens: tokens, bundle: bundle};
+ };
+
+ dojox.date.hebrew.locale.parse = function(/*String*/value, /*Object?*/options){
+ // based on and similar to dojo.date.locale.parse
+ // summary: This function parse string date value according to options
+ // example:
+ // | var dateHebrew = dojox.date.hebrew.locale.parse('11/10/5740', {datePattern:'dd/MM/yy', selector:'date'});
+ // | in Hebrew locale string for parsing contains Hebrew Numerals
+ // |
+ // | options = {datePattern:'dd MMMM yy', selector:'date'};
+ // |
+ // | y - year
+ // | M, MM - short month
+ // | MMM, MMMM - long month
+ // | d - date
+ // | a - am, pm
+ // | E, EE, EEE, EEEE - week day
+ // |
+ // | h, H, k, K, m, s, S, - time format
+
+ value = value.replace(/[\u200E\u200F\u202A-\u202E]/g, ""); //remove special chars
+
+ if(!options){options={};}
+ var info = dojox.date.hebrew.locale._parseInfo(options);
+
+ var tokens = info.tokens, bundle = info.bundle;
+ var re = new RegExp("^" + info.regexp + "$");
+
+ var match = re.exec(value);
+
+ var locale = i18n.normalizeLocale(options.locale);
+
+ if(!match){
+ console.debug("dojox.date.hebrew.locale.parse: value "+value+" doesn't match pattern " + re);
+ return null;
+ } // null
+
+ var date, date1;
+
+ //var result = [1970,0,1,0,0,0,0]; //
+ var result = [5730,3,23,0,0,0,0]; // hebrew date for [1970,0,1,0,0,0,0] used in gregorian locale
+ var amPm = "";
+ var mLength = 0;
+ var widthList = ["abbr", "wide", "narrow"];
+ var valid = dojo.every(match, function(v, i){
+ if(!i){return true;}
+ var token=tokens[i-1];
+ var l=token.length;
+ switch(token.charAt(0)){
+ case 'y':
+ if(locale.match(/^he(?:-.+)?$/)){
+ result[0] = numerals.parseYearHebrewLetters(v);
+ }else{
+ result[0] = Number(v);
+ }
+ break;
+ case 'M':
+ //if it is short format, month is one letter or two letter with "geresh"
+ if(l>2){
+ //we do not know here if the year is leap or not
+ var months = dojox.date.hebrew.locale.getNames('months', widthList[l-3], 'format', locale, new hebrewDate(5769, 1, 1)),
+ leapmonths = dojox.date.hebrew.locale.getNames('months', widthList[l-3], 'format', locale, new hebrewDate(5768, 1, 1));
+ if(!options.strict){
+ //Tolerate abbreviating period in month part
+ //Case-insensitive comparison
+ v = v.replace(".","").toLowerCase();
+ months = dojo.map(months, function(s){ return s ? s.replace(".","").toLowerCase() : s; } );
+ leapmonths = dojo.map(leapmonths, function(s){ return s ? s.replace(".","").toLowerCase() : s; } );
+ }
+ var monthName = v;
+ v = dojo.indexOf(months, monthName);
+ if(v == -1){
+ v = dojo.indexOf(leapmonths, monthName);
+ if(v == -1){
+ //console.debug("dojox.date.hebrew.locale.parse: Could not parse month name: second " + v +"'.");
+ return false;
+ }
+ }
+ mLength = l;
+ }else{
+ if(locale.match(/^he(?:-.+)?$/)){
+ v = numerals.parseMonthHebrewLetters(v);
+ }else{
+ v--;
+ }
+ }
+ result[1] = Number(v);
+ break;
+ case 'D':
+ result[1] = 0;
+ // fallthrough...
+ case 'd':
+ if(locale.match(/^he(?:-.+)?$/)){
+ result[2] = numerals.parseDayHebrewLetters(v);
+ }else{
+ result[2] = Number(v);
+ }
+ break;
+ case 'a': //am/pm
+ var am = options.am || bundle['dayPeriods-format-wide-am'],
+ pm = options.pm || bundle['dayPeriods-format-wide-pm'];
+ if(!options.strict){
+ var period = /\./g;
+ v = v.replace(period,'').toLowerCase();
+ am = am.replace(period,'').toLowerCase();
+ pm = pm.replace(period,'').toLowerCase();
+ }
+ if(options.strict && v != am && v != pm){
+ return false;
+ }
+
+ // we might not have seen the hours field yet, so store the state and apply hour change later
+ amPm = (v == pm) ? 'p' : (v == am) ? 'a' : '';
+ break;
+ case 'K': //hour (1-24)
+ if(v == 24){ v = 0; }
+ // fallthrough...
+ case 'h': //hour (1-12)
+ case 'H': //hour (0-23)
+ case 'k': //hour (0-11)
+ //in the 12-hour case, adjusting for am/pm requires the 'a' part
+ //which could come before or after the hour, so we will adjust later
+ result[3] = Number(v);
+ break;
+ case 'm': //minutes
+ result[4] = Number(v);
+ break;
+ case 's': //seconds
+ result[5] = Number(v);
+ break;
+ case 'S': //milliseconds
+ result[6] = Number(v);
+ }
+ return true;
+ });
+
+ var hours = +result[3];
+ if(amPm === 'p' && hours < 12){
+ result[3] = hours + 12; //e.g., 3pm -> 15
+ }else if(amPm === 'a' && hours == 12){
+ result[3] = 0; //12am -> 0
+ }
+ var dateObject = new hebrewDate(result[0], result[1], result[2], result[3], result[4], result[5], result[6]); // hebrew.Date
+ //for non leap year, the index of the short month start from adar should be increased by 1
+ if(mLength < 3 && result[1] >= 5 && !dateObject.isLeapYear(dateObject.getFullYear())){
+ dateObject.setMonth(result[1]+1);
+ }
+ return dateObject; // hebrew.Date
+ };
+
+
+ function _processPattern(pattern, applyPattern, applyLiteral, applyAll){
+ //summary: Process a pattern with literals in it
+
+ // Break up on single quotes, treat every other one as a literal, except '' which becomes '
+ var identity = function(x){return x;};
+ applyPattern = applyPattern || identity;
+ applyLiteral = applyLiteral || identity;
+ applyAll = applyAll || identity;
+
+ //split on single quotes (which escape literals in date format strings)
+ //but preserve escaped single quotes (e.g., o''clock)
+ var chunks = pattern.match(/(''|[^'])+/g);
+ var literal = pattern.charAt(0) == "'";
+
+ dojo.forEach(chunks, function(chunk, i){
+ if(!chunk){
+ chunks[i]='';
+ }else{
+ chunks[i]=(literal ? applyLiteral : applyPattern)(chunk);
+ literal = !literal;
+ }
+ });
+ return applyAll(chunks.join(''));
+ }
+
+ function _buildDateTimeRE (tokens, bundle, options, pattern){
+ // based on and similar to dojo.date.locale._buildDateTimeRE
+ //
+
+ pattern = regexp.escapeString(pattern);
+ var locale = i18n.normalizeLocale(options.locale);
+
+ return pattern.replace(/([a-z])\1*/ig, function(match){
+
+ // Build a simple regexp. Avoid captures, which would ruin the tokens list
+ var s;
+ var c = match.charAt(0);
+ var l = match.length;
+ var p2 = '', p3 = '';
+ if(options.strict){
+ if(l > 1){ p2 = '0' + '{'+(l-1)+'}'; }
+ if(l > 2){ p3 = '0' + '{'+(l-2)+'}'; }
+ }else{
+ p2 = '0?'; p3 = '0{0,2}';
+ }
+ switch(c){
+ case 'y':
+ s = '\\S+';
+ break;
+ case 'M':
+ if(locale.match('^he(?:-.+)?$')){
+ s = (l>2) ? '\\S+ ?\\S+' : '\\S{1,4}';
+ }else{
+ s = (l>2) ? '\\S+ ?\\S+' : p2+'[1-9]|1[0-2]';
+ }
+ break;
+ case 'd':
+ if(locale.match('^he(?:-.+)?$')){
+ s = '\\S[\'\"\'\u05F3]{1,2}\\S?';
+ }else{
+ s = '[12]\\d|'+p2+'[1-9]|30';
+ }
+ break;
+ case 'E':
+ if(locale.match('^he(?:-.+)?$')){
+ s = (l>3) ? '\\S+ ?\\S+' : '\\S';
+ }else{
+ s = '\\S+';
+ }
+ break;
+ case 'h': //hour (1-12)
+ s = p2+'[1-9]|1[0-2]';
+ break;
+ case 'k': //hour (0-11)
+ s = p2+'\\d|1[01]';
+ break;
+ case 'H': //hour (0-23)
+ s = p2+'\\d|1\\d|2[0-3]';
+ break;
+ case 'K': //hour (1-24)
+ s = p2+'[1-9]|1\\d|2[0-4]';
+ break;
+ case 'm':
+ case 's':
+ s = p2+'\\d|[0-5]\\d';
+ break;
+ case 'S':
+ s = '\\d{'+l+'}';
+ break;
+ case 'a':
+ var am = options.am || bundle['dayPeriods-format-wide-am'],
+ pm = options.pm || bundle['dayPeriods-format-wide-pm'];
+ if(options.strict){
+ s = am + '|' + pm;
+ }else{
+ s = am + '|' + pm;
+ if(am != am.toLowerCase()){ s += '|' + am.toLowerCase(); }
+ if(pm != pm.toLowerCase()){ s += '|' + pm.toLowerCase(); }
+ }
+ break;
+ default:
+ s = ".*";
+ }
+ if(tokens){ tokens.push(match); }
+ return "(" + s + ")"; // add capture
+ }).replace(/[\xa0 ]/g, "[\\s\\xa0]"); // normalize whitespace. Need explicit handling of \xa0 for IE. */
+ }
+
+ var _customFormats = [];
+ dojox.date.hebrew.locale.addCustomFormats = function(/*String*/packageName, /*String*/bundleName){
+ // summary:
+ // Add a reference to a bundle containing localized custom formats to be
+ // used by date/time formatting and parsing routines.
+ //
+ // description:
+ // The user may add custom localized formats where the bundle has properties following the
+ // same naming convention used by dojo.cldr: `dateFormat-xxxx` / `timeFormat-xxxx`
+ // The pattern string should match the format used by the CLDR.
+ // See dojo.date.locale.format() for details.
+ // The resources must be loaded by dojo.requireLocalization() prior to use
+
+ _customFormats.push({pkg:packageName,name:bundleName});
+ };
+
+ dojox.date.hebrew.locale._getHebrewBundle = function(/*String*/locale){
+ var hebrew = {};
+ dojo.forEach(_customFormats, function(desc){
+ var bundle = i18n.getLocalization(desc.pkg, desc.name, locale);
+ hebrew = dojo.mixin(hebrew, bundle);
+ }, this);
+ return hebrew; /*Object*/
+ };
+
+ dojox.date.hebrew.locale.addCustomFormats("dojo.cldr","hebrew");
+
+ dojox.date.hebrew.locale.getNames = function(/*String*/item, /*String*/type, /*String?*/context, /*String?*/locale, /*dojox.date.hebrew.Date?*/date){
+ // summary:
+ // Used to get localized strings from dojo.cldr for day or month names.
+ //
+ // item:
+ // 'months' || 'days'
+ // type:
+ // 'wide' || 'narrow' || 'abbr' (e.g. "Monday", "Mon", or "M" respectively, in English)
+ // use:
+ // 'standAlone' || 'format' (default)
+ // locale:
+ // override locale used to find the names
+ // date:
+ // required for item=months to determine leap month name
+ //
+ // using var monthNames = dojox.date.hebrew.locale.getNames('months', 'wide', 'format', 'he', new hebrewDate(5768, 2, 12));
+
+ var label,
+ lookup = dojox.date.hebrew.locale._getHebrewBundle(locale),
+ props = [item, context, type];
+ if(context == 'standAlone'){
+ var key = props.join('-');
+ label = lookup[key];
+ // Fall back to 'format' flavor of name
+ if(label[0] == 1){ label = undefined; } // kludge, in the absence of real aliasing support in dojo.cldr
+ }
+ props[1] = 'format';
+
+ // return by copy so changes won't be made accidentally to the in-memory model
+ var result = (label || lookup[props.join('-')]).concat();
+
+ if(item == "months"){
+ if(date.isLeapYear(date.getFullYear())){
+ // Adar I (6th position in the array) will be used.
+ // Substitute the leap month Adar II for the regular Adar (7th position)
+ props.push("leap");
+ result[6] = lookup[props.join('-')];
+ }else{
+ // Remove Adar I but leave an empty position in the array
+ delete result[5];
+ }
+ }
+
+ return result; /*Array*/
+ };
+
+ return dojox.date.hebrew.locale;
+});
diff --git a/js/dojo-1.7.2/dojox/date/hebrew/numerals.js b/js/dojo-1.7.2/dojox/date/hebrew/numerals.js
new file mode 100644
index 0000000..f561002
--- /dev/null
+++ b/js/dojo-1.7.2/dojox/date/hebrew/numerals.js
@@ -0,0 +1,141 @@
+//>>built
+define("dojox/date/hebrew/numerals", ["dojo/_base/kernel", "dojo/_base/array"], function(dojo){
+ dojo.getObject("date.hebrew.numerals", true, dojox);
+ dojo.experimental("dojox.date.hebrew.numerals");
+
+//Conversion from "Hindi" numerals to Hebrew numerals and vice versa
+
+ var DIG="אבגדהוזחט";
+ var TEN="יכלמנסעפצ";
+ var HUN="קרשת";
+
+ var transformChars = function(str, nogrsh){
+ str = str.replace("יה", "טו").replace("יו", "טז");
+
+ if(!nogrsh){
+ var len = str.length;
+ if(len > 1){
+ str = str.substr(0, len - 1) + '"' + str.charAt(len - 1);
+ }else{
+ str += "\u05F3"; // 05F3:geresh
+ }
+ }
+ return str; // String
+ };
+
+ var parseStrToNumber = function(str){
+ var num = 0;
+ dojo.forEach(str, function(ch){
+ var i;
+ if((i = DIG.indexOf(ch)) != -1){
+ num += ++i;
+ }else if((i = TEN.indexOf(ch)) != -1){
+ num += 10 * ++i;
+ }else if((i = HUN.indexOf(ch)) != -1){
+ num += 100 * ++i;
+ }
+ });
+ return num; //Number
+ };
+
+ var convertNumberToStr = function(num){
+ var str = "", n = 4, j = 9;
+ while(num){
+ if(num >= n*100){
+ str += HUN.charAt(n-1);
+ num -= n*100;
+ continue;
+ }else if(n > 1){
+ n--;
+ continue;
+ }else if(num >= j*10){
+ str += TEN.charAt(j-1);
+ num -= j*10;
+ }else if(j > 1){
+ j--;
+ continue;
+ }else if(num > 0){
+ str += DIG.charAt(num-1);
+ num = 0;
+ }
+ }
+ return str; //String
+ };
+
+ dojox.date.hebrew.numerals.getYearHebrewLetters = function(/*Number */ year){
+ // summary: converts the year from an integer to Hebrew numerals.
+ //
+ // example:
+ // | var date1 = new dojox.date.hebrew.Date();
+ // |
+ // | document.writeln(dojox.date.hebrew.numerals.getYearHebrewLetters(date1.getFullYear());
+
+ var rem = year % 1000;
+ //FIXME: tests include dates outside this range and seem to pass.
+ // if((year - rem) / 1000 != 5){ throw new Error("Hebrew year "+year+" is not in range 5001-5999");}
+ return transformChars(convertNumberToStr(rem)); // String
+ };
+
+ dojox.date.hebrew.numerals.parseYearHebrewLetters = function(/*String hebrew year*/ year){
+ // summary: converts the year written in Hebrew numerals to an integer
+ //
+ // example:
+ // | var date = new dojox.date.hebrew.Date();
+ // | date.setFullYear(dojox.date.hebrew.numerals.parseYearHebrewLetters('\u05ea\u05e9\u05e1\u05f4\u05d7'));
+
+ return parseStrToNumber(year) + 5000; // int
+ };
+
+ dojox.date.hebrew.numerals.getDayHebrewLetters = function(day, /*boolean?*/ nogrsh){
+ // summary: converts an integer to a String representing the number in Hebrew numerals. Can be formatted with or without geresh &#x05f3;
+ //
+ // example:
+ // | var date1 = new dojox.date.hebrew.Date();
+ // |
+ // | document.writeln(dojox.date.hebrew.numerals.getDayHebrewLetters(date1.getDay());
+
+ return transformChars(convertNumberToStr(day), nogrsh); // String
+ };
+
+ dojox.date.hebrew.numerals.parseDayHebrewLetters = function(/*String hebrew*/ day){
+ // summary: converts the string containing a Hebrew numeral to an integer
+ //
+ // example:
+ // | var date1 = new dojox.date.hebrew.Date();
+ // |
+ // | date1.setDate(dojox.date.hebrew.numerals.parseDayHebrewLetters('\u05d0')); // ALEPH
+ return parseStrToNumber(day); // int
+ };
+
+ dojox.date.hebrew.numerals.getMonthHebrewLetters = function(/*int*/month){
+ // summary: converts an integer representing a month to a String written in Hebrew numerals
+ //
+ // example:
+ // | var date1 = new dojox.date.hebrew.Date();
+ // |
+ // | document.writeln(dojox.date.hebrew.numerals.getMonthHebrewLetters(date1.getMonth());
+
+ return transformChars(convertNumberToStr(month+1)); // String
+ };
+
+ dojox.date.hebrew.numerals.parseMonthHebrewLetters = function(/*String*/monthStr){
+ // summary: converts a Hebrew numeral string representing
+ // a month to an integer. The returned value
+ // is indexed in the month name array. To use it for
+ // setMonth, do correction for leap year
+ //
+ // example:
+ // | var date = new dojox.date.hebrew.Date();
+ // | var number = dojox.date.hebrew.numerals.parseMonthHebrewLetters("\u05ea\u05de\u05d5\u05d6"); // Tammuz
+ // | date.setMonth(number);
+
+ //month number from 0 to 12
+ var monnum = dojox.date.hebrew.numerals.parseDayHebrewLetters(monthStr) - 1;
+
+ if(monnum == -1 || monnum > 12){
+ throw new Error("The month name is incorrect , month = " + monnum);
+ }
+ return monnum;
+ };
+ return dojox.date.hebrew.numerals;
+});
diff --git a/js/dojo-1.7.2/dojox/date/islamic.js b/js/dojo-1.7.2/dojox/date/islamic.js
new file mode 100644
index 0000000..8e3625d
--- /dev/null
+++ b/js/dojo-1.7.2/dojox/date/islamic.js
@@ -0,0 +1,250 @@
+//>>built
+define("dojox/date/islamic", ["dojo/_base/kernel", "dojo/date", "./islamic/Date"], function(dojo, dd, islamicDate){
+
+dojo.getObject("date.islamic", true, dojox);
+dojo.experimental("dojox.date.islamic");
+
+// Utility methods to do arithmetic calculations with islamic.Dates
+
+ // added for compat to date
+dojox.date.islamic.getDaysInMonth = function(/*islamic.Date*/month){
+ return month.getDaysInIslamicMonth(month.getMonth(), month.getFullYear());
+};
+
+//TODO: define islamic.isLeapYear? Or should it be invalid, since it has different meaning?
+
+dojox.date.islamic.compare = function(/*islamic.Date*/date1, /*islamic.Date*/date2, /*String?*/portion){
+ // summary:
+ // Compare two islamic date objects by date, time, or both.
+ // description:
+ // Returns 0 if equal, positive if a > b, else negative.
+ // date1:
+ // islamic.Date object
+ // date2:
+ // islamic.Date object. If not specified, the current islamic.Date is used.
+ // portion:
+ // A string indicating the "date" or "time" portion of a Date object.
+ // Compares both "date" and "time" by default. One of the following:
+ // "date", "time", "datetime"
+
+ if(date1 instanceof islamicDate){
+ date1 = date1.toGregorian();
+ }
+ if(date2 instanceof islamicDate){
+ date2 = date2.toGregorian();
+ }
+
+ return dd.compare.apply(null, arguments);
+};
+
+dojox.date.islamic.add = function(/*dojox.date.islamic.Date*/date, /*String*/interval, /*int*/amount){
+ // based on and similar to dojo.date.add
+ // summary:
+ // Add to a Date in intervals of different size, from milliseconds to years
+ // date: islamic.Date
+ // Date object to start with
+ // interval:
+ // A string representing the interval. One of the following:
+ // "year", "month", "day", "hour", "minute", "second",
+ // "millisecond", "week", "weekday"
+ // amount:
+ // How much to add to the date.
+
+ var newIslamDate = new islamicDate(date);
+
+ switch(interval){
+ case "day":
+ newIslamDate.setDate(date.getDate() + amount);
+ break;
+ case "weekday":
+ var day = date.getDay();
+ if(((day + amount) < 5) && ((day + amount) > 0)){
+ newIslamDate.setDate(date.getDate() + amount);
+ }else{
+ var adddays = 0, /*weekend */
+ remdays = 0;
+ if(day == 5){//friday
+ day = 4;
+ remdays = (amount > 0) ? -1 : 1;
+ }else if(day == 6){ //shabat
+ day = 4;
+ remdays = (amount > 0) ? -2 : 2;
+ }
+ var add = (amount > 0) ? (5 - day - 1) : -day
+ var amountdif = amount - add;
+ var div = parseInt(amountdif / 5);
+ if(amountdif % 5 != 0){
+ adddays = (amount > 0) ? 2 : -2;
+ }
+ adddays = adddays + div * 7 + amountdif % 5 + add;
+ newIslamDate.setDate(date.getDate() + adddays + remdays);
+ }
+ break;
+ case "year":
+ newIslamDate.setFullYear(date.getFullYear() + amount);
+ break;
+ case "week":
+ amount *= 7;
+ newIslamDate.setDate(date.getDate() + amount);
+ break;
+ case "month":
+ var month = date.getMonth();
+ newIslamDate.setMonth(month + amount);
+ break;
+ case "hour":
+ newIslamDate.setHours(date.getHours() + amount);
+ break;
+ case "minute":
+ newIslamDate._addMinutes(amount);
+ break;
+ case "second":
+ newIslamDate._addSeconds(amount);
+ break;
+ case "millisecond":
+ newIslamDate._addMilliseconds(amount);
+ break;
+ }
+
+ return newIslamDate; // dojox.date.islamic.Date
+};
+
+dojox.date.islamic.difference = function(/*dojox.date.islamic.Date*/date1, /*dojox.date.islamic.Date?*/date2, /*String?*/interval){
+ // based on and similar to dojo.date.difference
+ // summary:
+ // date2 - date1
+ // date2 is islamic.Date object. If not specified, the current islamic.Date is used.
+ // interval:
+ // A string representing the interval. One of the following:
+ // "year", "month", "day", "hour", "minute", "second",
+ // "millisecond", "week", "weekday"
+ // Defaults to "day".
+
+ date2 = date2 || new islamicDate();
+ interval = interval || "day";
+ var yearDiff = date2.getFullYear() - date1.getFullYear();
+ var delta = 1; // Integer return value
+ switch(interval){
+ case "weekday":
+ var days = Math.round(dojox.date.islamic.difference(date1, date2, "day"));
+ var weeks = parseInt(dojox.date.islamic.difference(date1, date2, "week"));
+ var mod = days % 7;
+
+ // Even number of weeks
+ if(mod == 0){
+ days = weeks*5;
+ }else{
+ // Weeks plus spare change (< 7 days)
+ var adj = 0;
+ var aDay = date1.getDay();
+ var bDay = date2.getDay();
+
+ weeks = parseInt(days/7);
+ mod = days % 7;
+ // Mark the date advanced by the number of
+ // round weeks (may be zero)
+ var dtMark = new islamicDate(date1);
+ dtMark.setDate(dtMark.getDate()+(weeks*7));
+ var dayMark = dtMark.getDay();
+
+ // Spare change days -- 6 or less
+ if(days > 0){
+ switch(true){
+ // Range starts on Fri
+ case aDay == 5:
+ adj = -1;
+ break;
+ // Range starts on Sat
+ case aDay == 6:
+ adj = 0;
+ break;
+ // Range ends on Fri
+ case bDay == 5:
+ adj = -1;
+ break;
+ // Range ends on Sat
+ case bDay == 6:
+ adj = -2;
+ break;
+ // Range contains weekend
+ case (dayMark + mod) > 5:
+ adj = -2;
+ }
+ }else if(days < 0){
+ switch(true){
+ // Range starts on Fri
+ case aDay == 5:
+ adj = 0;
+ break;
+ // Range starts on Sat
+ case aDay == 6:
+ adj = 1;
+ break;
+ // Range ends on Fri
+ case bDay == 5:
+ adj = 2;
+ break;
+ // Range ends on Sat
+ case bDay == 6:
+ adj = 1;
+ break;
+ // Range contains weekend
+ case (dayMark + mod) < 0:
+ adj = 2;
+ }
+ }
+ days += adj;
+ days -= (weeks*2);
+ }
+ delta = days;
+ break;
+ case "year":
+ delta = yearDiff;
+ break;
+ case "month":
+ var startdate = (date2.toGregorian() > date1.toGregorian()) ? date2 : date1; // more
+ var enddate = (date2.toGregorian() > date1.toGregorian()) ? date1 : date2;
+
+ var month1 = startdate.getMonth();
+ var month2 = enddate.getMonth();
+
+ if (yearDiff == 0){
+ delta = startdate.getMonth() - enddate.getMonth() ;
+ }else{
+ delta = 12-month2;
+ delta += month1;
+ var i = enddate.getFullYear()+1;
+ var e = startdate.getFullYear();
+ for (i; i < e; i++){
+ delta += 12;
+ }
+ }
+ if (date2.toGregorian() < date1.toGregorian()){
+ delta = -delta;
+ }
+ break;
+ case "week":
+ // Truncate instead of rounding
+ // Don't use Math.floor -- value may be negative
+ delta = parseInt(dojox.date.islamic.difference(date1, date2, "day")/7);
+ break;
+ case "day":
+ delta /= 24;
+ // fallthrough
+ case "hour":
+ delta /= 60;
+ // fallthrough
+ case "minute":
+ delta /= 60;
+ // fallthrough
+ case "second":
+ delta /= 1000;
+ // fallthrough
+ case "millisecond":
+ delta *= date2.toGregorian().getTime()- date1.toGregorian().getTime();
+ }
+
+ // Round for fractional values and DST leaps
+ return Math.round(delta); // Number (integer)
+};
+return dojox.date.islamic;
+}); \ No newline at end of file
diff --git a/js/dojo-1.7.2/dojox/date/islamic/Date.js b/js/dojo-1.7.2/dojox/date/islamic/Date.js
new file mode 100644
index 0000000..938e0b3
--- /dev/null
+++ b/js/dojo-1.7.2/dojox/date/islamic/Date.js
@@ -0,0 +1,425 @@
+//>>built
+define("dojox/date/islamic/Date", ["dojo/_base/kernel", "dojo/_base/declare", "dojo/date"], function(dojo, declare, dd){
+
+dojo.getObject("date.buddhist.Date", true, dojox);
+dojo.experimental("dojox.date.buddhist.Date");
+
+dojo.declare("dojox.date.islamic.Date", null, {
+ // summary: The component defines the Islamic (Hijri) Calendar Object
+ //
+ // description:
+ // This module is similar to the Date() object provided by JavaScript
+ //
+ // example:
+ // | dojo.require("dojox.date.islamic.Date");
+ // |
+ // | var date = new dojox.date.islamic.Date();
+ // | document.writeln(date.getFullYear()+'\'+date.getMonth()+'\'+date.getDate());
+
+
+ _date: 0,
+ _month: 0,
+ _year: 0,
+ _hours: 0,
+ _minutes: 0,
+ _seconds: 0,
+ _milliseconds: 0,
+ _day: 0,
+ _GREGORIAN_EPOCH : 1721425.5,
+ _ISLAMIC_EPOCH : 1948439.5,
+
+ constructor: function(){
+ // summary: This is the constructor
+ // description:
+ // This function initialize the date object values
+ //
+ // example:
+ // | var date1 = new dojox.date.islamic.Date();
+ // |
+ // | var date2 = new dojox.date.islamic.Date("12\2\1429");
+ // |
+ // | var date3 = new dojox.date.islamic.Date(date2);
+ // |
+ // | var date4 = new dojox.date.islamic.Date(1429,2,12);
+
+ var len = arguments.length;
+ if(!len){// use the current date value, added "" to the similarity to date
+ this.fromGregorian(new Date());
+ }else if(len == 1){
+ var arg0 = arguments[0];
+ if(typeof arg0 == "number"){ // this is time "valueof"
+ arg0 = new Date(arg0);
+ }
+
+ if(arg0 instanceof Date){
+ this.fromGregorian(arg0);
+ }else if(arg0 == ""){
+ // date should be invalid. Dijit relies on this behavior.
+ this._date = new Date(""); //TODO: should this be NaN? _date is not a Date object
+ }else{ // this is Islamic.Date object
+ this._year = arg0._year;
+ this._month = arg0._month;
+ this._date = arg0._date;
+ this._hours = arg0._hours;
+ this._minutes = arg0._minutes;
+ this._seconds = arg0._seconds;
+ this._milliseconds = arg0._milliseconds;
+ }
+ }else if(len >=3){
+ // YYYY MM DD arguments passed, month is from 0-12
+ this._year += arguments[0];
+ this._month += arguments[1];
+ this._date += arguments[2];
+ this._hours += arguments[3] || 0;
+ this._minutes += arguments[4] || 0;
+ this._seconds += arguments[5] || 0;
+ this._milliseconds += arguments[6] || 0;
+ }
+ },
+
+ getDate:function(){
+ // summary: This function returns the date value (1 - 30)
+ //
+ // example:
+ // | var date1 = new dojox.date.islamic.Date();
+ // |
+ // | document.writeln(date1.getDate);
+ return this._date;
+ },
+
+ getMonth:function(){
+ // summary: This function return the month value ( 0 - 11 )
+ //
+ // example:
+ // | var date1 = new dojox.date.islamic.Date();
+ // |
+ // | document.writeln(date1.getMonth()+1);
+
+ return this._month;
+ },
+
+ getFullYear:function(){
+ // summary: This function return the Year value
+ //
+ // example:
+ // | var date1 = new dojox.date.islamic.Date();
+ // |
+ // | document.writeln(date1.getFullYear());
+
+ return this._year;
+ },
+
+ getDay:function(){
+ // summary: This function return Week Day value ( 0 - 6 )
+ //
+ // example:
+ // | var date1 = new dojox.date.islamic.Date();
+ // |
+ // | document.writeln(date1.getDay());
+
+ return this.toGregorian().getDay();
+ },
+
+ getHours:function(){
+ //summary: returns the Hour value
+ return this._hours;
+ },
+
+ getMinutes:function(){
+ //summary: returns the Minuites value
+ return this._minutes;
+ },
+
+ getSeconds:function(){
+ //summary: returns the seconde value
+ return this._seconds;
+ },
+
+ getMilliseconds:function(){
+ //summary: returns the Milliseconds value
+ return this._milliseconds;
+ },
+
+ setDate: function(/*number*/date){
+ // summary: This function sets the Date
+ // example:
+ // | var date1 = new dojox.date.islamic.Date();
+ // | date1.setDate(2);
+
+ date = parseInt(date);
+
+ if(date > 0 && date <= this.getDaysInIslamicMonth(this._month, this._year)){
+ this._date = date;
+ }else{
+ var mdays;
+ if(date>0){
+ for(mdays = this.getDaysInIslamicMonth(this._month, this._year);
+ date > mdays;
+ date -= mdays,mdays =this.getDaysInIslamicMonth(this._month, this._year)){
+ this._month++;
+ if(this._month >= 12){this._year++; this._month -= 12;}
+ }
+
+ this._date = date;
+ }else{
+ for(mdays = this.getDaysInIslamicMonth((this._month-1)>=0 ?(this._month-1) :11 ,((this._month-1)>=0)? this._year: this._year-1);
+ date <= 0;
+ mdays = this.getDaysInIslamicMonth((this._month-1)>=0 ? (this._month-1) :11,((this._month-1)>=0)? this._year: this._year-1)){
+ this._month--;
+ if(this._month < 0){this._year--; this._month += 12;}
+
+ date+=mdays;
+ }
+ this._date = date;
+ }
+ }
+ return this;
+ },
+
+ setFullYear:function(/*number*/year){
+ // summary: This function set Year
+ //
+ // example:
+ // | var date1 = new dojox.date.islamic.Date();
+ // | date1.setYear(1429);
+
+ this._year = +year;
+ },
+
+ setMonth: function(/*number*/month) {
+ // summary: This function set Month
+ //
+ // example:
+ // | var date1 = new dojox.date.islamic.Date();
+ // | date1.setMonth(2);
+
+ this._year += Math.floor(month / 12);
+ if(month > 0){
+ this._month = Math.floor(month % 12);
+ }else{
+ this._month = Math.floor(((month % 12) + 12) % 12);
+ }
+ },
+
+ setHours:function(){
+ //summary: set the Hours
+ var hours_arg_no = arguments.length;
+ var hours = 0;
+ if(hours_arg_no >= 1){
+ hours = parseInt(arguments[0]);
+ }
+
+ if(hours_arg_no >= 2){
+ this._minutes = parseInt(arguments[1]);
+ }
+
+ if(hours_arg_no >= 3){
+ this._seconds = parseInt(arguments[2]);
+ }
+
+ if(hours_arg_no == 4){
+ this._milliseconds = parseInt(arguments[3]);
+ }
+
+ while(hours >= 24){
+ this._date++;
+ var mdays = this.getDaysInIslamicMonth(this._month, this._year);
+ if(this._date > mdays){
+ this._month ++;
+ if(this._month >= 12){this._year++; this._month -= 12;}
+ this._date -= mdays;
+ }
+ hours -= 24;
+ }
+ this._hours = hours;
+ },
+
+ _addMinutes: function(/*Number*/minutes){
+ minutes += this._minutes;
+ this.setMinutes(minutes);
+ this.setHours(this._hours + parseInt(minutes / 60));
+ return this;
+ },
+
+ _addSeconds: function(/*Number*/seconds){
+ seconds += this._seconds;
+ this.setSeconds(seconds);
+ this._addMinutes(parseInt(seconds / 60));
+ return this;
+ },
+
+ _addMilliseconds: function(/*Number*/milliseconds){
+ milliseconds += this._milliseconds;
+ this.setMilliseconds(milliseconds);
+ this._addSeconds(parseInt(milliseconds / 1000));
+ return this;
+ },
+
+ setMinutes: function(/*Number*/minutes){
+ //summary: sets the minutes (0-59) only.
+ this._minutes = minutes % 60;
+ return this;
+ },
+
+ setSeconds: function(/*Number*/seconds){
+ //summary: sets the seconds (0-59) only.
+ this._seconds = seconds % 60;
+ return this;
+ },
+
+ setMilliseconds: function(/*Number*/milliseconds){
+ this._milliseconds = milliseconds % 1000;
+ return this;
+ },
+
+ toString:function(){
+ // summary: This returns a string representation of the date in "DDDD MMMM DD YYYY HH:MM:SS" format
+ // example:
+ // | var date1 = new dojox.date.islamic.Date();
+ // | document.writeln(date1.toString());
+
+ //FIXME: TZ/DST issues?
+ var x = new Date();
+ x.setHours(this._hours);
+ x.setMinutes(this._minutes);
+ x.setSeconds(this._seconds);
+ x.setMilliseconds(this._milliseconds);
+ return this._month+" "+ this._date + " " + this._year + " " + x.toTimeString();
+ },
+
+
+ toGregorian:function(){
+ // summary: This returns the equevalent Grogorian date value in Date object
+ // example:
+ // | var dateIslamic = new dojox.date.islamic.Date(1429,11,20);
+ // | var dateGregorian = dateIslamic.toGregorian();
+
+ var hYear = this._year;
+ var hMonth = this._month;
+ var hDate = this._date;
+ var julianDay = hDate + Math.ceil(29.5 * hMonth) + (hYear - 1) * 354
+ + Math.floor((3 + (11 * hYear)) / 30) + this._ISLAMIC_EPOCH - 1;
+
+ var wjd = Math.floor(julianDay - 0.5) + 0.5,
+ depoch = wjd - this._GREGORIAN_EPOCH,
+ quadricent = Math.floor(depoch / 146097),
+ dqc = this._mod(depoch, 146097),
+ cent = Math.floor(dqc / 36524),
+ dcent = this._mod(dqc, 36524),
+ quad = Math.floor(dcent / 1461),
+ dquad = this._mod(dcent, 1461),
+ yindex = Math.floor(dquad / 365),
+ year = (quadricent * 400) + (cent * 100) + (quad * 4) + yindex;
+ if(!(cent == 4 || yindex == 4)){
+ year++;
+ }
+
+ var gYearStart = this._GREGORIAN_EPOCH + (365 * (year - 1)) + Math.floor((year - 1) / 4)
+ - ( Math.floor((year - 1) / 100)) + Math.floor((year - 1) / 400);
+
+ var yearday = wjd - gYearStart;
+
+ var tjd = (this._GREGORIAN_EPOCH - 1) + (365 * (year - 1)) + Math.floor((year - 1) / 4)
+ -( Math.floor((year - 1) / 100)) + Math.floor((year - 1) / 400) + Math.floor( (739 / 12)
+ + ( (dd.isLeapYear(new Date(year,3,1)) ? -1 : -2)) + 1);
+
+ var leapadj = ((wjd < tjd ) ? 0 : (dd.isLeapYear(new Date(year,3,1)) ? 1 : 2));
+
+ var month = Math.floor((((yearday + leapadj) * 12) + 373) / 367);
+ var tjd2 = (this._GREGORIAN_EPOCH - 1) + (365 * (year - 1))
+ + Math.floor((year - 1) / 4) - (Math.floor((year - 1) / 100))
+ + Math.floor((year - 1) / 400) + Math.floor((((367 * month) - 362) / 12)
+ + ((month <= 2) ? 0 : (dd.isLeapYear(new Date(year,month,1)) ? -1 : -2)) + 1);
+
+ var day = (wjd - tjd2) + 1;
+
+ var gdate = new Date(year, (month - 1), day, this._hours, this._minutes, this._seconds, this._milliseconds);
+
+ return gdate;
+ },
+
+ //TODO: would it make more sense to make this a constructor option? or a static?
+ // ported from the Java class com.ibm.icu.util.IslamicCalendar from ICU4J v3.6.1 at http://www.icu-project.org/
+ fromGregorian:function(/*Date*/gdate){
+ // summary: This function returns the equivalent Islamic Date value for the Gregorian Date
+ // example:
+ // | var dateIslamic = new dojox.date.islamic.Date();
+ // | var dateGregorian = new Date(2008,10,12);
+ // | dateIslamic.fromGregorian(dateGregorian);
+
+ var date = new Date(gdate);
+ var gYear = date.getFullYear(),
+ gMonth = date.getMonth(),
+ gDay = date.getDate();
+
+ var julianDay = (this._GREGORIAN_EPOCH - 1) + (365 * (gYear - 1)) + Math.floor((gYear - 1) / 4)
+ + (-Math.floor((gYear - 1) / 100)) + Math.floor((gYear - 1) / 400)
+ + Math.floor((((367 * (gMonth+1)) - 362) / 12)
+ + (((gMonth+1) <= 2) ? 0 : (dd.isLeapYear(date) ? -1 : -2)) + gDay);
+ julianDay = Math.floor(julianDay) + 0.5;
+
+ var days = julianDay - this._ISLAMIC_EPOCH;
+ var hYear = Math.floor( (30 * days + 10646) / 10631.0 );
+ var hMonth = Math.ceil((days - 29 - this._yearStart(hYear)) / 29.5 );
+ hMonth = Math.min(hMonth, 11);
+ var hDay = Math.ceil(days - this._monthStart(hYear, hMonth)) + 1;
+
+ this._date = hDay;
+ this._month = hMonth;
+ this._year = hYear;
+ this._hours = date.getHours();
+ this._minutes = date.getMinutes();
+ this._seconds = date.getSeconds();
+ this._milliseconds = date.getMilliseconds();
+ this._day = date.getDay();
+ return this;
+ },
+
+ valueOf:function(){
+ // summary: This function returns The stored time value in milliseconds
+ // since midnight, January 1, 1970 UTC
+
+ return this.toGregorian().valueOf();
+ },
+
+ // ported from the Java class com.ibm.icu.util.IslamicCalendar from ICU4J v3.6.1 at http://www.icu-project.org/
+ _yearStart:function(/*Number*/year){
+ //summary: return start of Islamic year
+ return (year-1)*354 + Math.floor((3+11*year)/30.0);
+ },
+
+ // ported from the Java class com.ibm.icu.util.IslamicCalendar from ICU4J v3.6.1 at http://www.icu-project.org/
+ _monthStart:function(/*Number*/year, /*Number*/month){
+ //summary: return the start of Islamic Month
+ return Math.ceil(29.5*month) +
+ (year-1)*354 + Math.floor((3+11*year)/30.0);
+ },
+
+ // ported from the Java class com.ibm.icu.util.IslamicCalendar from ICU4J v3.6.1 at http://www.icu-project.org/
+ _civilLeapYear:function(/*Number*/year){
+ //summary: return Boolean value if Islamic leap year
+ return (14 + 11 * year) % 30 < 11;
+ },
+
+ // ported from the Java class com.ibm.icu.util.IslamicCalendar from ICU4J v3.6.1 at http://www.icu-project.org/
+ getDaysInIslamicMonth:function(/*Number*/month, /*Number*/ year){
+ //summary: returns the number of days in the given Islamic Month
+ var length = 0;
+ length = 29 + ((month+1) % 2);
+ if(month == 11 && this._civilLeapYear(year)){
+ length++;
+ }
+ return length;
+ },
+
+ _mod:function(a, b){
+ return a - (b * Math.floor(a / b));
+ }
+});
+
+//TODOC
+dojox.date.islamic.Date.getDaysInIslamicMonth = function(/*dojox.date.islamic.Date*/month){
+ return new dojox.date.islamic.Date().getDaysInIslamicMonth(month.getMonth(),month.getFullYear()); // dojox.date.islamic.Date
+};
+return dojox.date.islamic.Date;
+});
diff --git a/js/dojo-1.7.2/dojox/date/islamic/locale.js b/js/dojo-1.7.2/dojox/date/islamic/locale.js
new file mode 100644
index 0000000..484f23f
--- /dev/null
+++ b/js/dojo-1.7.2/dojox/date/islamic/locale.js
@@ -0,0 +1,417 @@
+//>>built
+define("dojox/date/islamic/locale", ["dojo/_base/kernel", "dojo/_base/lang", "dojo/_base/array", "dojo/date", "dojo/i18n", "dojo/regexp", "dojo/string", "./Date", "dojo/i18n!dojo/cldr/nls/islamic"],
+ function(dojo, dlang, darray, dd, i18n, regexp, string, islamicDate){
+
+ dojo.getObject("date.islamic.locale", true, dojox);
+ dojo.experimental("dojox.date.islamic.locale");
+
+ dojo.requireLocalization("dojo.cldr", "islamic");
+
+ // Format a pattern without literals
+ function formatPattern(dateObject, bundle, locale, fullYear, pattern){
+
+ return pattern.replace(/([a-z])\1*/ig, function(match){
+ var s, pad;
+ var c = match.charAt(0);
+ var l = match.length;
+ var widthList = ["abbr", "wide", "narrow"];
+
+ switch(c){
+ case 'G':
+ s = bundle["eraAbbr"][0];
+ break;
+ case 'y':
+ s = String(dateObject.getFullYear());
+ break;
+ case 'M':
+ var m = dateObject.getMonth();
+ if(l<3){
+ s = m+1; pad = true;
+ }else{
+ var propM = ["months", "format", widthList[l-3]].join("-");
+ s = bundle[propM][m];
+ }
+ break;
+ case 'd':
+ s = dateObject.getDate(true); pad = true;
+ break;
+ case 'E':
+ var d = dateObject.getDay();
+ if(l<3){
+ s = d+1; pad = true;
+ }else{
+ var propD = ["days", "format", widthList[l-3]].join("-");
+ s = bundle[propD][d];
+ }
+ break;
+ case 'a':
+ var timePeriod = (dateObject.getHours() < 12) ? 'am' : 'pm';
+ s = bundle['dayPeriods-format-wide-' + timePeriod];
+ break;
+ case 'h':
+ case 'H':
+ case 'K':
+ case 'k':
+ var h = dateObject.getHours();
+ switch (c){
+ case 'h': // 1-12
+ s = (h % 12) || 12;
+ break;
+ case 'H': // 0-23
+ s = h;
+ break;
+ case 'K': // 0-11
+ s = (h % 12);
+ break;
+ case 'k': // 1-24
+ s = h || 24;
+ break;
+ }
+ pad = true;
+ break;
+ case 'm':
+ s = dateObject.getMinutes(); pad = true;
+ break;
+ case 's':
+ s = dateObject.getSeconds(); pad = true;
+ break;
+ case 'S':
+ s = Math.round(dateObject.getMilliseconds() * Math.pow(10, l-3)); pad = true;
+ break;
+ case 'z':
+ // We only have one timezone to offer; the one from the browser
+ s = dd.getTimezoneName(dateObject.toGregorian());
+ if(s){ break; }
+ l = 4;
+ // fallthrough... use GMT if tz not available
+ case 'Z':
+ var offset = dateObject.toGregorian().getTimezoneOffset();
+ var tz = [
+ (offset <= 0 ? "+" : "-"),
+ string.pad(Math.floor(Math.abs(offset) / 60), 2),
+ string.pad(Math.abs(offset) % 60, 2)
+ ];
+ if(l == 4){
+ tz.splice(0, 0, "GMT");
+ tz.splice(3, 0, ":");
+ }
+ s = tz.join("");
+ break;
+ default:
+ throw new Error("dojox.date.islamic.locale.formatPattern: invalid pattern char: "+pattern);
+ }
+ if(pad){ s = string.pad(s, l); }
+ return s;
+ });
+ }
+
+ // based on and similar to dojo.date.locale.format
+ dojox.date.islamic.locale.format = function(/*islamic.Date*/dateObject, /*Object?*/options){
+ // summary:
+ // Format a Date object as a String, using settings.
+ options = options || {};
+
+ var locale = i18n.normalizeLocale(options.locale);
+ var formatLength = options.formatLength || 'short';
+ var bundle = dojox.date.islamic.locale._getIslamicBundle(locale);
+ var str = [];
+
+ var sauce = dojo.hitch(this, formatPattern, dateObject, bundle, locale, options.fullYear);
+ if(options.selector == "year"){
+ var year = dateObject.getFullYear();
+ return year;
+ }
+ if(options.selector != "time"){
+ var datePattern = options.datePattern || bundle["dateFormat-"+formatLength];
+ if(datePattern){str.push(_processPattern(datePattern, sauce));}
+ }
+ if(options.selector != "date"){
+ var timePattern = options.timePattern || bundle["timeFormat-"+formatLength];
+ if(timePattern){str.push(_processPattern(timePattern, sauce));}
+ }
+ var result = str.join(" "); //TODO: use locale-specific pattern to assemble date + time
+
+ return result; // String
+ };
+
+ dojox.date.islamic.locale.regexp = function(/*object?*/options){
+ // based on and similar to dojo.date.locale.regexp
+ // summary:
+ // Builds the regular needed to parse a islamic.Date
+ return dojox.date.islamic.locale._parseInfo(options).regexp; // String
+ };
+
+ dojox.date.islamic.locale._parseInfo = function(/*oblect?*/options){
+ /* based on and similar to dojo.date.locale._parseInfo */
+
+ options = options || {};
+ var locale = i18n.normalizeLocale(options.locale);
+ var bundle = dojox.date.islamic.locale._getIslamicBundle(locale);
+ var formatLength = options.formatLength || 'short';
+ var datePattern = options.datePattern || bundle["dateFormat-" + formatLength];
+ var timePattern = options.timePattern || bundle["timeFormat-" + formatLength];
+
+ var pattern;
+ if(options.selector == 'date'){
+ pattern = datePattern;
+ }else if(options.selector == 'time'){
+ pattern = timePattern;
+ }else{
+ pattern = (typeof (timePattern) == "undefined") ? datePattern : datePattern + ' ' + timePattern;
+ }
+
+ var tokens = [];
+
+ var re = _processPattern(pattern, dojo.hitch(this, _buildDateTimeRE, tokens, bundle, options));
+ return {regexp: re, tokens: tokens, bundle: bundle};
+ };
+
+ dojox.date.islamic.locale.parse = function(/*String*/value, /*Object?*/options){
+ // based on and similar to dojo.date.locale.parse
+ // summary: This function parse string date value according to options
+
+ value = value.replace(/[\u200E\u200F\u202A\u202E]/g, ""); //remove bidi non-printing chars
+
+ if(!options){ options={}; }
+ var info = dojox.date.islamic.locale._parseInfo(options);
+
+ var tokens = info.tokens, bundle = info.bundle;
+ var regexp = info.regexp.replace(/[\u200E\u200F\u202A\u202E]/g, ""); //remove bidi non-printing chars from the pattern
+ var re = new RegExp("^" + regexp + "$");
+
+ var match = re.exec(value);
+
+ var locale = i18n.normalizeLocale(options.locale);
+
+ if(!match){
+ console.debug("dojox.date.islamic.locale.parse: value "+value+" doesn't match pattern " + re);
+ return null;
+ } // null
+
+ var date, date1;
+
+ var result = [1389,0,1,0,0,0,0]; //FIXME: islamic date for [1970,0,1,0,0,0,0] used in gregorian locale
+ var amPm = "";
+ var mLength = 0;
+ var widthList = ["abbr", "wide", "narrow"];
+ var valid = dojo.every(match, function(v, i){
+ if(!i){return true;}
+ var token=tokens[i-1];
+ var l=token.length;
+ switch(token.charAt(0)){
+ case 'y':
+ result[0] = Number(v);
+ break;
+ case 'M':
+ if(l>2){
+ var months = bundle['months-format-' + widthList[l-3]].concat();
+ if(!options.strict){
+ //Tolerate abbreviating period in month part
+ //Case-insensitive comparison
+ v = v.replace(".","").toLowerCase();
+ months = dojo.map(months, function(s){ return s ? s.replace(".","").toLowerCase() : s; } );
+ }
+ v = dojo.indexOf(months, v);
+ if(v == -1){
+ return false;
+ }
+ mLength = l;
+ }else{
+ v--;
+ }
+ result[1] = Number(v);
+ break;
+ case 'D':
+ result[1] = 0;
+ // fallthrough...
+ case 'd':
+ result[2] = Number(v);
+ break;
+ case 'a': //am/pm
+ var am = options.am || bundle['dayPeriods-format-wide-am'],
+ pm = options.pm || bundle['dayPeriods-format-wide-pm'];
+ if(!options.strict){
+ var period = /\./g;
+ v = v.replace(period,'').toLowerCase();
+ am = am.replace(period,'').toLowerCase();
+ pm = pm.replace(period,'').toLowerCase();
+ }
+ if(options.strict && v != am && v != pm){
+ return false;
+ }
+
+ // we might not have seen the hours field yet, so store the state and apply hour change later
+ amPm = (v == pm) ? 'p' : (v == am) ? 'a' : '';
+ break;
+ case 'K': //hour (1-24)
+ if(v == 24){ v = 0; }
+ // fallthrough...
+ case 'h': //hour (1-12)
+ case 'H': //hour (0-23)
+ case 'k': //hour (0-11)
+ //in the 12-hour case, adjusting for am/pm requires the 'a' part
+ //which could come before or after the hour, so we will adjust later
+ result[3] = Number(v);
+ break;
+ case 'm': //minutes
+ result[4] = Number(v);
+ break;
+ case 's': //seconds
+ result[5] = Number(v);
+ break;
+ case 'S': //milliseconds
+ result[6] = Number(v);
+ }
+ return true;
+ });
+
+ var hours = +result[3];
+ if(amPm === 'p' && hours < 12){
+ result[3] = hours + 12; //e.g., 3pm -> 15
+ }else if(amPm === 'a' && hours == 12){
+ result[3] = 0; //12am -> 0
+ }
+ var dateObject = new islamicDate(result[0], result[1], result[2], result[3], result[4], result[5], result[6]);
+ return dateObject;
+ };
+
+ function _processPattern(pattern, applyPattern, applyLiteral, applyAll){
+ //summary: Process a pattern with literals in it
+
+ // Break up on single quotes, treat every other one as a literal, except '' which becomes '
+ var identity = function(x){return x;};
+ applyPattern = applyPattern || identity;
+ applyLiteral = applyLiteral || identity;
+ applyAll = applyAll || identity;
+
+ //split on single quotes (which escape literals in date format strings)
+ //but preserve escaped single quotes (e.g., o''clock)
+ var chunks = pattern.match(/(''|[^'])+/g);
+ var literal = pattern.charAt(0) == "'";
+
+ dojo.forEach(chunks, function(chunk, i){
+ if(!chunk){
+ chunks[i]='';
+ }else{
+ chunks[i]=(literal ? applyLiteral : applyPattern)(chunk);
+ literal = !literal;
+ }
+ });
+ return applyAll(chunks.join(''));
+ }
+
+ function _buildDateTimeRE (tokens, bundle, options, pattern){
+ // based on and similar to dojo.date.locale._buildDateTimeRE
+ //
+
+ pattern = regexp.escapeString(pattern);
+ var locale = i18n.normalizeLocale(options.locale);
+
+ return pattern.replace(/([a-z])\1*/ig, function(match){
+
+ // Build a simple regexp. Avoid captures, which would ruin the tokens list
+ var s;
+ var c = match.charAt(0);
+ var l = match.length;
+ var p2 = '', p3 = '';
+ if(options.strict){
+ if(l > 1){ p2 = '0' + '{'+(l-1)+'}'; }
+ if(l > 2){ p3 = '0' + '{'+(l-2)+'}'; }
+ }else{
+ p2 = '0?'; p3 = '0{0,2}';
+ }
+ switch(c){
+ case 'y':
+ s = '\\d+';
+ break;
+ case 'M':
+ s = (l>2) ? '\\S+ ?\\S+' : p2+'[1-9]|1[0-2]';
+ break;
+ case 'd':
+ s = '[12]\\d|'+p2+'[1-9]|3[01]';
+ break;
+ case 'E':
+ s = '\\S+';
+ break;
+ case 'h': //hour (1-12)
+ s = p2+'[1-9]|1[0-2]';
+ break;
+ case 'k': //hour (0-11)
+ s = p2+'\\d|1[01]';
+ break;
+ case 'H': //hour (0-23)
+ s = p2+'\\d|1\\d|2[0-3]';
+ break;
+ case 'K': //hour (1-24)
+ s = p2+'[1-9]|1\\d|2[0-4]';
+ break;
+ case 'm':
+ case 's':
+ s = p2+'\\d|[0-5]\\d';
+ break;
+ case 'S':
+ s = '\\d{'+l+'}';
+ break;
+ case 'a':
+ var am = options.am || bundle['dayPeriods-format-wide-am'],
+ pm = options.pm || bundle['dayPeriods-format-wide-pm'];
+ if(options.strict){
+ s = am + '|' + pm;
+ }else{
+ s = am + '|' + pm;
+ if(am != am.toLowerCase()){ s += '|' + am.toLowerCase(); }
+ if(pm != pm.toLowerCase()){ s += '|' + pm.toLowerCase(); }
+ }
+ break;
+ default:
+ s = ".*";
+ }
+ if(tokens){ tokens.push(match); }
+ return "(" + s + ")"; // add capture
+ }).replace(/[\xa0 ]/g, "[\\s\\xa0]"); // normalize whitespace. Need explicit handling of \xa0 for IE. */
+ }
+
+ var _customFormats = [];
+ dojox.date.islamic.locale.addCustomFormats = function(/*String*/packageName, /*String*/bundleName){
+ // summary:
+ // Add a reference to a bundle containing localized custom formats to be
+ // used by date/time formatting and parsing routines.
+ _customFormats.push({pkg:packageName,name:bundleName});
+ };
+
+ dojox.date.islamic.locale._getIslamicBundle = function(/*String*/locale){
+ var islamic = {};
+ dojo.forEach(_customFormats, function(desc){
+ var bundle = i18n.getLocalization(desc.pkg, desc.name, locale);
+ islamic = dojo.mixin(islamic, bundle);
+ }, this);
+ return islamic; /*Object*/
+ };
+
+ dojox.date.islamic.locale.addCustomFormats("dojo.cldr","islamic");
+
+ dojox.date.islamic.locale.getNames = function(/*String*/item, /*String*/type, /*String?*/context, /*String?*/locale, /*islamic Date Object?*/date){
+ // summary:
+ // Used to get localized strings from dojo.cldr for day or month names.
+ var label;
+ var lookup = dojox.date.islamic.locale._getIslamicBundle(locale);
+ var props = [item, context, type];
+ if(context == 'standAlone'){
+ var key = props.join('-');
+ label = lookup[key];
+ // Fall back to 'format' flavor of name
+ if(label[0] == 1){ label = undefined; } // kludge, in the absence of real aliasing support in dojo.cldr
+ }
+ props[1] = 'format';
+
+ // return by copy so changes won't be made accidentally to the in-memory model
+ return (label || lookup[props.join('-')]).concat(); /*Array*/
+ };
+
+
+ dojox.date.islamic.locale.weekDays = dojox.date.islamic.locale.getNames('days', 'wide', 'format');
+
+ dojox.date.islamic.locale.months = dojox.date.islamic.locale.getNames('months', 'wide', 'format');
+
+ return dojox.date.islamic.locale;
+}); \ No newline at end of file
diff --git a/js/dojo-1.7.2/dojox/date/php.js b/js/dojo-1.7.2/dojox/date/php.js
new file mode 100644
index 0000000..2285749
--- /dev/null
+++ b/js/dojo-1.7.2/dojox/date/php.js
@@ -0,0 +1,310 @@
+//>>built
+define("dojox/date/php", ["dojo/_base/kernel", "dojo/_base/lang","dojo/date","dojox/string/tokenize"], function(dojo,dlang,ddate,dxst){
+dojo.getObject("date.php", true, dojox);
+
+dojox.date.php.format = function(/*Date*/ date, /*String*/ format){
+ // summary: Get a formatted string for a given date object
+ var df = new dojox.date.php.DateFormat(format);
+ return df.format(date);
+}
+
+dojox.date.php.DateFormat = function(/*String*/ format){
+ // summary: Format the internal date object
+ if(!this.regex){
+ var keys = [];
+ for(var key in this.constructor.prototype){
+ if(dojo.isString(key) && key.length == 1 && dojo.isFunction(this[key])){
+ keys.push(key);
+ }
+ }
+ this.constructor.prototype.regex = new RegExp("(?:(\\\\.)|([" + keys.join("") + "]))", "g");
+ }
+
+ var replacements = [];
+
+ this.tokens = dxst(format, this.regex, function(escape, token, i){
+ if(token){
+ replacements.push([i, token]);
+ return token;
+ }
+ if(escape){
+ return escape.charAt(1);
+ }
+ });
+
+ this.replacements = replacements;
+}
+dojo.extend(dojox.date.php.DateFormat, {
+ weekdays: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
+ weekdays_3: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
+ months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
+ months_3: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
+ monthdays: [31,28,31,30,31,30,31,31,30,31,30,31],
+
+ format: function(/*Date*/ date){
+ this.date = date;
+ for(var i = 0, replacement; replacement = this.replacements[i]; i++){
+ this.tokens[replacement[0]] = this[replacement[1]]();
+ }
+ return this.tokens.join("");
+ },
+
+ // Day
+
+ d: function(){
+ // summary: Day of the month, 2 digits with leading zeros
+ var j = this.j();
+ return (j.length == 1) ? "0" + j : j;
+ },
+
+ D: function(){
+ // summary: A textual representation of a day, three letters
+ return this.weekdays_3[this.date.getDay()];
+ },
+
+ j: function(){
+ // summary: Day of the month without leading zeros
+ return this.date.getDate() + "";
+ },
+
+ l: function(){
+ // summary: A full textual representation of the day of the week
+ return this.weekdays[this.date.getDay()];
+ },
+
+ N: function(){
+ // summary: ISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)
+ var w = this.w();
+ return (!w) ? 7 : w;
+ },
+
+ S: function(){
+ // summary: English ordinal suffix for the day of the month, 2 characters
+ switch(this.date.getDate()){
+ case 11: case 12: case 13: return "th";
+ case 1: case 21: case 31: return "st";
+ case 2: case 22: return "nd";
+ case 3: case 23: return "rd";
+ default: return "th";
+ }
+ },
+
+ w: function(){
+ // summary: Numeric representation of the day of the week
+ return this.date.getDay() + "";
+ },
+
+ z: function(){
+ // summary: The day of the year (starting from 0)
+ var millis = this.date.getTime() - new Date(this.date.getFullYear(), 0, 1).getTime();
+ return Math.floor(millis/86400000) + "";
+ },
+
+ // Week
+
+ W: function(){
+ // summary: ISO-8601 week number of year, weeks starting on Monday (added in PHP 4.1.0)
+ var week;
+ var jan1_w = new Date(this.date.getFullYear(), 0, 1).getDay() + 1;
+ var w = this.date.getDay() + 1;
+ var z = parseInt(this.z());
+
+ if(z <= (8 - jan1_w) && jan1_w > 4){
+ var last_year = new Date(this.date.getFullYear() - 1, this.date.getMonth(), this.date.getDate());
+ if(jan1_w == 5 || (jan1_w == 6 && ddate.isLeapYear(last_year))){
+ week = 53;
+ }else{
+ week = 52;
+ }
+ }else{
+ var i;
+ if(Boolean(this.L())){
+ i = 366;
+ }else{
+ i = 365;
+ }
+ if((i - z) < (4 - w)){
+ week = 1;
+ }else{
+ var j = z + (7 - w) + (jan1_w - 1);
+ week = Math.ceil(j / 7);
+ if(jan1_w > 4){
+ --week;
+ }
+ }
+ }
+
+ return week;
+ },
+
+ // Month
+
+ F: function(){
+ // summary: A full textual representation of a month, such as January or March
+ return this.months[this.date.getMonth()];
+ },
+
+ m: function(){
+ // summary: Numeric representation of a month, with leading zeros
+ var n = this.n();
+ return (n.length == 1) ? "0" + n : n;
+ },
+
+ M: function(){
+ // summary: A short textual representation of a month, three letters
+ return this.months_3[this.date.getMonth()];
+ },
+
+ n: function(){
+ // summary: Numeric representation of a month, without leading zeros
+ return this.date.getMonth() + 1 + "";
+ },
+
+ t: function(){
+ // summary: Number of days in the given month
+ return (Boolean(this.L()) && this.date.getMonth() == 1) ? 29 : this.monthdays[this.getMonth()];
+ },
+
+ // Year
+
+ L: function(){
+ // summary: Whether it's a leap year
+ return (ddate.isLeapYear(this.date)) ? "1" : "0";
+ },
+
+ o: function(){
+ // summary:
+ // ISO-8601 year number. This has the same value as Y, except that if
+ // the ISO week number (W) belongs to the previous or next year, that year is used instead. (added in PHP 5.1.0)
+ // TODO: Figure out what this means
+ },
+
+ Y: function(){
+ // summary: A full numeric representation of a year, 4 digits
+ return this.date.getFullYear() + "";
+ },
+
+ y: function(){
+ // summary: A two digit representation of a year
+ return this.Y().slice(-2);
+ },
+
+ // Time
+
+ a: function(){
+ // summary: Lowercase Ante meridiem and Post meridiem
+ return this.date.getHours() >= 12 ? "pm" : "am";
+ },
+
+ b: function(){
+ // summary: Uppercase Ante meridiem and Post meridiem
+ return this.a().toUpperCase();
+ },
+
+ B: function(){
+ // summary:
+ // Swatch Internet time
+ // A day is 1,000 beats. All time is measured from GMT + 1
+ var off = this.date.getTimezoneOffset() + 60;
+ var secs = (this.date.getHours() * 3600) + (this.date.getMinutes() * 60) + this.getSeconds() + (off * 60);
+ var beat = Math.abs(Math.floor(secs / 86.4) % 1000) + "";
+ while(beat.length < 2) beat = "0" + beat;
+ return beat;
+ },
+
+ g: function(){
+ // summary: 12-hour format of an hour without leading zeros
+ return (this.date.getHours() > 12) ? this.date.getHours() - 12 + "" : this.date.getHours() + "";
+ },
+
+ G: function(){
+ // summary: 24-hour format of an hour without leading zeros
+ return this.date.getHours() + "";
+ },
+
+ h: function(){
+ // summary: 12-hour format of an hour with leading zeros
+ var g = this.g();
+ return (g.length == 1) ? "0" + g : g;
+ },
+
+ H: function(){
+ // summary: 24-hour format of an hour with leading zeros
+ var G = this.G();
+ return (G.length == 1) ? "0" + G : G;
+ },
+
+ i: function(){
+ // summary: Minutes with leading zeros
+ var mins = this.date.getMinutes() + "";
+ return (mins.length == 1) ? "0" + mins : mins;
+ },
+
+ s: function(){
+ // summary: Seconds, with leading zeros
+ var secs = this.date.getSeconds() + "";
+ return (secs.length == 1) ? "0" + secs : secs;
+ },
+
+ // Timezone
+
+ e: function(){
+ // summary: Timezone identifier (added in PHP 5.1.0)
+ return ddate.getTimezoneName(this.date);
+ },
+
+ I: function(){
+ // summary: Whether or not the date is in daylight saving time
+ // TODO: Can dojo.date do this?
+ },
+
+ O: function(){
+ // summary: Difference to Greenwich time (GMT) in hours
+ var off = Math.abs(this.date.getTimezoneOffset());
+ var hours = Math.floor(off / 60) + "";
+ var mins = (off % 60) + "";
+ if(hours.length == 1) hours = "0" + hours;
+ if(mins.length == 1) hours = "0" + mins;
+ return ((this.date.getTimezoneOffset() < 0) ? "+" : "-") + hours + mins;
+ },
+
+ P: function(){
+ // summary: Difference to Greenwich time (GMT) with colon between hours and minutes (added in PHP 5.1.3)
+ var O = this.O();
+ return O.substring(0, 2) + ":" + O.substring(2, 4);
+ },
+
+ T: function(){
+ // summary: Timezone abbreviation
+
+ // Guess...
+ return this.e().substring(0, 3);
+ },
+
+ Z: function(){
+ // summary:
+ // Timezone offset in seconds. The offset for timezones west of UTC is always negative,
+ // and for those east of UTC is always positive.
+ return this.date.getTimezoneOffset() * -60;
+ },
+
+ // Full Date/Time
+
+ c: function(){
+ // summary: ISO 8601 date (added in PHP 5)
+ return this.Y() + "-" + this.m() + "-" + this.d() + "T" + this.h() + ":" + this.i() + ":" + this.s() + this.P();
+ },
+
+ r: function(){
+ // summary: RFC 2822 formatted date
+ return this.D() + ", " + this.d() + " " + this.M() + " " + this.Y() + " " + this.H() + ":" + this.i() + ":" + this.s() + " " + this.O();
+ },
+
+ U: function(){
+ // summary: Seconds since the Unix Epoch (January 1 1970 00:00:00 GMT)
+ return Math.floor(this.date.getTime() / 1000);
+ }
+
+});
+return dojox.date.php;
+}); \ No newline at end of file
diff --git a/js/dojo-1.7.2/dojox/date/posix.js b/js/dojo-1.7.2/dojox/date/posix.js
new file mode 100644
index 0000000..a06a706
--- /dev/null
+++ b/js/dojo-1.7.2/dojox/date/posix.js
@@ -0,0 +1,291 @@
+//>>built
+define("dojox/date/posix", ["dojo/_base/kernel", "dojo/date", "dojo/date/locale", "dojo/string", "dojo/cldr/supplemental"],
+ function(dojo, dojoDate, dojoDateLocale, dojoString, dojoCldrSupplemental){
+
+dojo.getObject("date.posix", true, dojox);
+
+dojox.date.posix.strftime = function(/*Date*/dateObject, /*String*/format, /*String?*/locale){
+//
+// summary:
+// Formats the date object using the specifications of the POSIX strftime function
+//
+// description:
+// see http://www.opengroup.org/onlinepubs/007908799/xsh/strftime.html
+
+ // zero pad
+ var padChar = null;
+ var _ = function(s, n){
+ return dojoString.pad(s, n || 2, padChar || "0");
+ };
+
+ var bundle = dojoDateLocale._getGregorianBundle(locale);
+
+ var $ = function(property){
+ switch(property){
+ case "a": // abbreviated weekday name according to the current locale
+ return dojoDateLocale.getNames('days', 'abbr', 'format', locale)[dateObject.getDay()];
+
+ case "A": // full weekday name according to the current locale
+ return dojoDateLocale.getNames('days', 'wide', 'format', locale)[dateObject.getDay()];
+
+ case "b":
+ case "h": // abbreviated month name according to the current locale
+ return dojoDateLocale.getNames('months', 'abbr', 'format', locale)[dateObject.getMonth()];
+
+ case "B": // full month name according to the current locale
+ return dojoDateLocale.getNames('months', 'wide', 'format', locale)[dateObject.getMonth()];
+
+ case "c": // preferred date and time representation for the current
+ // locale
+ return dojoDateLocale.format(dateObject, {formatLength: 'full', locale: locale});
+
+ case "C": // century number (the year divided by 100 and truncated
+ // to an integer, range 00 to 99)
+ return _(Math.floor(dateObject.getFullYear()/100));
+
+ case "d": // day of the month as a decimal number (range 01 to 31)
+ return _(dateObject.getDate());
+
+ case "D": // same as %m/%d/%y
+ return $("m") + "/" + $("d") + "/" + $("y");
+
+ case "e": // day of the month as a decimal number, a single digit is
+ // preceded by a space (range ' 1' to '31')
+ if(padChar == null){ padChar = " "; }
+ return _(dateObject.getDate());
+
+ case "f": // month as a decimal number, a single digit is
+ // preceded by a space (range ' 1' to '12')
+ if(padChar == null){ padChar = " "; }
+ return _(dateObject.getMonth()+1);
+
+ case "g": // like %G, but without the century.
+ break;
+
+ case "G": // The 4-digit year corresponding to the ISO week number
+ // (see %V). This has the same format and value as %Y,
+ // except that if the ISO week number belongs to the
+ // previous or next year, that year is used instead.
+ console.warn("unimplemented modifier 'G'");
+ break;
+
+ case "F": // same as %Y-%m-%d
+ return $("Y") + "-" + $("m") + "-" + $("d");
+
+ case "H": // hour as a decimal number using a 24-hour clock (range
+ // 00 to 23)
+ return _(dateObject.getHours());
+
+ case "I": // hour as a decimal number using a 12-hour clock (range
+ // 01 to 12)
+ return _(dateObject.getHours() % 12 || 12);
+
+ case "j": // day of the year as a decimal number (range 001 to 366)
+ return _(dojoDateLocale._getDayOfYear(dateObject), 3);
+
+ case "k": // Hour as a decimal number using a 24-hour clock (range
+ // 0 to 23 (space-padded))
+ if(padChar == null){ padChar = " "; }
+ return _(dateObject.getHours());
+
+ case "l": // Hour as a decimal number using a 12-hour clock (range
+ // 1 to 12 (space-padded))
+ if(padChar == null){ padChar = " "; }
+ return _(dateObject.getHours() % 12 || 12);
+
+ case "m": // month as a decimal number (range 01 to 12)
+ return _(dateObject.getMonth() + 1);
+
+ case "M": // minute as a decimal number
+ return _(dateObject.getMinutes());
+
+ case "n":
+ return "\n";
+
+ case "p": // either `am' or `pm' according to the given time value,
+ // or the corresponding strings for the current locale
+ return bundle['dayPeriods-format-wide-' + (dateObject.getHours() < 12 ? "am" : "pm")];
+
+ case "r": // time in a.m. and p.m. notation
+ return $("I") + ":" + $("M") + ":" + $("S") + " " + $("p");
+
+ case "R": // time in 24 hour notation
+ return $("H") + ":" + $("M");
+
+ case "S": // second as a decimal number
+ return _(dateObject.getSeconds());
+
+ case "t":
+ return "\t";
+
+ case "T": // current time, equal to %H:%M:%S
+ return $("H") + ":" + $("M") + ":" + $("S");
+
+ case "u": // weekday as a decimal number [1,7], with 1 representing
+ // Monday
+ return String(dateObject.getDay() || 7);
+
+ case "U": // week number of the current year as a decimal number,
+ // starting with the first Sunday as the first day of the
+ // first week
+ return _(dojoDateLocale._getWeekOfYear(dateObject));
+
+ case "V": // week number of the year (Monday as the first day of the
+ // week) as a decimal number [01,53]. If the week containing
+ // 1 January has four or more days in the new year, then it
+ // is considered week 1. Otherwise, it is the last week of
+ // the previous year, and the next week is week 1.
+ return _(dojox.date.posix.getIsoWeekOfYear(dateObject));
+
+ case "W": // week number of the current year as a decimal number,
+ // starting with the first Monday as the first day of the
+ // first week
+ return _(dojoDateLocale._getWeekOfYear(dateObject, 1));
+
+ case "w": // day of the week as a decimal, Sunday being 0
+ return String(dateObject.getDay());
+
+ case "x": // preferred date representation for the current locale
+ // without the time
+ return dojoDateLocale.format(dateObject, {selector:'date', formatLength: 'full', locale:locale});
+
+ case "X": // preferred time representation for the current locale
+ // without the date
+ return dojoDateLocale.format(dateObject, {selector:'time', formatLength: 'full', locale:locale});
+
+ case "y": // year as a decimal number without a century (range 00 to
+ // 99)
+ return _(dateObject.getFullYear()%100);
+
+ case "Y": // year as a decimal number including the century
+ return String(dateObject.getFullYear());
+
+ case "z": // time zone or name or abbreviation
+ var timezoneOffset = dateObject.getTimezoneOffset();
+ return (timezoneOffset > 0 ? "-" : "+") +
+ _(Math.floor(Math.abs(timezoneOffset)/60)) + ":" +
+ _(Math.abs(timezoneOffset)%60);
+
+ case "Z": // time zone or name or abbreviation
+ return dojoDate.getTimezoneName(dateObject);
+
+ case "%":
+ return "%";
+ }
+ };
+
+ // parse the formatting string and construct the resulting string
+ var string = "",
+ i = 0,
+ index = 0,
+ switchCase = null;
+ while ((index = format.indexOf("%", i)) != -1){
+ string += format.substring(i, index++);
+
+ // inspect modifier flag
+ switch (format.charAt(index++)) {
+ case "_": // Pad a numeric result string with spaces.
+ padChar = " "; break;
+ case "-": // Do not pad a numeric result string.
+ padChar = ""; break;
+ case "0": // Pad a numeric result string with zeros.
+ padChar = "0"; break;
+ case "^": // Convert characters in result string to uppercase.
+ switchCase = "upper"; break;
+ case "*": // Convert characters in result string to lowercase
+ switchCase = "lower"; break;
+ case "#": // Swap the case of the result string.
+ switchCase = "swap"; break;
+ default: // no modifier flag so decrement the index
+ padChar = null; index--; break;
+ }
+
+ // toggle case if a flag is set
+ var property = $(format.charAt(index++));
+ switch (switchCase){
+ case "upper":
+ property = property.toUpperCase();
+ break;
+ case "lower":
+ property = property.toLowerCase();
+ break;
+ case "swap": // Upper to lower, and versey-vicea
+ var compareString = property.toLowerCase();
+ var swapString = '';
+ var ch = '';
+ for (var j = 0; j < property.length; j++){
+ ch = property.charAt(j);
+ swapString += (ch == compareString.charAt(j)) ?
+ ch.toUpperCase() : ch.toLowerCase();
+ }
+ property = swapString;
+ break;
+ default:
+ break;
+ }
+ switchCase = null;
+
+ string += property;
+ i = index;
+ }
+ string += format.substring(i);
+
+ return string; // String
+};
+
+dojox.date.posix.getStartOfWeek = function(/*Date*/dateObject, /*Number*/firstDay){
+ // summary: Return a date object representing the first day of the given
+ // date's week.
+ if(isNaN(firstDay)){
+ firstDay = dojoCldrSupplemental.getFirstDayOfWeek ? dojoCldrSupplemental.getFirstDayOfWeek() : 0;
+ }
+ var offset = firstDay;
+ if(dateObject.getDay() >= firstDay){
+ offset -= dateObject.getDay();
+ }else{
+ offset -= (7 - dateObject.getDay());
+ }
+ var date = new Date(dateObject);
+ date.setHours(0, 0, 0, 0);
+ return dojoDate.add(date, "day", offset); // Date
+}
+
+dojox.date.posix.setIsoWeekOfYear = function(/*Date*/dateObject, /*Number*/week){
+ // summary: Set the ISO8601 week number of the given date.
+ // The week containing January 4th is the first week of the year.
+ // week:
+ // can be positive or negative: -1 is the year's last week.
+ if(!week){ return dateObject; }
+ var currentWeek = dojox.date.posix.getIsoWeekOfYear(dateObject);
+ var offset = week - currentWeek;
+ if(week < 0){
+ var weeks = dojox.date.posix.getIsoWeeksInYear(dateObject);
+ offset = (weeks + week + 1) - currentWeek;
+ }
+ return dojoDate.add(dateObject, "week", offset); // Date
+}
+
+dojox.date.posix.getIsoWeekOfYear = function(/*Date*/dateObject){
+ // summary: Get the ISO8601 week number of the given date.
+ // The week containing January 4th is the first week of the year.
+ // See http://en.wikipedia.org/wiki/ISO_week_date
+ var weekStart = dojox.date.posix.getStartOfWeek(dateObject, 1);
+ var yearStart = new Date(dateObject.getFullYear(), 0, 4); // January 4th
+ yearStart = dojox.date.posix.getStartOfWeek(yearStart, 1);
+ var diff = weekStart.getTime() - yearStart.getTime();
+ if(diff < 0){ return dojox.date.posix.getIsoWeeksInYear(weekStart); } // Integer
+ return Math.ceil(diff / 604800000) + 1; // Integer
+}
+
+dojox.date.posix.getIsoWeeksInYear = function(/*Date*/dateObject) {
+ // summary: Determine the number of ISO8601 weeks in the year of the given
+ // date. Most years have 52 but some have 53.
+ // See http://www.phys.uu.nl/~vgent/calendar/isocalendar_text3.htm
+ function p(y) {
+ return y + Math.floor(y/4) - Math.floor(y/100) + Math.floor(y/400);
+ }
+ var y = dateObject.getFullYear();
+ return ( p(y) % 7 == 4 || p(y-1) % 7 == 3 ) ? 53 : 52; // Integer
+}
+ return dojox.date.posix;
+}); \ No newline at end of file
diff --git a/js/dojo-1.7.2/dojox/date/relative.js b/js/dojo-1.7.2/dojox/date/relative.js
new file mode 100644
index 0000000..d97c021
--- /dev/null
+++ b/js/dojo-1.7.2/dojox/date/relative.js
@@ -0,0 +1,92 @@
+//>>built
+define("dojox/date/relative", ["dojo/_base/kernel", "dojo/_base/lang", "dojo/date/locale", "dojo/i18n"], function(dojo, dlang, ddl, i18n){
+
+dojo.getObject("date.relative", true, dojox);
+
+/*=====
+dojox.date.relative.__FormatOptions = function(){
+// locale: String
+// override the locale used to determine formatting rules
+// relativeDate: Date
+// Date to calculate relation to (defaults to new Date())
+// weekCheck: boolean
+// Whether or not to display the day of week (defaults true)
+ this.locale = locale;
+ this.relativeDate = relativeDate;
+ this.weekCheck = weekCheck;
+}
+=====*/
+
+var DAY = 1000*60*60*24,
+ SIX_DAYS = 6 * DAY,
+ del = dojo.delegate,
+ ggb = ddl._getGregorianBundle,
+ fmt = ddl.format;
+
+function _clearTime(date){
+ date = new Date(date);
+ date.setHours(0, 0, 0, 0);
+ return date;
+}
+
+dojox.date.relative.format = function(/*Date*/dateObject, /*dojox.date.relative.__FormatOptions?*/options){
+ // summary:
+ // Format a Date object as a String, using locale-specific settings,
+ // relative to the current date or some other date.
+ //
+ // description:
+ // Create a string from a Date object using the most significant information
+ // and a known localized pattern. This method formats both the date and
+ // time from dateObject. Formatting patterns are chosen appropriate to
+ // the locale.
+ //
+ // If the day portion of the date falls within the current date (or the
+ // relativeDate option, if present), then the time will be all that
+ // is displayed
+ //
+ // If the day portion of the date falls within the past week (or the
+ // week preceeding relativeDate, if present), then the display will show
+ // day of week and time. This functionality can be turned off by setting
+ // weekCheck to false.
+ //
+ // If the year portion of the date falls within the current year (or the
+ // year portion of relativeDate, if present), then the display will show
+ // month and day.
+ //
+ // Otherwise, this function is equivalent to calling dojo.date.format with
+ // formatLength of "medium"
+ //
+ // dateObject:
+ // the date and time to be formatted.
+
+ options = options || {};
+
+ var today = _clearTime(options.relativeDate || new Date()),
+ diff = today.getTime() - _clearTime(dateObject).getTime(),
+ fmtOpts = {locale: options.locale};
+
+ if(diff === 0){
+ // today: 9:32 AM
+ return fmt(dateObject, del(fmtOpts, {selector: "time"}));
+ }else if(diff <= SIX_DAYS && diff > 0 && options.weekCheck !== false){
+ // within the last week: Mon 9:32 am
+ return fmt(dateObject, del(fmtOpts, {selector: "date", datePattern: "EEE"})) +
+ " " +
+ fmt(dateObject, del(fmtOpts, {selector: "time", formatLength: "short"}));
+ }else if(dateObject.getFullYear() == today.getFullYear()){
+ // this year: Nov 1
+ var bundle = ggb(i18n.normalizeLocale(options.locale));
+ return fmt(dateObject, del(fmtOpts, {
+ selector: "date",
+ datePattern: bundle["dateFormatItem-MMMd"]
+ }));
+ }else{
+ // default: Jun 1, 2010
+ return fmt(dateObject, del(fmtOpts, {
+ selector: "date",
+ formatLength: "medium",
+ locale: options.locale
+ }));
+ }
+};
+});
diff --git a/js/dojo-1.7.2/dojox/date/timezone.js b/js/dojo-1.7.2/dojox/date/timezone.js
new file mode 100644
index 0000000..cfbd113
--- /dev/null
+++ b/js/dojo-1.7.2/dojox/date/timezone.js
@@ -0,0 +1,720 @@
+//>>built
+/******************************************************************************
+ * Dojo port of fleegix date plugin from
+ *
+ * http://js.fleegix.org/plugins/date/date
+ *
+ * contributed to Dojo under CLA, with thanks to Matthew Eernisse (mde@fleegix.org)
+ * and Open Source Applications Foundation
+ *
+ * Credits: Ideas included from incomplete JS implementation of Olson
+ * parser, "XMLDate" by Philippe Goetz (philippe.goetz@wanadoo.fr)
+ *****************************************************************************/
+
+define("dojox/date/timezone", ["dojo", "dojo/date", "dojo/date/locale", "dojo/_base/array", "dojo/_base/xhr"],
+ function(dojo, _dd, _ddl){
+
+ dojo.experimental("dojox.date.timezone");
+ dojo.getObject("date.timezone", true, dojox);
+
+ var cfg = dojo.config;
+ var _zoneFiles = [ "africa", "antarctica", "asia", "australasia", "backward",
+ "etcetera", "europe", "northamerica", "pacificnew",
+ "southamerica" ];
+
+ // Our mins an maxes for years that we care about
+ var _minYear = 1835,
+ _maxYear = 2038;
+
+ var _loadedZones = {},
+ _zones = {},
+ _loadedRanges = {},
+ _rules = {};
+
+ // timezoneFileBasePath: String
+ // A different location to pull zone files from
+ var timezoneFileBasePath = cfg.timezoneFileBasePath ||
+ dojo.moduleUrl("dojox.date", "zoneinfo");
+
+ // loadingScheme: String
+ // One of "preloadAll", "lazyLoad" (Defaults "lazyLoad")
+ var loadingScheme = cfg.timezoneLoadingScheme || "preloadAll";
+
+ // defaultZoneFile: String or String[]
+ // The default file (or files) to load on startup - other files will
+ // be lazily-loaded on-demand
+ var defaultZoneFile = cfg.defaultZoneFile ||
+ ((loadingScheme == "preloadAll") ? _zoneFiles : "northamerica");
+
+ // Set our olson-zoneinfo content handler
+ dojo._contentHandlers["olson-zoneinfo"] = function(xhr){
+ var str = dojo._contentHandlers["text"](xhr),
+ s = "",
+ lines = str.split("\n"),
+ arr = [],
+ chunk = "",
+ zone = null,
+ rule = null,
+ ret = {zones: {}, rules: {}};
+
+ for(var i = 0; i < lines.length; i++){
+ var l = lines[i];
+ if(l.match(/^\s/)){
+ l = "Zone " + zone + l;
+ }
+ l = l.split("#")[0];
+ if(l.length > 3){
+ arr = l.split(/\s+/);
+ chunk = arr.shift();
+ switch(chunk){
+ case 'Zone':
+ zone = arr.shift();
+ if(arr[0]){
+ // Handle extra commas in the middle of a zone
+ if(!ret.zones[zone]){ ret.zones[zone] = []; }
+ ret.zones[zone].push(arr);
+ }
+ break;
+ case 'Rule':
+ rule = arr.shift();
+ if(!ret.rules[rule]){ ret.rules[rule] = []; }
+ ret.rules[rule].push(arr);
+ break;
+ case 'Link':
+ // No zones for these should already exist
+ if(ret.zones[arr[1]]){
+ throw new Error('Error with Link ' + arr[1]);
+ }
+ // Create the link
+ ret.zones[arr[1]] = arr[0];
+ break;
+ case 'Leap':
+ break;
+ default:
+ // Fail silently
+ break;
+ }
+ }
+ }
+ return ret; // Object
+ };
+
+ function loadZoneData(/* Object */ data){
+ // summary:
+ // Loads the given data object into the zone database
+ //
+ // data: Object
+ // The data to load - contains "zones" and "rules" parameters
+ data = data || {};
+ _zones = dojo.mixin(_zones, data.zones||{});
+ _rules = dojo.mixin(_rules, data.rules||{});
+ }
+
+ function loadZoneFile(/* String */ fileName){
+ // summary:
+ // Loads the given URL of the Olson zone information into the
+ // zone database
+ //
+ // fileName: String
+ // The zoneinfo file name to load
+
+ // TODO: Maybe behave similar to requireLocalization - rather than
+ // Using dojo.xhrGet?
+ _loadedZones[fileName] = true;
+ dojo.xhrGet({
+ url: timezoneFileBasePath + "/" + fileName,
+ sync: true, // Needs to be synchronous so we can return values
+ handleAs: "olson-zoneinfo",
+ load: loadZoneData,
+ error: function(e){
+ console.error("Error loading zone file:", e);
+ throw e;
+ }
+ });
+ }
+
+ var monthMap = { 'jan': 0, 'feb': 1, 'mar': 2, 'apr': 3,'may': 4, 'jun': 5,
+ 'jul': 6, 'aug': 7, 'sep': 8, 'oct': 9, 'nov': 10, 'dec': 11 },
+ dayMap = {'sun': 0, 'mon': 1, 'tue': 2, 'wed': 3, 'thu': 4,
+ 'fri': 5, 'sat': 6 },
+ regionMap = {'EST': "northamerica", 'MST': "northamerica",
+ 'HST': "northamerica", 'EST5EDT': "northamerica",
+ 'CST6CDT': "northamerica", 'MST7MDT': "northamerica",
+ 'PST8PDT': "northamerica", 'America': "northamerica",
+ 'Pacific': "australasia", 'Atlantic': "europe",
+ 'Africa': "africa", 'Indian': "africa",
+ 'Antarctica': "antarctica", 'Asia': "asia",
+ 'Australia': "australasia", 'Europe': "europe",
+ 'WET': "europe", 'CET': "europe", 'MET': "europe",
+ 'EET': "europe"},
+ regionExceptions = {'Pacific/Honolulu':"northamerica",
+ 'Atlantic/Bermuda':"northamerica",
+ 'Atlantic/Cape_Verde':"africa",
+ 'Atlantic/St_Helena':"africa",
+ 'Indian/Kerguelen':"antarctica",
+ 'Indian/Chagos':"asia",
+ 'Indian/Maldives':"asia",
+ 'Indian/Christmas':"australasia",
+ 'Indian/Cocos':"australasia",
+ 'America/Danmarkshavn':"europe",
+ 'America/Scoresbysund':"europe",
+ 'America/Godthab':"europe",
+ 'America/Thule':"europe",
+ 'Asia/Yekaterinburg':"europe",
+ 'Asia/Omsk':"europe",
+ 'Asia/Novosibirsk':"europe",
+ 'Asia/Krasnoyarsk':"europe",
+ 'Asia/Irkutsk':"europe",
+ 'Asia/Yakutsk':"europe",
+ 'Asia/Vladivostok':"europe",
+ 'Asia/Sakhalin':"europe",
+ 'Asia/Magadan':"europe",
+ 'Asia/Kamchatka':"europe",
+ 'Asia/Anadyr':"europe",
+ 'Africa/Ceuta':"europe",
+ 'America/Argentina/Buenos_Aires':"southamerica",
+ 'America/Argentina/Cordoba':"southamerica",
+ 'America/Argentina/Tucuman':"southamerica",
+ 'America/Argentina/La_Rioja':"southamerica",
+ 'America/Argentina/San_Juan':"southamerica",
+ 'America/Argentina/Jujuy':"southamerica",
+ 'America/Argentina/Catamarca':"southamerica",
+ 'America/Argentina/Mendoza':"southamerica",
+ 'America/Argentina/Rio_Gallegos':"southamerica",
+ 'America/Argentina/Ushuaia':"southamerica",
+ 'America/Aruba':"southamerica",
+ 'America/La_Paz':"southamerica",
+ 'America/Noronha':"southamerica",
+ 'America/Belem':"southamerica",
+ 'America/Fortaleza':"southamerica",
+ 'America/Recife':"southamerica",
+ 'America/Araguaina':"southamerica",
+ 'America/Maceio':"southamerica",
+ 'America/Bahia':"southamerica",
+ 'America/Sao_Paulo':"southamerica",
+ 'America/Campo_Grande':"southamerica",
+ 'America/Cuiaba':"southamerica",
+ 'America/Porto_Velho':"southamerica",
+ 'America/Boa_Vista':"southamerica",
+ 'America/Manaus':"southamerica",
+ 'America/Eirunepe':"southamerica",
+ 'America/Rio_Branco':"southamerica",
+ 'America/Santiago':"southamerica",
+ 'Pacific/Easter':"southamerica",
+ 'America/Bogota':"southamerica",
+ 'America/Curacao':"southamerica",
+ 'America/Guayaquil':"southamerica",
+ 'Pacific/Galapagos':"southamerica",
+ 'Atlantic/Stanley':"southamerica",
+ 'America/Cayenne':"southamerica",
+ 'America/Guyana':"southamerica",
+ 'America/Asuncion':"southamerica",
+ 'America/Lima':"southamerica",
+ 'Atlantic/South_Georgia':"southamerica",
+ 'America/Paramaribo':"southamerica",
+ 'America/Port_of_Spain':"southamerica",
+ 'America/Montevideo':"southamerica",
+ 'America/Caracas':"southamerica"},
+ abbrExceptions = { 'US': "S", 'Chatham': "S", 'NZ': "S", 'NT_YK': "S",
+ 'Edm': "S", 'Salv': "S", 'Canada': "S", 'StJohns': "S",
+ 'TC': "S", 'Guat': "S", 'Mexico': "S", 'Haiti': "S",
+ 'Barb': "S", 'Belize': "S", 'CR': "S", 'Moncton': "S",
+ 'Swift': "S", 'Hond': "S", 'Thule': "S", 'NZAQ': "S",
+ 'Zion': "S", 'ROK': "S", 'PRC': "S", 'Taiwan': "S",
+ 'Ghana': "GMT", 'SL': "WAT", 'Chicago': "S",
+ 'Detroit': "S", 'Vanc': "S", 'Denver': "S",
+ 'Halifax': "S", 'Cuba': "S", 'Indianapolis': "S",
+ 'Starke': "S", 'Marengo': "S", 'Pike': "S",
+ 'Perry': "S", 'Vincennes': "S", 'Pulaski': "S",
+ 'Louisville': "S", 'CA': "S", 'Nic': "S",
+ 'Menominee': "S", 'Mont': "S", 'Bahamas': "S",
+ 'NYC': "S", 'Regina': "S", 'Resolute': "ES",
+ 'DR': "S", 'Toronto': "S", 'Winn': "S" };
+
+ function invalidTZError(t) {
+ throw new Error('Timezone "' + t +
+ '" is either incorrect, or not loaded in the timezone registry.');
+ }
+
+ function getRegionForTimezone(/* String */ tz) {
+ // summary:
+ // Returns the Olson region for the given timezone
+ var ret = regionExceptions[tz];
+ if(!ret){
+ var reg = tz.split('/')[0];
+ ret = regionMap[reg];
+ // If there's nothing listed in the main regions for
+ // this TZ, check the 'backward' links
+ if(!ret){
+ var link = _zones[tz];
+ if(typeof link == 'string'){
+ return getRegionForTimezone(link); // String
+ }else{
+ // Backward-compat file hasn't loaded yet, try looking in there
+ if (!_loadedZones.backward) {
+ // This is for obvious legacy zones (e.g., Iceland) that
+ // don't even have a prefix like "America/" that look like
+ // normal zones
+ loadZoneFile("backward");
+ return getRegionForTimezone(tz); // String
+ }else{
+ invalidTZError(tz);
+ }
+ }
+ }
+ }
+ return ret; // String
+ }
+
+ function parseTimeString(/* String */ str) {
+ // summary:
+ // Parses the given time string and returns it as an integer array
+ var pat = /(\d+)(?::0*(\d*))?(?::0*(\d*))?([su])?$/;
+ var hms = str.match(pat);
+ if(!hms){
+ return null;
+ }
+ hms[1] = parseInt(hms[1], 10);
+ hms[2] = hms[2] ? parseInt(hms[2], 10) : 0;
+ hms[3] = hms[3] ? parseInt(hms[3], 10) : 0;
+ return hms; // int[]
+ }
+
+ function getUTCStamp(/* int */ y, /* int */ m, /* int */ d, /* int */ h,
+ /* int */ mn, /* int */ s, /* int? */ off){
+ // summary:
+ // Returns the UTC timestamp, adjusted by the given (optional) offset
+ return Date.UTC(y, m, d, h, mn, s) + ((off||0) * 60 * 1000);
+ }
+
+ function getMonthNumber(/* String */ m){
+ // summary:
+ // Returns the javascript month number for the given string
+ return monthMap[m.substr(0, 3).toLowerCase()];
+ }
+
+ function getOffsetInMins(/* String */ str){
+ // summary:
+ // Returns the offset value represented by the string, in minutes
+ var off = parseTimeString(str);
+ if(off === null){ return 0; }
+ var adj = str.indexOf('-') === 0 ? -1 : 1;
+ off = adj * (((off[1] * 60 + off[2]) *60 + off[3]) * 1000);
+ return -off/60/1000;
+ }
+
+ function _getRuleStart(/* Rule */ rule, /* int */ year, /* int */ off){
+ // summary:
+ // Returns a date that the rule begins matching in the given year.
+ var month = getMonthNumber(rule[3]),
+ day = rule[4],
+ time = parseTimeString(rule[5]);
+ if(time[4] == "u"){
+ // We are UTC - so there is no offset to use
+ off = 0;
+ }
+
+ var d, dtDay, incr;
+ if(isNaN(day)){
+ if(day.substr(0, 4) == "last"){
+ // Last day of the month at the desired time of day
+ day = dayMap[day.substr(4,3).toLowerCase()];
+ d = new Date(getUTCStamp(year, month + 1, 1,
+ time[1] - 24, time[2], time[3],
+ off));
+ dtDay = _dd.add(d, "minute", -off).getUTCDay();
+ // Set it to the final day of the correct weekday that month
+ incr = (day > dtDay) ? (day - dtDay - 7) : (day - dtDay);
+ if(incr !== 0){
+ d = _dd.add(d, "hour", incr * 24);
+ }
+ return d;
+ }else{
+ day = dayMap[day.substr(0, 3).toLowerCase()];
+ if(day != "undefined"){
+ if(rule[4].substr(3, 2) == '>='){
+ // The stated date of the month
+ d = new Date(getUTCStamp(year, month, parseInt(rule[4].substr(5), 10),
+ time[1], time[2], time[3], off));
+ dtDay = _dd.add(d, "minute", -off).getUTCDay();
+ // Set to the first correct weekday after the stated date
+ incr = (day < dtDay) ? (day - dtDay + 7) : (day - dtDay);
+ if(incr !== 0){
+ d = _dd.add(d, "hour", incr * 24);
+ }
+ return d;
+ }else if(day.substr(3, 2) == '<='){
+ // The stated date of the month
+ d = new Date(getUTCStamp(year, month, parseInt(rule[4].substr(5), 10),
+ time[1], time[2], time[3], off));
+ dtDay = _dd.add(d, "minute", -off).getUTCDay();
+ // Set to first correct weekday before the stated date
+ incr = (day > dtDay) ? (day - dtDay - 7) : (day - dtDay);
+ if(incr !== 0){
+ d = _dd.add(d, "hour", incr * 24);
+ }
+ return d;
+ }
+ }
+ }
+ }else{
+ // Numeric date
+ d = new Date(getUTCStamp(year, month, parseInt(day, 10),
+ time[1], time[2], time[3], off));
+ return d;
+ }
+ return null;
+ }
+
+ function _getRulesForYear(/* Zone */ zone, /* int */ year){
+ var rules = [];
+ dojo.forEach(_rules[zone[1]]||[], function(r){
+ // Clean up rules as needed
+ for(var i = 0; i < 2; i++){
+ switch(r[i]){
+ case "min":
+ r[i] = _minYear;
+ break;
+ case "max":
+ r[i] = _maxYear;
+ break;
+ case "only":
+ break;
+ default:
+ r[i] = parseInt(r[i], 10);
+ if(isNaN(r[i])){
+ throw new Error('Invalid year found on rule');
+ }
+ break;
+ }
+ }
+ if(typeof r[6] == "string"){
+ // Change our offset to be an integer
+ r[6] = getOffsetInMins(r[6]);
+ }
+
+ // Quick-filter to grab all rules that match my year
+ if((r[0] <= year && r[1] >= year) || // Matches my y
+ (r[0] == year && r[1] == "only")){ // Matches my only
+ rules.push({r: r, d: _getRuleStart(r, year, zone[0])});
+ }
+ });
+ return rules;
+ }
+
+
+ function _loadZoneRanges(/* String */ tz, /* Object[] */ zoneList) {
+ // summary:
+ // Loads the zone ranges for the given timezone
+
+ var zr = _loadedRanges[tz] = [];
+ for(var i = 0; i < zoneList.length; i++){
+ var z = zoneList[i];
+ var r = zr[i] = [];
+ var prevZone = null;
+ var prevRange = null;
+ var prevRules = [];
+
+ // Set up our zone offset to not be a string anymore
+ if(typeof z[0] == "string"){
+ z[0] = getOffsetInMins(z[0]);
+ }
+
+ if(i === 0){
+ // The beginning of zoneinfo time - let's not worry about
+ // to-the-hour accuracy before Jan 1, 1835
+ r[0] = Date.UTC(_minYear,0,1,0,0,0,0);
+ }else{
+ r[0] = zr[i - 1][1];
+ prevZone = zoneList[i - 1];
+ prevRange = zr[i - 1];
+ prevRules = prevRange[2];
+ }
+
+ // Load the rules that will be going in to our zone
+ var startYear = new Date(r[0]).getUTCFullYear();
+ var endYear = z[3] ? parseInt(z[3], 10) : _maxYear;
+ var rlz = [];
+ var j;
+ for(j = startYear; j <= endYear; j++){
+ rlz = rlz.concat(_getRulesForYear(z, j));
+ }
+ rlz.sort(function(a, b){
+ return _dd.compare(a.d, b.d);
+ });
+ var rl;
+ for(j = 0, rl; (rl = rlz[j]); j++){
+ var prevRule = j > 0 ? rlz[j - 1] : null;
+ if(rl.r[5].indexOf("u") < 0 && rl.r[5].indexOf("s") < 0){
+ if(j === 0 && i > 0){
+ if(prevRules.length){
+ // We have a previous rule - so use it
+ rl.d = _dd.add(rl.d, "minute", prevRules[prevRules.length - 1].r[6]);
+ }else if(_dd.compare(new Date(prevRange[1]), rl.d, "date") === 0){
+ // No previous rules - but our date is the same as the
+ // previous zone ended on - so use that.
+ rl.d = new Date(prevRange[1]);
+ }else{
+ rl.d = _dd.add(rl.d, "minute", getOffsetInMins(prevZone[1]));
+ }
+ }else if(j > 0){
+ rl.d = _dd.add(rl.d, "minute", prevRule.r[6]);
+ }
+ }
+ }
+ r[2] = rlz;
+
+ if(!z[3]){
+ // The end of zoneinfo time - we'll cross this bridge when we
+ // get close to Dec 31, 2038
+ r[1] = Date.UTC(_maxYear,11,31,23,59,59,999);
+ }else{
+ var year = parseInt(z[3], 10),
+ month = getMonthNumber(z[4]||"Jan"),
+ day = parseInt(z[5]||"1", 10),
+ time = parseTimeString(z[6]||"0");
+ var utcStmp = r[1] = getUTCStamp(year, month, day,
+ time[1], time[2], time[3],
+ ((time[4] == "u") ? 0 : z[0]));
+ if(isNaN(utcStmp)){
+ utcStmp = r[1] = _getRuleStart([0,0,0,z[4],z[5],z[6]||"0"],
+ year, ((time[4] == "u") ? 0 : z[0])).getTime();
+ }
+ var matches = dojo.filter(rlz, function(rl, idx){
+ var o = idx > 0 ? rlz[idx - 1].r[6] * 60 * 1000 : 0;
+ return (rl.d.getTime() < utcStmp + o);
+ });
+ if(time[4] != "u" && time[4] != "s"){
+ if(matches.length){
+ r[1] += matches[matches.length - 1].r[6] * 60 * 1000;
+ }else{
+ r[1] += getOffsetInMins(z[1]) * 60 * 1000;
+ }
+ }
+ }
+ }
+ }
+
+ function getZoneInfo(/* String */ dt, /* String */ tz) {
+ // summary:
+ // Returns the zone entry from the zoneinfo database for the given date
+ // and timezone
+ var t = tz;
+ var zoneList = _zones[t];
+
+ // Follow links to get to an actual zone
+ while(typeof zoneList == "string"){
+ t = zoneList;
+ zoneList = _zones[t];
+ }
+ if(!zoneList){
+ // Backward-compat file hasn't loaded yet, try looking in there
+ if(!_loadedZones.backward){
+ // This is for backward entries like "America/Fort_Wayne" that
+ // getRegionForTimezone *thinks* it has a region file and zone
+ // for (e.g., America => 'northamerica'), but in reality it's a
+ // legacy zone we need the backward file for
+ var parsed = loadZoneFile("backward", true);
+ return getZoneInfo(dt, tz); //Object
+ }
+ invalidTZError(t);
+ }
+
+ if(!_loadedRanges[tz]){
+ _loadZoneRanges(tz, zoneList);
+ }
+ var ranges = _loadedRanges[tz];
+ var tm = dt.getTime();
+ for(var i = 0, r; (r = ranges[i]); i++){
+ if(tm >= r[0] && tm < r[1]){
+ return {zone: zoneList[i], range: ranges[i], idx: i};
+ }
+ }
+ throw new Error('No Zone found for "' + tz + '" on ' + dt);
+ }
+
+ function getRule(/* Date */ dt, /* ZoneInfo */ zoneInfo) {
+ // summary:
+ // Returns the latest-matching rule entry from the zoneinfo
+ // database for the given date and zone
+
+ var lastMatch = -1;
+ var rules = zoneInfo.range[2]||[];
+ var tsp = dt.getTime();
+ var zr = zoneInfo.range;
+ for(var i = 0, r; (r = rules[i]); i++){
+ if(tsp >= r.d.getTime()){
+ lastMatch = i;
+ }
+ }
+ if(lastMatch >= 0){
+ return rules[lastMatch].r;
+ }
+ return null;
+ }
+
+ function getAbbreviation(/* String */ tz, /* Object */ zoneInfo, /* Object */ rule) {
+ // summary:
+ // Returns the abbreviation for the given zone and rule
+ var res;
+ var zone = zoneInfo.zone;
+ var base = zone[2];
+ if(base.indexOf('%s') > -1){
+ var repl;
+ if(rule){
+ repl = rule[7];
+ if(repl == "-"){ repl = ""; }
+ }else if(zone[1] in abbrExceptions){
+ repl = abbrExceptions[zone[1]];
+ }else{
+ if(zoneInfo.idx > 0){
+ // Check if our previous zone's base is the same as our
+ // current in "S" (standard) mode. If so, then use "S"
+ // for our replacement
+ var pz = _zones[tz][zoneInfo.idx - 1];
+ var pb = pz[2];
+ if(pb.indexOf('%s') < 0){
+ if(base.replace('%s', "S") == pb){
+ repl = "S";
+ }else{
+ repl = "";
+ }
+ }else{
+ repl = "";
+ }
+ }else{
+ repl = "";
+ }
+ }
+ res = base.replace('%s', repl);
+ }else if(base.indexOf("/") > -1){
+ var bs = base.split("/");
+ if(rule){
+ res = bs[rule[6] === 0 ? 0 : 1];
+ }else{
+ res = bs[0];
+ }
+ }else{
+ res = base;
+ }
+ return res; // String
+ }
+
+/*=====
+dojox.date.timezone = function(){
+ // summary:
+ // mix-in to dojo.date to provide timezones based on
+ // the Olson timezone data
+ //
+ // description:
+ // mix-in to dojo.date to provide timezones based on
+ // the Olson timezone data.
+ // If you pass "timezone" as a parameter to your format options,
+ // then you get the date formatted (and offset) for that timezone
+
+//TODOC
+};
+
+dojox.date.timezone.getTzInfo = function(dt, tz){
+ // summary:
+ // Returns the timezone information for the given date and
+ // timezone string
+ //
+ // dt: Date
+ // The Date - a "proxyDate"
+ //
+ // tz: String
+ // String representation of the timezone you want to get info
+ // for date
+};
+
+dojox.date.timezone.loadZoneData = function(data){
+ // summary:
+ // Loads the given data object into the zone database
+ //
+ // data: Object
+ // The data to load - contains "zones" and "rules" parameters
+};
+
+dojox.date.timezone.getAllZones = function(){
+ // summary:
+ // Returns an array of zones that have been loaded
+};
+=====*/
+ dojo.setObject("dojox.date.timezone", {
+ getTzInfo: function(/* Date */ dt, /* String */ tz){
+ // Lazy-load any zones not yet loaded
+ if(loadingScheme == "lazyLoad"){
+ // Get the correct region for the zone
+ var zoneFile = getRegionForTimezone(tz);
+ if(!zoneFile){
+ throw new Error("Not a valid timezone ID.");
+ }else{
+ if(!_loadedZones[zoneFile]){
+ // Get the file and parse it -- use synchronous XHR
+ loadZoneFile(zoneFile);
+ }
+ }
+ }
+ var zoneInfo = getZoneInfo(dt, tz);
+ var off = zoneInfo.zone[0];
+ // See if the offset needs adjustment
+ var rule = getRule(dt, zoneInfo);
+ if(rule){
+ off += rule[6];
+ }else{
+ if(_rules[zoneInfo.zone[1]] && zoneInfo.idx > 0){
+ off += getOffsetInMins(_zones[tz][zoneInfo.idx - 1][1]);
+ }else{
+ off += getOffsetInMins(zoneInfo.zone[1]);
+ }
+ }
+
+ var abbr = getAbbreviation(tz, zoneInfo, rule);
+ return { tzOffset: off, tzAbbr: abbr }; // Object
+ },
+ loadZoneData: function(data){
+ loadZoneData(data);
+ },
+ getAllZones: function(){
+ var arr = [];
+ for(var z in _zones){ arr.push(z); }
+ arr.sort();
+ return arr; // String[]
+ }
+ });
+
+ // Now - initialize the stuff that we should have pre-loaded
+ if(typeof defaultZoneFile == "string" && defaultZoneFile){
+ defaultZoneFile = [defaultZoneFile];
+ }
+ if(dojo.isArray(defaultZoneFile)){
+ dojo.forEach(defaultZoneFile, loadZoneFile);
+ }
+
+ // And enhance the default formatting functions
+ // If you pass "timezone" as a parameter to your format options,
+ // then you get the date formatted (and offset) for that timezone
+ var oLocaleFmt = _ddl.format,
+ oGetZone = _ddl._getZone;
+ _ddl.format = function(dateObject, options){
+ options = options||{};
+ if(options.timezone && !options._tzInfo){
+ // Store it in our options so we can use it later
+ options._tzInfo = dojox.date.timezone.getTzInfo(dateObject, options.timezone);
+ }
+ if(options._tzInfo){
+ // Roll our date to display the correct time according to the
+ // desired offset
+ var offset = dateObject.getTimezoneOffset() - options._tzInfo.tzOffset;
+ dateObject = new Date(dateObject.getTime() + (offset * 60 * 1000));
+ }
+ return oLocaleFmt.call(this, dateObject, options);
+ };
+ _ddl._getZone = function(dateObject, getName, options){
+ if(options._tzInfo){
+ return getName ? options._tzInfo.tzAbbr : options._tzInfo.tzOffset;
+ }
+ return oGetZone.call(this, dateObject, getName, options);
+ };
+});
diff --git a/js/dojo-1.7.2/dojox/date/zoneinfo/LICENSE b/js/dojo-1.7.2/dojox/date/zoneinfo/LICENSE
new file mode 100644
index 0000000..211d20a
--- /dev/null
+++ b/js/dojo-1.7.2/dojox/date/zoneinfo/LICENSE
@@ -0,0 +1,10 @@
+"Olson Database", available for download from ftp://elsie.nci.nih.gov/pub/
+
+These comments were included in each file.
+
+# This file is in the public domain, so clarified as of
+# 2009-05-17 by Arthur David Olson.
+
+# This data is by no means authoritative; if you think you know better,
+# go ahead and edit the file (and please send any changes to
+# tz@elsie.nci.nih.gov for general use in the future).
diff --git a/js/dojo-1.7.2/dojox/date/zoneinfo/africa b/js/dojo-1.7.2/dojox/date/zoneinfo/africa
new file mode 100644
index 0000000..18e5a28
--- /dev/null
+++ b/js/dojo-1.7.2/dojox/date/zoneinfo/africa
@@ -0,0 +1,310 @@
+Rule Algeria 1916 only - Jun 14 23:00s 1:00 S
+Rule Algeria 1916 1919 - Oct Sun>=1 23:00s 0 -
+Rule Algeria 1917 only - Mar 24 23:00s 1:00 S
+Rule Algeria 1918 only - Mar 9 23:00s 1:00 S
+Rule Algeria 1919 only - Mar 1 23:00s 1:00 S
+Rule Algeria 1920 only - Feb 14 23:00s 1:00 S
+Rule Algeria 1920 only - Oct 23 23:00s 0 -
+Rule Algeria 1921 only - Mar 14 23:00s 1:00 S
+Rule Algeria 1921 only - Jun 21 23:00s 0 -
+Rule Algeria 1939 only - Sep 11 23:00s 1:00 S
+Rule Algeria 1939 only - Nov 19 1:00 0 -
+Rule Algeria 1944 1945 - Apr Mon>=1 2:00 1:00 S
+Rule Algeria 1944 only - Oct 8 2:00 0 -
+Rule Algeria 1945 only - Sep 16 1:00 0 -
+Rule Algeria 1971 only - Apr 25 23:00s 1:00 S
+Rule Algeria 1971 only - Sep 26 23:00s 0 -
+Rule Algeria 1977 only - May 6 0:00 1:00 S
+Rule Algeria 1977 only - Oct 21 0:00 0 -
+Rule Algeria 1978 only - Mar 24 1:00 1:00 S
+Rule Algeria 1978 only - Sep 22 3:00 0 -
+Rule Algeria 1980 only - Apr 25 0:00 1:00 S
+Rule Algeria 1980 only - Oct 31 2:00 0 -
+Zone Africa/Algiers 0:12:12 - LMT 1891 Mar 15 0:01
+ 0:09:21 - PMT 1911 Mar 11 # Paris Mean Time
+ 0:00 Algeria WE%sT 1940 Feb 25 2:00
+ 1:00 Algeria CE%sT 1946 Oct 7
+ 0:00 - WET 1956 Jan 29
+ 1:00 - CET 1963 Apr 14
+ 0:00 Algeria WE%sT 1977 Oct 21
+ 1:00 Algeria CE%sT 1979 Oct 26
+ 0:00 Algeria WE%sT 1981 May
+ 1:00 - CET
+Zone Africa/Luanda 0:52:56 - LMT 1892
+ 0:52:04 - AOT 1911 May 26 # Angola Time
+ 1:00 - WAT
+Zone Africa/Porto-Novo 0:10:28 - LMT 1912
+ 0:00 - GMT 1934 Feb 26
+ 1:00 - WAT
+Zone Africa/Gaborone 1:43:40 - LMT 1885
+ 2:00 - CAT 1943 Sep 19 2:00
+ 2:00 1:00 CAST 1944 Mar 19 2:00
+ 2:00 - CAT
+Zone Africa/Ouagadougou -0:06:04 - LMT 1912
+ 0:00 - GMT
+Zone Africa/Bujumbura 1:57:28 - LMT 1890
+ 2:00 - CAT
+Zone Africa/Douala 0:38:48 - LMT 1912
+ 1:00 - WAT
+Zone Atlantic/Cape_Verde -1:34:04 - LMT 1907 # Praia
+ -2:00 - CVT 1942 Sep
+ -2:00 1:00 CVST 1945 Oct 15
+ -2:00 - CVT 1975 Nov 25 2:00
+ -1:00 - CVT
+Zone Africa/Bangui 1:14:20 - LMT 1912
+ 1:00 - WAT
+Zone Africa/Ndjamena 1:00:12 - LMT 1912
+ 1:00 - WAT 1979 Oct 14
+ 1:00 1:00 WAST 1980 Mar 8
+ 1:00 - WAT
+Zone Indian/Comoro 2:53:04 - LMT 1911 Jul # Moroni, Gran Comoro
+ 3:00 - EAT
+Zone Africa/Kinshasa 1:01:12 - LMT 1897 Nov 9
+ 1:00 - WAT
+Zone Africa/Lubumbashi 1:49:52 - LMT 1897 Nov 9
+ 2:00 - CAT
+Zone Africa/Brazzaville 1:01:08 - LMT 1912
+ 1:00 - WAT
+Zone Africa/Abidjan -0:16:08 - LMT 1912
+ 0:00 - GMT
+Zone Africa/Djibouti 2:52:36 - LMT 1911 Jul
+ 3:00 - EAT
+Rule Egypt 1940 only - Jul 15 0:00 1:00 S
+Rule Egypt 1940 only - Oct 1 0:00 0 -
+Rule Egypt 1941 only - Apr 15 0:00 1:00 S
+Rule Egypt 1941 only - Sep 16 0:00 0 -
+Rule Egypt 1942 1944 - Apr 1 0:00 1:00 S
+Rule Egypt 1942 only - Oct 27 0:00 0 -
+Rule Egypt 1943 1945 - Nov 1 0:00 0 -
+Rule Egypt 1945 only - Apr 16 0:00 1:00 S
+Rule Egypt 1957 only - May 10 0:00 1:00 S
+Rule Egypt 1957 1958 - Oct 1 0:00 0 -
+Rule Egypt 1958 only - May 1 0:00 1:00 S
+Rule Egypt 1959 1981 - May 1 1:00 1:00 S
+Rule Egypt 1959 1965 - Sep 30 3:00 0 -
+Rule Egypt 1966 1994 - Oct 1 3:00 0 -
+Rule Egypt 1982 only - Jul 25 1:00 1:00 S
+Rule Egypt 1983 only - Jul 12 1:00 1:00 S
+Rule Egypt 1984 1988 - May 1 1:00 1:00 S
+Rule Egypt 1989 only - May 6 1:00 1:00 S
+Rule Egypt 1990 1994 - May 1 1:00 1:00 S
+Rule Egypt 1995 max - Apr lastFri 0:00s 1:00 S
+Rule Egypt 1995 2005 - Sep lastThu 23:00s 0 -
+Rule Egypt 2006 only - Sep 21 23:00s 0 -
+Rule Egypt 2007 only - Sep Thu>=1 23:00s 0 -
+Rule Egypt 2008 only - Aug lastThu 23:00s 0 -
+Rule Egypt 2009 max - Sep lastThu 23:00s 0 -
+Zone Africa/Cairo 2:05:00 - LMT 1900 Oct
+ 2:00 Egypt EE%sT
+Zone Africa/Malabo 0:35:08 - LMT 1912
+ 0:00 - GMT 1963 Dec 15
+ 1:00 - WAT
+Zone Africa/Asmara 2:35:32 - LMT 1870
+ 2:35:32 - AMT 1890 # Asmara Mean Time
+ 2:35:20 - ADMT 1936 May 5 # Adis Dera MT
+ 3:00 - EAT
+Zone Africa/Addis_Ababa 2:34:48 - LMT 1870
+ 2:35:20 - ADMT 1936 May 5 # Adis Dera MT
+ 3:00 - EAT
+Zone Africa/Libreville 0:37:48 - LMT 1912
+ 1:00 - WAT
+Zone Africa/Banjul -1:06:36 - LMT 1912
+ -1:06:36 - BMT 1935 # Banjul Mean Time
+ -1:00 - WAT 1964
+ 0:00 - GMT
+Rule Ghana 1936 1942 - Sep 1 0:00 0:20 GHST
+Rule Ghana 1936 1942 - Dec 31 0:00 0 GMT
+Zone Africa/Accra -0:00:52 - LMT 1918
+ 0:00 Ghana %s
+Zone Africa/Conakry -0:54:52 - LMT 1912
+ 0:00 - GMT 1934 Feb 26
+ -1:00 - WAT 1960
+ 0:00 - GMT
+Zone Africa/Bissau -1:02:20 - LMT 1911 May 26
+ -1:00 - WAT 1975
+ 0:00 - GMT
+Zone Africa/Nairobi 2:27:16 - LMT 1928 Jul
+ 3:00 - EAT 1930
+ 2:30 - BEAT 1940
+ 2:44:45 - BEAUT 1960
+ 3:00 - EAT
+Zone Africa/Maseru 1:50:00 - LMT 1903 Mar
+ 2:00 - SAST 1943 Sep 19 2:00
+ 2:00 1:00 SAST 1944 Mar 19 2:00
+ 2:00 - SAST
+Zone Africa/Monrovia -0:43:08 - LMT 1882
+ -0:43:08 - MMT 1919 Mar # Monrovia Mean Time
+ -0:44:30 - LRT 1972 May # Liberia Time
+ 0:00 - GMT
+Rule Libya 1951 only - Oct 14 2:00 1:00 S
+Rule Libya 1952 only - Jan 1 0:00 0 -
+Rule Libya 1953 only - Oct 9 2:00 1:00 S
+Rule Libya 1954 only - Jan 1 0:00 0 -
+Rule Libya 1955 only - Sep 30 0:00 1:00 S
+Rule Libya 1956 only - Jan 1 0:00 0 -
+Rule Libya 1982 1984 - Apr 1 0:00 1:00 S
+Rule Libya 1982 1985 - Oct 1 0:00 0 -
+Rule Libya 1985 only - Apr 6 0:00 1:00 S
+Rule Libya 1986 only - Apr 4 0:00 1:00 S
+Rule Libya 1986 only - Oct 3 0:00 0 -
+Rule Libya 1987 1989 - Apr 1 0:00 1:00 S
+Rule Libya 1987 1989 - Oct 1 0:00 0 -
+Zone Africa/Tripoli 0:52:44 - LMT 1920
+ 1:00 Libya CE%sT 1959
+ 2:00 - EET 1982
+ 1:00 Libya CE%sT 1990 May 4
+ 2:00 - EET 1996 Sep 30
+ 1:00 - CET 1997 Apr 4
+ 1:00 1:00 CEST 1997 Oct 4
+ 2:00 - EET
+Zone Indian/Antananarivo 3:10:04 - LMT 1911 Jul
+ 3:00 - EAT 1954 Feb 27 23:00s
+ 3:00 1:00 EAST 1954 May 29 23:00s
+ 3:00 - EAT
+Zone Africa/Blantyre 2:20:00 - LMT 1903 Mar
+ 2:00 - CAT
+Zone Africa/Bamako -0:32:00 - LMT 1912
+ 0:00 - GMT 1934 Feb 26
+ -1:00 - WAT 1960 Jun 20
+ 0:00 - GMT
+Zone Africa/Nouakchott -1:03:48 - LMT 1912
+ 0:00 - GMT 1934 Feb 26
+ -1:00 - WAT 1960 Nov 28
+ 0:00 - GMT
+Rule Mauritius 1982 only - Oct 10 0:00 1:00 S
+Rule Mauritius 1983 only - Mar 21 0:00 0 -
+Rule Mauritius 2008 only - Oct lastSun 2:00 1:00 S
+Rule Mauritius 2009 only - Mar lastSun 2:00 0 -
+Zone Indian/Mauritius 3:50:00 - LMT 1907 # Port Louis
+ 4:00 Mauritius MU%sT # Mauritius Time
+Zone Indian/Mayotte 3:00:56 - LMT 1911 Jul # Mamoutzou
+ 3:00 - EAT
+Rule Morocco 1939 only - Sep 12 0:00 1:00 S
+Rule Morocco 1939 only - Nov 19 0:00 0 -
+Rule Morocco 1940 only - Feb 25 0:00 1:00 S
+Rule Morocco 1945 only - Nov 18 0:00 0 -
+Rule Morocco 1950 only - Jun 11 0:00 1:00 S
+Rule Morocco 1950 only - Oct 29 0:00 0 -
+Rule Morocco 1967 only - Jun 3 12:00 1:00 S
+Rule Morocco 1967 only - Oct 1 0:00 0 -
+Rule Morocco 1974 only - Jun 24 0:00 1:00 S
+Rule Morocco 1974 only - Sep 1 0:00 0 -
+Rule Morocco 1976 1977 - May 1 0:00 1:00 S
+Rule Morocco 1976 only - Aug 1 0:00 0 -
+Rule Morocco 1977 only - Sep 28 0:00 0 -
+Rule Morocco 1978 only - Jun 1 0:00 1:00 S
+Rule Morocco 1978 only - Aug 4 0:00 0 -
+Rule Morocco 2008 only - Jun 1 0:00 1:00 S
+Rule Morocco 2008 only - Sep 1 0:00 0 -
+Rule Morocco 2009 only - Jun 1 0:00 1:00 S
+Rule Morocco 2009 only - Aug 21 0:00 0 -
+Zone Africa/Casablanca -0:30:20 - LMT 1913 Oct 26
+ 0:00 Morocco WE%sT 1984 Mar 16
+ 1:00 - CET 1986
+ 0:00 Morocco WE%sT
+Zone Africa/El_Aaiun -0:52:48 - LMT 1934 Jan
+ -1:00 - WAT 1976 Apr 14
+ 0:00 - WET
+Zone Africa/Maputo 2:10:20 - LMT 1903 Mar
+ 2:00 - CAT
+Rule Namibia 1994 max - Sep Sun>=1 2:00 1:00 S
+Rule Namibia 1995 max - Apr Sun>=1 2:00 0 -
+Zone Africa/Windhoek 1:08:24 - LMT 1892 Feb 8
+ 1:30 - SWAT 1903 Mar # SW Africa Time
+ 2:00 - SAST 1942 Sep 20 2:00
+ 2:00 1:00 SAST 1943 Mar 21 2:00
+ 2:00 - SAST 1990 Mar 21 # independence
+ 2:00 - CAT 1994 Apr 3
+ 1:00 Namibia WA%sT
+Zone Africa/Niamey 0:08:28 - LMT 1912
+ -1:00 - WAT 1934 Feb 26
+ 0:00 - GMT 1960
+ 1:00 - WAT
+Zone Africa/Lagos 0:13:36 - LMT 1919 Sep
+ 1:00 - WAT
+Zone Indian/Reunion 3:41:52 - LMT 1911 Jun # Saint-Denis
+ 4:00 - RET # Reunion Time
+Zone Africa/Kigali 2:00:16 - LMT 1935 Jun
+ 2:00 - CAT
+Zone Atlantic/St_Helena -0:22:48 - LMT 1890 # Jamestown
+ -0:22:48 - JMT 1951 # Jamestown Mean Time
+ 0:00 - GMT
+Zone Africa/Sao_Tome 0:26:56 - LMT 1884
+ -0:36:32 - LMT 1912 # Lisbon Mean Time
+ 0:00 - GMT
+Zone Africa/Dakar -1:09:44 - LMT 1912
+ -1:00 - WAT 1941 Jun
+ 0:00 - GMT
+Zone Indian/Mahe 3:41:48 - LMT 1906 Jun # Victoria
+ 4:00 - SCT # Seychelles Time
+Rule SL 1935 1942 - Jun 1 0:00 0:40 SLST
+Rule SL 1935 1942 - Oct 1 0:00 0 WAT
+Rule SL 1957 1962 - Jun 1 0:00 1:00 SLST
+Rule SL 1957 1962 - Sep 1 0:00 0 GMT
+Zone Africa/Freetown -0:53:00 - LMT 1882
+ -0:53:00 - FMT 1913 Jun # Freetown Mean Time
+ -1:00 SL %s 1957
+ 0:00 SL %s
+Zone Africa/Mogadishu 3:01:28 - LMT 1893 Nov
+ 3:00 - EAT 1931
+ 2:30 - BEAT 1957
+ 3:00 - EAT
+Rule SA 1942 1943 - Sep Sun>=15 2:00 1:00 -
+Rule SA 1943 1944 - Mar Sun>=15 2:00 0 -
+Zone Africa/Johannesburg 1:52:00 - LMT 1892 Feb 8
+ 1:30 - SAST 1903 Mar
+ 2:00 SA SAST
+Rule Sudan 1970 only - May 1 0:00 1:00 S
+Rule Sudan 1970 1985 - Oct 15 0:00 0 -
+Rule Sudan 1971 only - Apr 30 0:00 1:00 S
+Rule Sudan 1972 1985 - Apr lastSun 0:00 1:00 S
+Zone Africa/Khartoum 2:10:08 - LMT 1931
+ 2:00 Sudan CA%sT 2000 Jan 15 12:00
+ 3:00 - EAT
+Zone Africa/Mbabane 2:04:24 - LMT 1903 Mar
+ 2:00 - SAST
+Zone Africa/Dar_es_Salaam 2:37:08 - LMT 1931
+ 3:00 - EAT 1948
+ 2:44:45 - BEAUT 1961
+ 3:00 - EAT
+Zone Africa/Lome 0:04:52 - LMT 1893
+ 0:00 - GMT
+Rule Tunisia 1939 only - Apr 15 23:00s 1:00 S
+Rule Tunisia 1939 only - Nov 18 23:00s 0 -
+Rule Tunisia 1940 only - Feb 25 23:00s 1:00 S
+Rule Tunisia 1941 only - Oct 6 0:00 0 -
+Rule Tunisia 1942 only - Mar 9 0:00 1:00 S
+Rule Tunisia 1942 only - Nov 2 3:00 0 -
+Rule Tunisia 1943 only - Mar 29 2:00 1:00 S
+Rule Tunisia 1943 only - Apr 17 2:00 0 -
+Rule Tunisia 1943 only - Apr 25 2:00 1:00 S
+Rule Tunisia 1943 only - Oct 4 2:00 0 -
+Rule Tunisia 1944 1945 - Apr Mon>=1 2:00 1:00 S
+Rule Tunisia 1944 only - Oct 8 0:00 0 -
+Rule Tunisia 1945 only - Sep 16 0:00 0 -
+Rule Tunisia 1977 only - Apr 30 0:00s 1:00 S
+Rule Tunisia 1977 only - Sep 24 0:00s 0 -
+Rule Tunisia 1978 only - May 1 0:00s 1:00 S
+Rule Tunisia 1978 only - Oct 1 0:00s 0 -
+Rule Tunisia 1988 only - Jun 1 0:00s 1:00 S
+Rule Tunisia 1988 1990 - Sep lastSun 0:00s 0 -
+Rule Tunisia 1989 only - Mar 26 0:00s 1:00 S
+Rule Tunisia 1990 only - May 1 0:00s 1:00 S
+Rule Tunisia 2005 only - May 1 0:00s 1:00 S
+Rule Tunisia 2005 only - Sep 30 1:00s 0 -
+Rule Tunisia 2006 2008 - Mar lastSun 2:00s 1:00 S
+Rule Tunisia 2006 2008 - Oct lastSun 2:00s 0 -
+Rule Tunisia 2010 max - Mar lastSun 2:00s 1:00 S
+Rule Tunisia 2010 max - Oct lastSun 2:00s 0 -
+Zone Africa/Tunis 0:40:44 - LMT 1881 May 12
+ 0:09:21 - PMT 1911 Mar 11 # Paris Mean Time
+ 1:00 Tunisia CE%sT
+Zone Africa/Kampala 2:09:40 - LMT 1928 Jul
+ 3:00 - EAT 1930
+ 2:30 - BEAT 1948
+ 2:44:45 - BEAUT 1957
+ 3:00 - EAT
+Zone Africa/Lusaka 1:53:08 - LMT 1903 Mar
+ 2:00 - CAT
+Zone Africa/Harare 2:04:12 - LMT 1903 Mar
+ 2:00 - CAT
diff --git a/js/dojo-1.7.2/dojox/date/zoneinfo/antarctica b/js/dojo-1.7.2/dojox/date/zoneinfo/antarctica
new file mode 100644
index 0000000..c8f7bff
--- /dev/null
+++ b/js/dojo-1.7.2/dojox/date/zoneinfo/antarctica
@@ -0,0 +1,68 @@
+Rule RussAQ 1981 1984 - Apr 1 0:00 1:00 S
+Rule RussAQ 1981 1983 - Oct 1 0:00 0 -
+Rule RussAQ 1984 1991 - Sep lastSun 2:00s 0 -
+Rule RussAQ 1985 1991 - Mar lastSun 2:00s 1:00 S
+Rule RussAQ 1992 only - Mar lastSat 23:00 1:00 S
+Rule RussAQ 1992 only - Sep lastSat 23:00 0 -
+Rule RussAQ 1993 max - Mar lastSun 2:00s 1:00 S
+Rule RussAQ 1993 1995 - Sep lastSun 2:00s 0 -
+Rule RussAQ 1996 max - Oct lastSun 2:00s 0 -
+Rule ArgAQ 1964 1966 - Mar 1 0:00 0 -
+Rule ArgAQ 1964 1966 - Oct 15 0:00 1:00 S
+Rule ArgAQ 1967 only - Apr 2 0:00 0 -
+Rule ArgAQ 1967 1968 - Oct Sun>=1 0:00 1:00 S
+Rule ArgAQ 1968 1969 - Apr Sun>=1 0:00 0 -
+Rule ArgAQ 1974 only - Jan 23 0:00 1:00 S
+Rule ArgAQ 1974 only - May 1 0:00 0 -
+Rule ChileAQ 1972 1986 - Mar Sun>=9 3:00u 0 -
+Rule ChileAQ 1974 1987 - Oct Sun>=9 4:00u 1:00 S
+Rule ChileAQ 1987 only - Apr 12 3:00u 0 -
+Rule ChileAQ 1988 1989 - Mar Sun>=9 3:00u 0 -
+Rule ChileAQ 1988 only - Oct Sun>=1 4:00u 1:00 S
+Rule ChileAQ 1989 only - Oct Sun>=9 4:00u 1:00 S
+Rule ChileAQ 1990 only - Mar 18 3:00u 0 -
+Rule ChileAQ 1990 only - Sep 16 4:00u 1:00 S
+Rule ChileAQ 1991 1996 - Mar Sun>=9 3:00u 0 -
+Rule ChileAQ 1991 1997 - Oct Sun>=9 4:00u 1:00 S
+Rule ChileAQ 1997 only - Mar 30 3:00u 0 -
+Rule ChileAQ 1998 only - Mar Sun>=9 3:00u 0 -
+Rule ChileAQ 1998 only - Sep 27 4:00u 1:00 S
+Rule ChileAQ 1999 only - Apr 4 3:00u 0 -
+Rule ChileAQ 1999 max - Oct Sun>=9 4:00u 1:00 S
+Rule ChileAQ 2000 max - Mar Sun>=9 3:00u 0 -
+Zone Antarctica/Casey 0 - zzz 1969
+ 8:00 - WST # Western (Aus) Standard Time
+Zone Antarctica/Davis 0 - zzz 1957 Jan 13
+ 7:00 - DAVT 1964 Nov # Davis Time
+ 0 - zzz 1969 Feb
+ 7:00 - DAVT
+Zone Antarctica/Mawson 0 - zzz 1954 Feb 13
+ 6:00 - MAWT # Mawson Time
+Zone Indian/Kerguelen 0 - zzz 1950 # Port-aux-Francais
+ 5:00 - TFT # ISO code TF Time
+Zone Antarctica/DumontDUrville 0 - zzz 1947
+ 10:00 - PMT 1952 Jan 14 # Port-Martin Time
+ 0 - zzz 1956 Nov
+ 10:00 - DDUT # Dumont-d'Urville Time
+Zone Antarctica/Syowa 0 - zzz 1957 Jan 29
+ 3:00 - SYOT # Syowa Time
+Rule NZAQ 1974 only - Nov 3 2:00s 1:00 D
+Rule NZAQ 1975 1988 - Oct lastSun 2:00s 1:00 D
+Rule NZAQ 1989 only - Oct 8 2:00s 1:00 D
+Rule NZAQ 1990 2006 - Oct Sun>=1 2:00s 1:00 D
+Rule NZAQ 1975 only - Feb 23 2:00s 0 S
+Rule NZAQ 1976 1989 - Mar Sun>=1 2:00s 0 S
+Rule NZAQ 1990 2007 - Mar Sun>=15 2:00s 0 S
+Rule NZAQ 2007 max - Sep lastSun 2:00s 1:00 D
+Rule NZAQ 2008 max - Apr Sun>=1 2:00s 0 S
+Zone Antarctica/Vostok 0 - zzz 1957 Dec 16
+ 6:00 - VOST # Vostok time
+Zone Antarctica/Rothera 0 - zzz 1976 Dec 1
+ -3:00 - ROTT # Rothera time
+Zone Antarctica/Palmer 0 - zzz 1965
+ -4:00 ArgAQ AR%sT 1969 Oct 5
+ -3:00 ArgAQ AR%sT 1982 May
+ -4:00 ChileAQ CL%sT
+Zone Antarctica/McMurdo 0 - zzz 1956
+ 12:00 NZAQ NZ%sT
+Link Antarctica/McMurdo Antarctica/South_Pole
diff --git a/js/dojo-1.7.2/dojox/date/zoneinfo/asia b/js/dojo-1.7.2/dojox/date/zoneinfo/asia
new file mode 100644
index 0000000..4045327
--- /dev/null
+++ b/js/dojo-1.7.2/dojox/date/zoneinfo/asia
@@ -0,0 +1,720 @@
+Rule EUAsia 1981 max - Mar lastSun 1:00u 1:00 S
+Rule EUAsia 1979 1995 - Sep lastSun 1:00u 0 -
+Rule EUAsia 1996 max - Oct lastSun 1:00u 0 -
+Rule E-EurAsia 1981 max - Mar lastSun 0:00 1:00 S
+Rule E-EurAsia 1979 1995 - Sep lastSun 0:00 0 -
+Rule E-EurAsia 1996 max - Oct lastSun 0:00 0 -
+Rule RussiaAsia 1981 1984 - Apr 1 0:00 1:00 S
+Rule RussiaAsia 1981 1983 - Oct 1 0:00 0 -
+Rule RussiaAsia 1984 1991 - Sep lastSun 2:00s 0 -
+Rule RussiaAsia 1985 1991 - Mar lastSun 2:00s 1:00 S
+Rule RussiaAsia 1992 only - Mar lastSat 23:00 1:00 S
+Rule RussiaAsia 1992 only - Sep lastSat 23:00 0 -
+Rule RussiaAsia 1993 max - Mar lastSun 2:00s 1:00 S
+Rule RussiaAsia 1993 1995 - Sep lastSun 2:00s 0 -
+Rule RussiaAsia 1996 max - Oct lastSun 2:00s 0 -
+Zone Asia/Kabul 4:36:48 - LMT 1890
+ 4:00 - AFT 1945
+ 4:30 - AFT
+Zone Asia/Yerevan 2:58:00 - LMT 1924 May 2
+ 3:00 - YERT 1957 Mar # Yerevan Time
+ 4:00 RussiaAsia YER%sT 1991 Mar 31 2:00s
+ 3:00 1:00 YERST 1991 Sep 23 # independence
+ 3:00 RussiaAsia AM%sT 1995 Sep 24 2:00s
+ 4:00 - AMT 1997
+ 4:00 RussiaAsia AM%sT
+Rule Azer 1997 max - Mar lastSun 4:00 1:00 S
+Rule Azer 1997 max - Oct lastSun 5:00 0 -
+Zone Asia/Baku 3:19:24 - LMT 1924 May 2
+ 3:00 - BAKT 1957 Mar # Baku Time
+ 4:00 RussiaAsia BAK%sT 1991 Mar 31 2:00s
+ 3:00 1:00 BAKST 1991 Aug 30 # independence
+ 3:00 RussiaAsia AZ%sT 1992 Sep lastSat 23:00
+ 4:00 - AZT 1996 # Azerbaijan time
+ 4:00 EUAsia AZ%sT 1997
+ 4:00 Azer AZ%sT
+Zone Asia/Bahrain 3:22:20 - LMT 1920 # Al Manamah
+ 4:00 - GST 1972 Jun
+ 3:00 - AST
+Zone Asia/Dhaka 6:01:40 - LMT 1890
+ 5:53:20 - HMT 1941 Oct # Howrah Mean Time?
+ 6:30 - BURT 1942 May 15 # Burma Time
+ 5:30 - IST 1942 Sep
+ 6:30 - BURT 1951 Sep 30
+ 6:00 - DACT 1971 Mar 26 # Dacca Time
+ 6:00 - BDT 2009 Jun 19 23:00 # Bangladesh Time
+ 6:00 1:00 BDST 2010
+ 6:00 - BDT
+Zone Asia/Thimphu 5:58:36 - LMT 1947 Aug 15 # or Thimbu
+ 5:30 - IST 1987 Oct
+ 6:00 - BTT # Bhutan Time
+Zone Indian/Chagos 4:49:40 - LMT 1907
+ 5:00 - IOT 1996 # BIOT Time
+ 6:00 - IOT
+Zone Asia/Brunei 7:39:40 - LMT 1926 Mar # Bandar Seri Begawan
+ 7:30 - BNT 1933
+ 8:00 - BNT
+Zone Asia/Rangoon 6:24:40 - LMT 1880 # or Yangon
+ 6:24:36 - RMT 1920 # Rangoon Mean Time?
+ 6:30 - BURT 1942 May # Burma Time
+ 9:00 - JST 1945 May 3
+ 6:30 - MMT # Myanmar Time
+Zone Asia/Phnom_Penh 6:59:40 - LMT 1906 Jun 9
+ 7:06:20 - SMT 1911 Mar 11 0:01 # Saigon MT?
+ 7:00 - ICT 1912 May
+ 8:00 - ICT 1931 May
+ 7:00 - ICT
+Rule Shang 1940 only - Jun 3 0:00 1:00 D
+Rule Shang 1940 1941 - Oct 1 0:00 0 S
+Rule Shang 1941 only - Mar 16 0:00 1:00 D
+Rule PRC 1986 only - May 4 0:00 1:00 D
+Rule PRC 1986 1991 - Sep Sun>=11 0:00 0 S
+Rule PRC 1987 1991 - Apr Sun>=10 0:00 1:00 D
+Zone Asia/Harbin 8:26:44 - LMT 1928 # or Haerbin
+ 8:30 - CHAT 1932 Mar # Changbai Time
+ 8:00 - CST 1940
+ 9:00 - CHAT 1966 May
+ 8:30 - CHAT 1980 May
+ 8:00 PRC C%sT
+Zone Asia/Shanghai 8:05:52 - LMT 1928
+ 8:00 Shang C%sT 1949
+ 8:00 PRC C%sT
+Zone Asia/Chongqing 7:06:20 - LMT 1928 # or Chungking
+ 7:00 - LONT 1980 May # Long-shu Time
+ 8:00 PRC C%sT
+Zone Asia/Urumqi 5:50:20 - LMT 1928 # or Urumchi
+ 6:00 - URUT 1980 May # Urumqi Time
+ 8:00 PRC C%sT
+Zone Asia/Kashgar 5:03:56 - LMT 1928 # or Kashi or Kaxgar
+ 5:30 - KAST 1940 # Kashgar Time
+ 5:00 - KAST 1980 May
+ 8:00 PRC C%sT
+Rule HK 1946 only - Apr 20 3:30 1:00 S
+Rule HK 1946 only - Dec 1 3:30 0 -
+Rule HK 1947 only - Apr 13 3:30 1:00 S
+Rule HK 1947 only - Dec 30 3:30 0 -
+Rule HK 1948 only - May 2 3:30 1:00 S
+Rule HK 1948 1952 - Oct lastSun 3:30 0 -
+Rule HK 1949 1953 - Apr Sun>=1 3:30 1:00 S
+Rule HK 1953 only - Nov 1 3:30 0 -
+Rule HK 1954 1964 - Mar Sun>=18 3:30 1:00 S
+Rule HK 1954 only - Oct 31 3:30 0 -
+Rule HK 1955 1964 - Nov Sun>=1 3:30 0 -
+Rule HK 1965 1977 - Apr Sun>=16 3:30 1:00 S
+Rule HK 1965 1977 - Oct Sun>=16 3:30 0 -
+Rule HK 1979 1980 - May Sun>=8 3:30 1:00 S
+Rule HK 1979 1980 - Oct Sun>=16 3:30 0 -
+Zone Asia/Hong_Kong 7:36:36 - LMT 1904 Oct 30
+ 8:00 HK HK%sT
+Rule Taiwan 1945 1951 - May 1 0:00 1:00 D
+Rule Taiwan 1945 1951 - Oct 1 0:00 0 S
+Rule Taiwan 1952 only - Mar 1 0:00 1:00 D
+Rule Taiwan 1952 1954 - Nov 1 0:00 0 S
+Rule Taiwan 1953 1959 - Apr 1 0:00 1:00 D
+Rule Taiwan 1955 1961 - Oct 1 0:00 0 S
+Rule Taiwan 1960 1961 - Jun 1 0:00 1:00 D
+Rule Taiwan 1974 1975 - Apr 1 0:00 1:00 D
+Rule Taiwan 1974 1975 - Oct 1 0:00 0 S
+Rule Taiwan 1980 only - Jun 30 0:00 1:00 D
+Rule Taiwan 1980 only - Sep 30 0:00 0 S
+Zone Asia/Taipei 8:06:00 - LMT 1896 # or Taibei or T'ai-pei
+ 8:00 Taiwan C%sT
+Rule Macau 1961 1962 - Mar Sun>=16 3:30 1:00 S
+Rule Macau 1961 1964 - Nov Sun>=1 3:30 0 -
+Rule Macau 1963 only - Mar Sun>=16 0:00 1:00 S
+Rule Macau 1964 only - Mar Sun>=16 3:30 1:00 S
+Rule Macau 1965 only - Mar Sun>=16 0:00 1:00 S
+Rule Macau 1965 only - Oct 31 0:00 0 -
+Rule Macau 1966 1971 - Apr Sun>=16 3:30 1:00 S
+Rule Macau 1966 1971 - Oct Sun>=16 3:30 0 -
+Rule Macau 1972 1974 - Apr Sun>=15 0:00 1:00 S
+Rule Macau 1972 1973 - Oct Sun>=15 0:00 0 -
+Rule Macau 1974 1977 - Oct Sun>=15 3:30 0 -
+Rule Macau 1975 1977 - Apr Sun>=15 3:30 1:00 S
+Rule Macau 1978 1980 - Apr Sun>=15 0:00 1:00 S
+Rule Macau 1978 1980 - Oct Sun>=15 0:00 0 -
+Zone Asia/Macau 7:34:20 - LMT 1912
+ 8:00 Macau MO%sT 1999 Dec 20 # return to China
+ 8:00 PRC C%sT
+Rule Cyprus 1975 only - Apr 13 0:00 1:00 S
+Rule Cyprus 1975 only - Oct 12 0:00 0 -
+Rule Cyprus 1976 only - May 15 0:00 1:00 S
+Rule Cyprus 1976 only - Oct 11 0:00 0 -
+Rule Cyprus 1977 1980 - Apr Sun>=1 0:00 1:00 S
+Rule Cyprus 1977 only - Sep 25 0:00 0 -
+Rule Cyprus 1978 only - Oct 2 0:00 0 -
+Rule Cyprus 1979 1997 - Sep lastSun 0:00 0 -
+Rule Cyprus 1981 1998 - Mar lastSun 0:00 1:00 S
+Zone Asia/Nicosia 2:13:28 - LMT 1921 Nov 14
+ 2:00 Cyprus EE%sT 1998 Sep
+ 2:00 EUAsia EE%sT
+Link Asia/Nicosia Europe/Nicosia
+Zone Asia/Tbilisi 2:59:16 - LMT 1880
+ 2:59:16 - TBMT 1924 May 2 # Tbilisi Mean Time
+ 3:00 - TBIT 1957 Mar # Tbilisi Time
+ 4:00 RussiaAsia TBI%sT 1991 Mar 31 2:00s
+ 3:00 1:00 TBIST 1991 Apr 9 # independence
+ 3:00 RussiaAsia GE%sT 1992 # Georgia Time
+ 3:00 E-EurAsia GE%sT 1994 Sep lastSun
+ 4:00 E-EurAsia GE%sT 1996 Oct lastSun
+ 4:00 1:00 GEST 1997 Mar lastSun
+ 4:00 E-EurAsia GE%sT 2004 Jun 27
+ 3:00 RussiaAsia GE%sT 2005 Mar lastSun 2:00
+ 4:00 - GET
+Zone Asia/Dili 8:22:20 - LMT 1912
+ 8:00 - TLT 1942 Feb 21 23:00 # E Timor Time
+ 9:00 - JST 1945 Sep 23
+ 9:00 - TLT 1976 May 3
+ 8:00 - CIT 2000 Sep 17 00:00
+ 9:00 - TLT
+Zone Asia/Kolkata 5:53:28 - LMT 1880 # Kolkata
+ 5:53:20 - HMT 1941 Oct # Howrah Mean Time?
+ 6:30 - BURT 1942 May 15 # Burma Time
+ 5:30 - IST 1942 Sep
+ 5:30 1:00 IST 1945 Oct 15
+ 5:30 - IST
+Zone Asia/Jakarta 7:07:12 - LMT 1867 Aug 10
+ 7:07:12 - JMT 1923 Dec 31 23:47:12 # Jakarta
+ 7:20 - JAVT 1932 Nov # Java Time
+ 7:30 - WIT 1942 Mar 23
+ 9:00 - JST 1945 Sep 23
+ 7:30 - WIT 1948 May
+ 8:00 - WIT 1950 May
+ 7:30 - WIT 1964
+ 7:00 - WIT
+Zone Asia/Pontianak 7:17:20 - LMT 1908 May
+ 7:17:20 - PMT 1932 Nov # Pontianak MT
+ 7:30 - WIT 1942 Jan 29
+ 9:00 - JST 1945 Sep 23
+ 7:30 - WIT 1948 May
+ 8:00 - WIT 1950 May
+ 7:30 - WIT 1964
+ 8:00 - CIT 1988 Jan 1
+ 7:00 - WIT
+Zone Asia/Makassar 7:57:36 - LMT 1920
+ 7:57:36 - MMT 1932 Nov # Macassar MT
+ 8:00 - CIT 1942 Feb 9
+ 9:00 - JST 1945 Sep 23
+ 8:00 - CIT
+Zone Asia/Jayapura 9:22:48 - LMT 1932 Nov
+ 9:00 - EIT 1944 Sep 1
+ 9:30 - CST 1964
+ 9:00 - EIT
+Rule Iran 1978 1980 - Mar 21 0:00 1:00 D
+Rule Iran 1978 only - Oct 21 0:00 0 S
+Rule Iran 1979 only - Sep 19 0:00 0 S
+Rule Iran 1980 only - Sep 23 0:00 0 S
+Rule Iran 1991 only - May 3 0:00 1:00 D
+Rule Iran 1992 1995 - Mar 22 0:00 1:00 D
+Rule Iran 1991 1995 - Sep 22 0:00 0 S
+Rule Iran 1996 only - Mar 21 0:00 1:00 D
+Rule Iran 1996 only - Sep 21 0:00 0 S
+Rule Iran 1997 1999 - Mar 22 0:00 1:00 D
+Rule Iran 1997 1999 - Sep 22 0:00 0 S
+Rule Iran 2000 only - Mar 21 0:00 1:00 D
+Rule Iran 2000 only - Sep 21 0:00 0 S
+Rule Iran 2001 2003 - Mar 22 0:00 1:00 D
+Rule Iran 2001 2003 - Sep 22 0:00 0 S
+Rule Iran 2004 only - Mar 21 0:00 1:00 D
+Rule Iran 2004 only - Sep 21 0:00 0 S
+Rule Iran 2005 only - Mar 22 0:00 1:00 D
+Rule Iran 2005 only - Sep 22 0:00 0 S
+Rule Iran 2008 only - Mar 21 0:00 1:00 D
+Rule Iran 2008 only - Sep 21 0:00 0 S
+Rule Iran 2009 2011 - Mar 22 0:00 1:00 D
+Rule Iran 2009 2011 - Sep 22 0:00 0 S
+Rule Iran 2012 only - Mar 21 0:00 1:00 D
+Rule Iran 2012 only - Sep 21 0:00 0 S
+Rule Iran 2013 2015 - Mar 22 0:00 1:00 D
+Rule Iran 2013 2015 - Sep 22 0:00 0 S
+Rule Iran 2016 only - Mar 21 0:00 1:00 D
+Rule Iran 2016 only - Sep 21 0:00 0 S
+Rule Iran 2017 2019 - Mar 22 0:00 1:00 D
+Rule Iran 2017 2019 - Sep 22 0:00 0 S
+Rule Iran 2020 only - Mar 21 0:00 1:00 D
+Rule Iran 2020 only - Sep 21 0:00 0 S
+Rule Iran 2021 2023 - Mar 22 0:00 1:00 D
+Rule Iran 2021 2023 - Sep 22 0:00 0 S
+Rule Iran 2024 only - Mar 21 0:00 1:00 D
+Rule Iran 2024 only - Sep 21 0:00 0 S
+Rule Iran 2025 2027 - Mar 22 0:00 1:00 D
+Rule Iran 2025 2027 - Sep 22 0:00 0 S
+Rule Iran 2028 2029 - Mar 21 0:00 1:00 D
+Rule Iran 2028 2029 - Sep 21 0:00 0 S
+Rule Iran 2030 2031 - Mar 22 0:00 1:00 D
+Rule Iran 2030 2031 - Sep 22 0:00 0 S
+Rule Iran 2032 2033 - Mar 21 0:00 1:00 D
+Rule Iran 2032 2033 - Sep 21 0:00 0 S
+Rule Iran 2034 2035 - Mar 22 0:00 1:00 D
+Rule Iran 2034 2035 - Sep 22 0:00 0 S
+Rule Iran 2036 2037 - Mar 21 0:00 1:00 D
+Rule Iran 2036 2037 - Sep 21 0:00 0 S
+Zone Asia/Tehran 3:25:44 - LMT 1916
+ 3:25:44 - TMT 1946 # Tehran Mean Time
+ 3:30 - IRST 1977 Nov
+ 4:00 Iran IR%sT 1979
+ 3:30 Iran IR%sT
+Rule Iraq 1982 only - May 1 0:00 1:00 D
+Rule Iraq 1982 1984 - Oct 1 0:00 0 S
+Rule Iraq 1983 only - Mar 31 0:00 1:00 D
+Rule Iraq 1984 1985 - Apr 1 0:00 1:00 D
+Rule Iraq 1985 1990 - Sep lastSun 1:00s 0 S
+Rule Iraq 1986 1990 - Mar lastSun 1:00s 1:00 D
+Rule Iraq 1991 2007 - Apr 1 3:00s 1:00 D
+Rule Iraq 1991 2007 - Oct 1 3:00s 0 S
+Zone Asia/Baghdad 2:57:40 - LMT 1890
+ 2:57:36 - BMT 1918 # Baghdad Mean Time?
+ 3:00 - AST 1982 May
+ 3:00 Iraq A%sT
+Rule Zion 1940 only - Jun 1 0:00 1:00 D
+Rule Zion 1942 1944 - Nov 1 0:00 0 S
+Rule Zion 1943 only - Apr 1 2:00 1:00 D
+Rule Zion 1944 only - Apr 1 0:00 1:00 D
+Rule Zion 1945 only - Apr 16 0:00 1:00 D
+Rule Zion 1945 only - Nov 1 2:00 0 S
+Rule Zion 1946 only - Apr 16 2:00 1:00 D
+Rule Zion 1946 only - Nov 1 0:00 0 S
+Rule Zion 1948 only - May 23 0:00 2:00 DD
+Rule Zion 1948 only - Sep 1 0:00 1:00 D
+Rule Zion 1948 1949 - Nov 1 2:00 0 S
+Rule Zion 1949 only - May 1 0:00 1:00 D
+Rule Zion 1950 only - Apr 16 0:00 1:00 D
+Rule Zion 1950 only - Sep 15 3:00 0 S
+Rule Zion 1951 only - Apr 1 0:00 1:00 D
+Rule Zion 1951 only - Nov 11 3:00 0 S
+Rule Zion 1952 only - Apr 20 2:00 1:00 D
+Rule Zion 1952 only - Oct 19 3:00 0 S
+Rule Zion 1953 only - Apr 12 2:00 1:00 D
+Rule Zion 1953 only - Sep 13 3:00 0 S
+Rule Zion 1954 only - Jun 13 0:00 1:00 D
+Rule Zion 1954 only - Sep 12 0:00 0 S
+Rule Zion 1955 only - Jun 11 2:00 1:00 D
+Rule Zion 1955 only - Sep 11 0:00 0 S
+Rule Zion 1956 only - Jun 3 0:00 1:00 D
+Rule Zion 1956 only - Sep 30 3:00 0 S
+Rule Zion 1957 only - Apr 29 2:00 1:00 D
+Rule Zion 1957 only - Sep 22 0:00 0 S
+Rule Zion 1974 only - Jul 7 0:00 1:00 D
+Rule Zion 1974 only - Oct 13 0:00 0 S
+Rule Zion 1975 only - Apr 20 0:00 1:00 D
+Rule Zion 1975 only - Aug 31 0:00 0 S
+Rule Zion 1985 only - Apr 14 0:00 1:00 D
+Rule Zion 1985 only - Sep 15 0:00 0 S
+Rule Zion 1986 only - May 18 0:00 1:00 D
+Rule Zion 1986 only - Sep 7 0:00 0 S
+Rule Zion 1987 only - Apr 15 0:00 1:00 D
+Rule Zion 1987 only - Sep 13 0:00 0 S
+Rule Zion 1988 only - Apr 9 0:00 1:00 D
+Rule Zion 1988 only - Sep 3 0:00 0 S
+Rule Zion 1989 only - Apr 30 0:00 1:00 D
+Rule Zion 1989 only - Sep 3 0:00 0 S
+Rule Zion 1990 only - Mar 25 0:00 1:00 D
+Rule Zion 1990 only - Aug 26 0:00 0 S
+Rule Zion 1991 only - Mar 24 0:00 1:00 D
+Rule Zion 1991 only - Sep 1 0:00 0 S
+Rule Zion 1992 only - Mar 29 0:00 1:00 D
+Rule Zion 1992 only - Sep 6 0:00 0 S
+Rule Zion 1993 only - Apr 2 0:00 1:00 D
+Rule Zion 1993 only - Sep 5 0:00 0 S
+Rule Zion 1994 only - Apr 1 0:00 1:00 D
+Rule Zion 1994 only - Aug 28 0:00 0 S
+Rule Zion 1995 only - Mar 31 0:00 1:00 D
+Rule Zion 1995 only - Sep 3 0:00 0 S
+Rule Zion 1996 only - Mar 15 0:00 1:00 D
+Rule Zion 1996 only - Sep 16 0:00 0 S
+Rule Zion 1997 only - Mar 21 0:00 1:00 D
+Rule Zion 1997 only - Sep 14 0:00 0 S
+Rule Zion 1998 only - Mar 20 0:00 1:00 D
+Rule Zion 1998 only - Sep 6 0:00 0 S
+Rule Zion 1999 only - Apr 2 2:00 1:00 D
+Rule Zion 1999 only - Sep 3 2:00 0 S
+Rule Zion 2000 only - Apr 14 2:00 1:00 D
+Rule Zion 2000 only - Oct 6 1:00 0 S
+Rule Zion 2001 only - Apr 9 1:00 1:00 D
+Rule Zion 2001 only - Sep 24 1:00 0 S
+Rule Zion 2002 only - Mar 29 1:00 1:00 D
+Rule Zion 2002 only - Oct 7 1:00 0 S
+Rule Zion 2003 only - Mar 28 1:00 1:00 D
+Rule Zion 2003 only - Oct 3 1:00 0 S
+Rule Zion 2004 only - Apr 7 1:00 1:00 D
+Rule Zion 2004 only - Sep 22 1:00 0 S
+Rule Zion 2005 only - Apr 1 2:00 1:00 D
+Rule Zion 2005 only - Oct 9 2:00 0 S
+Rule Zion 2006 2010 - Mar Fri>=26 2:00 1:00 D
+Rule Zion 2006 only - Oct 1 2:00 0 S
+Rule Zion 2007 only - Sep 16 2:00 0 S
+Rule Zion 2008 only - Oct 5 2:00 0 S
+Rule Zion 2009 only - Sep 27 2:00 0 S
+Rule Zion 2010 only - Sep 12 2:00 0 S
+Rule Zion 2011 only - Apr 1 2:00 1:00 D
+Rule Zion 2011 only - Oct 2 2:00 0 S
+Rule Zion 2012 2015 - Mar Fri>=26 2:00 1:00 D
+Rule Zion 2012 only - Sep 23 2:00 0 S
+Rule Zion 2013 only - Sep 8 2:00 0 S
+Rule Zion 2014 only - Sep 28 2:00 0 S
+Rule Zion 2015 only - Sep 20 2:00 0 S
+Rule Zion 2016 only - Apr 1 2:00 1:00 D
+Rule Zion 2016 only - Oct 9 2:00 0 S
+Rule Zion 2017 2021 - Mar Fri>=26 2:00 1:00 D
+Rule Zion 2017 only - Sep 24 2:00 0 S
+Rule Zion 2018 only - Sep 16 2:00 0 S
+Rule Zion 2019 only - Oct 6 2:00 0 S
+Rule Zion 2020 only - Sep 27 2:00 0 S
+Rule Zion 2021 only - Sep 12 2:00 0 S
+Rule Zion 2022 only - Apr 1 2:00 1:00 D
+Rule Zion 2022 only - Oct 2 2:00 0 S
+Rule Zion 2023 2032 - Mar Fri>=26 2:00 1:00 D
+Rule Zion 2023 only - Sep 24 2:00 0 S
+Rule Zion 2024 only - Oct 6 2:00 0 S
+Rule Zion 2025 only - Sep 28 2:00 0 S
+Rule Zion 2026 only - Sep 20 2:00 0 S
+Rule Zion 2027 only - Oct 10 2:00 0 S
+Rule Zion 2028 only - Sep 24 2:00 0 S
+Rule Zion 2029 only - Sep 16 2:00 0 S
+Rule Zion 2030 only - Oct 6 2:00 0 S
+Rule Zion 2031 only - Sep 21 2:00 0 S
+Rule Zion 2032 only - Sep 12 2:00 0 S
+Rule Zion 2033 only - Apr 1 2:00 1:00 D
+Rule Zion 2033 only - Oct 2 2:00 0 S
+Rule Zion 2034 2037 - Mar Fri>=26 2:00 1:00 D
+Rule Zion 2034 only - Sep 17 2:00 0 S
+Rule Zion 2035 only - Oct 7 2:00 0 S
+Rule Zion 2036 only - Sep 28 2:00 0 S
+Rule Zion 2037 only - Sep 13 2:00 0 S
+Zone Asia/Jerusalem 2:20:56 - LMT 1880
+ 2:20:40 - JMT 1918 # Jerusalem Mean Time?
+ 2:00 Zion I%sT
+Rule Japan 1948 only - May Sun>=1 2:00 1:00 D
+Rule Japan 1948 1951 - Sep Sat>=8 2:00 0 S
+Rule Japan 1949 only - Apr Sun>=1 2:00 1:00 D
+Rule Japan 1950 1951 - May Sun>=1 2:00 1:00 D
+Zone Asia/Tokyo 9:18:59 - LMT 1887 Dec 31 15:00u
+ 9:00 - JST 1896
+ 9:00 - CJT 1938
+ 9:00 Japan J%sT
+Rule Jordan 1973 only - Jun 6 0:00 1:00 S
+Rule Jordan 1973 1975 - Oct 1 0:00 0 -
+Rule Jordan 1974 1977 - May 1 0:00 1:00 S
+Rule Jordan 1976 only - Nov 1 0:00 0 -
+Rule Jordan 1977 only - Oct 1 0:00 0 -
+Rule Jordan 1978 only - Apr 30 0:00 1:00 S
+Rule Jordan 1978 only - Sep 30 0:00 0 -
+Rule Jordan 1985 only - Apr 1 0:00 1:00 S
+Rule Jordan 1985 only - Oct 1 0:00 0 -
+Rule Jordan 1986 1988 - Apr Fri>=1 0:00 1:00 S
+Rule Jordan 1986 1990 - Oct Fri>=1 0:00 0 -
+Rule Jordan 1989 only - May 8 0:00 1:00 S
+Rule Jordan 1990 only - Apr 27 0:00 1:00 S
+Rule Jordan 1991 only - Apr 17 0:00 1:00 S
+Rule Jordan 1991 only - Sep 27 0:00 0 -
+Rule Jordan 1992 only - Apr 10 0:00 1:00 S
+Rule Jordan 1992 1993 - Oct Fri>=1 0:00 0 -
+Rule Jordan 1993 1998 - Apr Fri>=1 0:00 1:00 S
+Rule Jordan 1994 only - Sep Fri>=15 0:00 0 -
+Rule Jordan 1995 1998 - Sep Fri>=15 0:00s 0 -
+Rule Jordan 1999 only - Jul 1 0:00s 1:00 S
+Rule Jordan 1999 2002 - Sep lastFri 0:00s 0 -
+Rule Jordan 2000 2001 - Mar lastThu 0:00s 1:00 S
+Rule Jordan 2002 max - Mar lastThu 24:00 1:00 S
+Rule Jordan 2003 only - Oct 24 0:00s 0 -
+Rule Jordan 2004 only - Oct 15 0:00s 0 -
+Rule Jordan 2005 only - Sep lastFri 0:00s 0 -
+Rule Jordan 2006 max - Oct lastFri 0:00s 0 -
+Zone Asia/Amman 2:23:44 - LMT 1931
+ 2:00 Jordan EE%sT
+Zone Asia/Almaty 5:07:48 - LMT 1924 May 2 # or Alma-Ata
+ 5:00 - ALMT 1930 Jun 21 # Alma-Ata Time
+ 6:00 RussiaAsia ALM%sT 1991
+ 6:00 - ALMT 1992
+ 6:00 RussiaAsia ALM%sT 2005 Mar 15
+ 6:00 - ALMT
+Zone Asia/Qyzylorda 4:21:52 - LMT 1924 May 2
+ 4:00 - KIZT 1930 Jun 21 # Kizilorda Time
+ 5:00 - KIZT 1981 Apr 1
+ 5:00 1:00 KIZST 1981 Oct 1
+ 6:00 - KIZT 1982 Apr 1
+ 5:00 RussiaAsia KIZ%sT 1991
+ 5:00 - KIZT 1991 Dec 16 # independence
+ 5:00 - QYZT 1992 Jan 19 2:00
+ 6:00 RussiaAsia QYZ%sT 2005 Mar 15
+ 6:00 - QYZT
+Zone Asia/Aqtobe 3:48:40 - LMT 1924 May 2
+ 4:00 - AKTT 1930 Jun 21 # Aktyubinsk Time
+ 5:00 - AKTT 1981 Apr 1
+ 5:00 1:00 AKTST 1981 Oct 1
+ 6:00 - AKTT 1982 Apr 1
+ 5:00 RussiaAsia AKT%sT 1991
+ 5:00 - AKTT 1991 Dec 16 # independence
+ 5:00 RussiaAsia AQT%sT 2005 Mar 15 # Aqtobe Time
+ 5:00 - AQTT
+Zone Asia/Aqtau 3:21:04 - LMT 1924 May 2
+ 4:00 - FORT 1930 Jun 21 # Fort Shevchenko T
+ 5:00 - FORT 1963
+ 5:00 - SHET 1981 Oct 1 # Shevchenko Time
+ 6:00 - SHET 1982 Apr 1
+ 5:00 RussiaAsia SHE%sT 1991
+ 5:00 - SHET 1991 Dec 16 # independence
+ 5:00 RussiaAsia AQT%sT 1995 Mar lastSun 2:00 # Aqtau Time
+ 4:00 RussiaAsia AQT%sT 2005 Mar 15
+ 5:00 - AQTT
+Zone Asia/Oral 3:25:24 - LMT 1924 May 2 # or Ural'sk
+ 4:00 - URAT 1930 Jun 21 # Ural'sk time
+ 5:00 - URAT 1981 Apr 1
+ 5:00 1:00 URAST 1981 Oct 1
+ 6:00 - URAT 1982 Apr 1
+ 5:00 RussiaAsia URA%sT 1989 Mar 26 2:00
+ 4:00 RussiaAsia URA%sT 1991
+ 4:00 - URAT 1991 Dec 16 # independence
+ 4:00 RussiaAsia ORA%sT 2005 Mar 15 # Oral Time
+ 5:00 - ORAT
+Rule Kyrgyz 1992 1996 - Apr Sun>=7 0:00s 1:00 S
+Rule Kyrgyz 1992 1996 - Sep lastSun 0:00 0 -
+Rule Kyrgyz 1997 2005 - Mar lastSun 2:30 1:00 S
+Rule Kyrgyz 1997 2004 - Oct lastSun 2:30 0 -
+Zone Asia/Bishkek 4:58:24 - LMT 1924 May 2
+ 5:00 - FRUT 1930 Jun 21 # Frunze Time
+ 6:00 RussiaAsia FRU%sT 1991 Mar 31 2:00s
+ 5:00 1:00 FRUST 1991 Aug 31 2:00 # independence
+ 5:00 Kyrgyz KG%sT 2005 Aug 12 # Kyrgyzstan Time
+ 6:00 - KGT
+Rule ROK 1960 only - May 15 0:00 1:00 D
+Rule ROK 1960 only - Sep 13 0:00 0 S
+Rule ROK 1987 1988 - May Sun>=8 0:00 1:00 D
+Rule ROK 1987 1988 - Oct Sun>=8 0:00 0 S
+Zone Asia/Seoul 8:27:52 - LMT 1890
+ 8:30 - KST 1904 Dec
+ 9:00 - KST 1928
+ 8:30 - KST 1932
+ 9:00 - KST 1954 Mar 21
+ 8:00 ROK K%sT 1961 Aug 10
+ 8:30 - KST 1968 Oct
+ 9:00 ROK K%sT
+Zone Asia/Pyongyang 8:23:00 - LMT 1890
+ 8:30 - KST 1904 Dec
+ 9:00 - KST 1928
+ 8:30 - KST 1932
+ 9:00 - KST 1954 Mar 21
+ 8:00 - KST 1961 Aug 10
+ 9:00 - KST
+Zone Asia/Kuwait 3:11:56 - LMT 1950
+ 3:00 - AST
+Zone Asia/Vientiane 6:50:24 - LMT 1906 Jun 9 # or Viangchan
+ 7:06:20 - SMT 1911 Mar 11 0:01 # Saigon MT?
+ 7:00 - ICT 1912 May
+ 8:00 - ICT 1931 May
+ 7:00 - ICT
+Rule Lebanon 1920 only - Mar 28 0:00 1:00 S
+Rule Lebanon 1920 only - Oct 25 0:00 0 -
+Rule Lebanon 1921 only - Apr 3 0:00 1:00 S
+Rule Lebanon 1921 only - Oct 3 0:00 0 -
+Rule Lebanon 1922 only - Mar 26 0:00 1:00 S
+Rule Lebanon 1922 only - Oct 8 0:00 0 -
+Rule Lebanon 1923 only - Apr 22 0:00 1:00 S
+Rule Lebanon 1923 only - Sep 16 0:00 0 -
+Rule Lebanon 1957 1961 - May 1 0:00 1:00 S
+Rule Lebanon 1957 1961 - Oct 1 0:00 0 -
+Rule Lebanon 1972 only - Jun 22 0:00 1:00 S
+Rule Lebanon 1972 1977 - Oct 1 0:00 0 -
+Rule Lebanon 1973 1977 - May 1 0:00 1:00 S
+Rule Lebanon 1978 only - Apr 30 0:00 1:00 S
+Rule Lebanon 1978 only - Sep 30 0:00 0 -
+Rule Lebanon 1984 1987 - May 1 0:00 1:00 S
+Rule Lebanon 1984 1991 - Oct 16 0:00 0 -
+Rule Lebanon 1988 only - Jun 1 0:00 1:00 S
+Rule Lebanon 1989 only - May 10 0:00 1:00 S
+Rule Lebanon 1990 1992 - May 1 0:00 1:00 S
+Rule Lebanon 1992 only - Oct 4 0:00 0 -
+Rule Lebanon 1993 max - Mar lastSun 0:00 1:00 S
+Rule Lebanon 1993 1998 - Sep lastSun 0:00 0 -
+Rule Lebanon 1999 max - Oct lastSun 0:00 0 -
+Zone Asia/Beirut 2:22:00 - LMT 1880
+ 2:00 Lebanon EE%sT
+Rule NBorneo 1935 1941 - Sep 14 0:00 0:20 TS # one-Third Summer
+Rule NBorneo 1935 1941 - Dec 14 0:00 0 -
+Zone Asia/Kuala_Lumpur 6:46:46 - LMT 1901 Jan 1
+ 6:55:25 - SMT 1905 Jun 1 # Singapore M.T.
+ 7:00 - MALT 1933 Jan 1 # Malaya Time
+ 7:00 0:20 MALST 1936 Jan 1
+ 7:20 - MALT 1941 Sep 1
+ 7:30 - MALT 1942 Feb 16
+ 9:00 - JST 1945 Sep 12
+ 7:30 - MALT 1982 Jan 1
+ 8:00 - MYT # Malaysia Time
+Zone Asia/Kuching 7:21:20 - LMT 1926 Mar
+ 7:30 - BORT 1933 # Borneo Time
+ 8:00 NBorneo BOR%sT 1942 Feb 16
+ 9:00 - JST 1945 Sep 12
+ 8:00 - BORT 1982 Jan 1
+ 8:00 - MYT
+Zone Indian/Maldives 4:54:00 - LMT 1880 # Male
+ 4:54:00 - MMT 1960 # Male Mean Time
+ 5:00 - MVT # Maldives Time
+Rule Mongol 1983 1984 - Apr 1 0:00 1:00 S
+Rule Mongol 1983 only - Oct 1 0:00 0 -
+Rule Mongol 1985 1998 - Mar lastSun 0:00 1:00 S
+Rule Mongol 1984 1998 - Sep lastSun 0:00 0 -
+Rule Mongol 2001 only - Apr lastSat 2:00 1:00 S
+Rule Mongol 2001 2006 - Sep lastSat 2:00 0 -
+Rule Mongol 2002 2006 - Mar lastSat 2:00 1:00 S
+Zone Asia/Hovd 6:06:36 - LMT 1905 Aug
+ 6:00 - HOVT 1978 # Hovd Time
+ 7:00 Mongol HOV%sT
+Zone Asia/Ulaanbaatar 7:07:32 - LMT 1905 Aug
+ 7:00 - ULAT 1978 # Ulaanbaatar Time
+ 8:00 Mongol ULA%sT
+Zone Asia/Choibalsan 7:38:00 - LMT 1905 Aug
+ 7:00 - ULAT 1978
+ 8:00 - ULAT 1983 Apr
+ 9:00 Mongol CHO%sT 2008 Mar 31 # Choibalsan Time
+ 8:00 Mongol CHO%sT
+Zone Asia/Kathmandu 5:41:16 - LMT 1920
+ 5:30 - IST 1986
+ 5:45 - NPT # Nepal Time
+Zone Asia/Muscat 3:54:20 - LMT 1920
+ 4:00 - GST
+Rule Pakistan 2002 only - Apr Sun>=2 0:01 1:00 S
+Rule Pakistan 2002 only - Oct Sun>=2 0:01 0 -
+Rule Pakistan 2008 only - Jun 1 0:00 1:00 S
+Rule Pakistan 2008 only - Nov 1 0:00 0 -
+Rule Pakistan 2009 only - Apr 15 0:00 1:00 S
+Rule Pakistan 2009 only - Nov 1 0:00 0 -
+Zone Asia/Karachi 4:28:12 - LMT 1907
+ 5:30 - IST 1942 Sep
+ 5:30 1:00 IST 1945 Oct 15
+ 5:30 - IST 1951 Sep 30
+ 5:00 - KART 1971 Mar 26 # Karachi Time
+ 5:00 Pakistan PK%sT # Pakistan Time
+Rule EgyptAsia 1957 only - May 10 0:00 1:00 S
+Rule EgyptAsia 1957 1958 - Oct 1 0:00 0 -
+Rule EgyptAsia 1958 only - May 1 0:00 1:00 S
+Rule EgyptAsia 1959 1967 - May 1 1:00 1:00 S
+Rule EgyptAsia 1959 1965 - Sep 30 3:00 0 -
+Rule EgyptAsia 1966 only - Oct 1 3:00 0 -
+Rule Palestine 1999 2005 - Apr Fri>=15 0:00 1:00 S
+Rule Palestine 1999 2003 - Oct Fri>=15 0:00 0 -
+Rule Palestine 2004 only - Oct 1 1:00 0 -
+Rule Palestine 2005 only - Oct 4 2:00 0 -
+Rule Palestine 2006 2008 - Apr 1 0:00 1:00 S
+Rule Palestine 2006 only - Sep 22 0:00 0 -
+Rule Palestine 2007 only - Sep Thu>=8 2:00 0 -
+Rule Palestine 2008 only - Aug lastFri 2:00 0 -
+Rule Palestine 2009 max - Mar lastFri 0:00 1:00 S
+Rule Palestine 2009 max - Sep lastMon 2:00 0 -
+Zone Asia/Gaza 2:17:52 - LMT 1900 Oct
+ 2:00 Zion EET 1948 May 15
+ 2:00 EgyptAsia EE%sT 1967 Jun 5
+ 2:00 Zion I%sT 1996
+ 2:00 Jordan EE%sT 1999
+ 2:00 Palestine EE%sT
+Rule Phil 1936 only - Nov 1 0:00 1:00 S
+Rule Phil 1937 only - Feb 1 0:00 0 -
+Rule Phil 1954 only - Apr 12 0:00 1:00 S
+Rule Phil 1954 only - Jul 1 0:00 0 -
+Rule Phil 1978 only - Mar 22 0:00 1:00 S
+Rule Phil 1978 only - Sep 21 0:00 0 -
+Zone Asia/Manila -15:56:00 - LMT 1844 Dec 31
+ 8:04:00 - LMT 1899 May 11
+ 8:00 Phil PH%sT 1942 May
+ 9:00 - JST 1944 Nov
+ 8:00 Phil PH%sT
+Zone Asia/Qatar 3:26:08 - LMT 1920 # Al Dawhah / Doha
+ 4:00 - GST 1972 Jun
+ 3:00 - AST
+Zone Asia/Riyadh 3:06:52 - LMT 1950
+ 3:00 - AST
+Zone Asia/Singapore 6:55:25 - LMT 1901 Jan 1
+ 6:55:25 - SMT 1905 Jun 1 # Singapore M.T.
+ 7:00 - MALT 1933 Jan 1 # Malaya Time
+ 7:00 0:20 MALST 1936 Jan 1
+ 7:20 - MALT 1941 Sep 1
+ 7:30 - MALT 1942 Feb 16
+ 9:00 - JST 1945 Sep 12
+ 7:30 - MALT 1965 Aug 9 # independence
+ 7:30 - SGT 1982 Jan 1 # Singapore Time
+ 8:00 - SGT
+Zone Asia/Colombo 5:19:24 - LMT 1880
+ 5:19:32 - MMT 1906 # Moratuwa Mean Time
+ 5:30 - IST 1942 Jan 5
+ 5:30 0:30 IHST 1942 Sep
+ 5:30 1:00 IST 1945 Oct 16 2:00
+ 5:30 - IST 1996 May 25 0:00
+ 6:30 - LKT 1996 Oct 26 0:30
+ 6:00 - LKT 2006 Apr 15 0:30
+ 5:30 - IST
+Rule Syria 1920 1923 - Apr Sun>=15 2:00 1:00 S
+Rule Syria 1920 1923 - Oct Sun>=1 2:00 0 -
+Rule Syria 1962 only - Apr 29 2:00 1:00 S
+Rule Syria 1962 only - Oct 1 2:00 0 -
+Rule Syria 1963 1965 - May 1 2:00 1:00 S
+Rule Syria 1963 only - Sep 30 2:00 0 -
+Rule Syria 1964 only - Oct 1 2:00 0 -
+Rule Syria 1965 only - Sep 30 2:00 0 -
+Rule Syria 1966 only - Apr 24 2:00 1:00 S
+Rule Syria 1966 1976 - Oct 1 2:00 0 -
+Rule Syria 1967 1978 - May 1 2:00 1:00 S
+Rule Syria 1977 1978 - Sep 1 2:00 0 -
+Rule Syria 1983 1984 - Apr 9 2:00 1:00 S
+Rule Syria 1983 1984 - Oct 1 2:00 0 -
+Rule Syria 1986 only - Feb 16 2:00 1:00 S
+Rule Syria 1986 only - Oct 9 2:00 0 -
+Rule Syria 1987 only - Mar 1 2:00 1:00 S
+Rule Syria 1987 1988 - Oct 31 2:00 0 -
+Rule Syria 1988 only - Mar 15 2:00 1:00 S
+Rule Syria 1989 only - Mar 31 2:00 1:00 S
+Rule Syria 1989 only - Oct 1 2:00 0 -
+Rule Syria 1990 only - Apr 1 2:00 1:00 S
+Rule Syria 1990 only - Sep 30 2:00 0 -
+Rule Syria 1991 only - Apr 1 0:00 1:00 S
+Rule Syria 1991 1992 - Oct 1 0:00 0 -
+Rule Syria 1992 only - Apr 8 0:00 1:00 S
+Rule Syria 1993 only - Mar 26 0:00 1:00 S
+Rule Syria 1993 only - Sep 25 0:00 0 -
+Rule Syria 1994 1996 - Apr 1 0:00 1:00 S
+Rule Syria 1994 2005 - Oct 1 0:00 0 -
+Rule Syria 1997 1998 - Mar lastMon 0:00 1:00 S
+Rule Syria 1999 2006 - Apr 1 0:00 1:00 S
+Rule Syria 2006 only - Sep 22 0:00 0 -
+Rule Syria 2007 only - Mar lastFri 0:00 1:00 S
+Rule Syria 2007 only - Nov Fri>=1 0:00 0 -
+Rule Syria 2008 only - Apr Fri>=1 0:00 1:00 S
+Rule Syria 2008 max - Nov 1 0:00 0 -
+Rule Syria 2009 max - Mar lastFri 0:00 1:00 S
+Zone Asia/Damascus 2:25:12 - LMT 1920 # Dimashq
+ 2:00 Syria EE%sT
+Zone Asia/Dushanbe 4:35:12 - LMT 1924 May 2
+ 5:00 - DUST 1930 Jun 21 # Dushanbe Time
+ 6:00 RussiaAsia DUS%sT 1991 Mar 31 2:00s
+ 5:00 1:00 DUSST 1991 Sep 9 2:00s
+ 5:00 - TJT # Tajikistan Time
+Zone Asia/Bangkok 6:42:04 - LMT 1880
+ 6:42:04 - BMT 1920 Apr # Bangkok Mean Time
+ 7:00 - ICT
+Zone Asia/Ashgabat 3:53:32 - LMT 1924 May 2 # or Ashkhabad
+ 4:00 - ASHT 1930 Jun 21 # Ashkhabad Time
+ 5:00 RussiaAsia ASH%sT 1991 Mar 31 2:00
+ 4:00 RussiaAsia ASH%sT 1991 Oct 27 # independence
+ 4:00 RussiaAsia TM%sT 1992 Jan 19 2:00
+ 5:00 - TMT
+Zone Asia/Dubai 3:41:12 - LMT 1920
+ 4:00 - GST
+Zone Asia/Samarkand 4:27:12 - LMT 1924 May 2
+ 4:00 - SAMT 1930 Jun 21 # Samarkand Time
+ 5:00 - SAMT 1981 Apr 1
+ 5:00 1:00 SAMST 1981 Oct 1
+ 6:00 - TAST 1982 Apr 1 # Tashkent Time
+ 5:00 RussiaAsia SAM%sT 1991 Sep 1 # independence
+ 5:00 RussiaAsia UZ%sT 1992
+ 5:00 - UZT
+Zone Asia/Tashkent 4:37:12 - LMT 1924 May 2
+ 5:00 - TAST 1930 Jun 21 # Tashkent Time
+ 6:00 RussiaAsia TAS%sT 1991 Mar 31 2:00
+ 5:00 RussiaAsia TAS%sT 1991 Sep 1 # independence
+ 5:00 RussiaAsia UZ%sT 1992
+ 5:00 - UZT
+Zone Asia/Ho_Chi_Minh 7:06:40 - LMT 1906 Jun 9
+ 7:06:20 - SMT 1911 Mar 11 0:01 # Saigon MT?
+ 7:00 - ICT 1912 May
+ 8:00 - ICT 1931 May
+ 7:00 - ICT
+Zone Asia/Aden 3:00:48 - LMT 1950
+ 3:00 - AST
diff --git a/js/dojo-1.7.2/dojox/date/zoneinfo/australasia b/js/dojo-1.7.2/dojox/date/zoneinfo/australasia
new file mode 100644
index 0000000..1cc398e
--- /dev/null
+++ b/js/dojo-1.7.2/dojox/date/zoneinfo/australasia
@@ -0,0 +1,299 @@
+Rule Aus 1917 only - Jan 1 0:01 1:00 -
+Rule Aus 1917 only - Mar 25 2:00 0 -
+Rule Aus 1942 only - Jan 1 2:00 1:00 -
+Rule Aus 1942 only - Mar 29 2:00 0 -
+Rule Aus 1942 only - Sep 27 2:00 1:00 -
+Rule Aus 1943 1944 - Mar lastSun 2:00 0 -
+Rule Aus 1943 only - Oct 3 2:00 1:00 -
+Zone Australia/Darwin 8:43:20 - LMT 1895 Feb
+ 9:00 - CST 1899 May
+ 9:30 Aus CST
+Rule AW 1974 only - Oct lastSun 2:00s 1:00 -
+Rule AW 1975 only - Mar Sun>=1 2:00s 0 -
+Rule AW 1983 only - Oct lastSun 2:00s 1:00 -
+Rule AW 1984 only - Mar Sun>=1 2:00s 0 -
+Rule AW 1991 only - Nov 17 2:00s 1:00 -
+Rule AW 1992 only - Mar Sun>=1 2:00s 0 -
+Rule AW 2006 only - Dec 3 2:00s 1:00 -
+Rule AW 2007 2009 - Mar lastSun 2:00s 0 -
+Rule AW 2007 2008 - Oct lastSun 2:00s 1:00 -
+Zone Australia/Perth 7:43:24 - LMT 1895 Dec
+ 8:00 Aus WST 1943 Jul
+ 8:00 AW WST
+Zone Australia/Eucla 8:35:28 - LMT 1895 Dec
+ 8:45 Aus CWST 1943 Jul
+ 8:45 AW CWST
+Rule AQ 1971 only - Oct lastSun 2:00s 1:00 -
+Rule AQ 1972 only - Feb lastSun 2:00s 0 -
+Rule AQ 1989 1991 - Oct lastSun 2:00s 1:00 -
+Rule AQ 1990 1992 - Mar Sun>=1 2:00s 0 -
+Rule Holiday 1992 1993 - Oct lastSun 2:00s 1:00 -
+Rule Holiday 1993 1994 - Mar Sun>=1 2:00s 0 -
+Zone Australia/Brisbane 10:12:08 - LMT 1895
+ 10:00 Aus EST 1971
+ 10:00 AQ EST
+Zone Australia/Lindeman 9:55:56 - LMT 1895
+ 10:00 Aus EST 1971
+ 10:00 AQ EST 1992 Jul
+ 10:00 Holiday EST
+Rule AS 1971 1985 - Oct lastSun 2:00s 1:00 -
+Rule AS 1986 only - Oct 19 2:00s 1:00 -
+Rule AS 1987 2007 - Oct lastSun 2:00s 1:00 -
+Rule AS 1972 only - Feb 27 2:00s 0 -
+Rule AS 1973 1985 - Mar Sun>=1 2:00s 0 -
+Rule AS 1986 1989 - Mar Sun>=15 2:00s 0 -
+Rule AS 1990 only - Mar Sun>=18 2:00s 0 -
+Rule AS 1991 only - Mar Sun>=1 2:00s 0 -
+Rule AS 1992 only - Mar Sun>=18 2:00s 0 -
+Rule AS 1993 only - Mar Sun>=1 2:00s 0 -
+Rule AS 1994 only - Mar Sun>=18 2:00s 0 -
+Rule AS 1995 2005 - Mar lastSun 2:00s 0 -
+Rule AS 2006 only - Apr Sun>=1 2:00s 0 -
+Rule AS 2007 only - Mar lastSun 2:00s 0 -
+Rule AS 2008 max - Apr Sun>=1 2:00s 0 -
+Rule AS 2008 max - Oct Sun>=1 2:00s 1:00 -
+Zone Australia/Adelaide 9:14:20 - LMT 1895 Feb
+ 9:00 - CST 1899 May
+ 9:30 Aus CST 1971
+ 9:30 AS CST
+Rule AT 1967 only - Oct Sun>=1 2:00s 1:00 -
+Rule AT 1968 only - Mar lastSun 2:00s 0 -
+Rule AT 1968 1985 - Oct lastSun 2:00s 1:00 -
+Rule AT 1969 1971 - Mar Sun>=8 2:00s 0 -
+Rule AT 1972 only - Feb lastSun 2:00s 0 -
+Rule AT 1973 1981 - Mar Sun>=1 2:00s 0 -
+Rule AT 1982 1983 - Mar lastSun 2:00s 0 -
+Rule AT 1984 1986 - Mar Sun>=1 2:00s 0 -
+Rule AT 1986 only - Oct Sun>=15 2:00s 1:00 -
+Rule AT 1987 1990 - Mar Sun>=15 2:00s 0 -
+Rule AT 1987 only - Oct Sun>=22 2:00s 1:00 -
+Rule AT 1988 1990 - Oct lastSun 2:00s 1:00 -
+Rule AT 1991 1999 - Oct Sun>=1 2:00s 1:00 -
+Rule AT 1991 2005 - Mar lastSun 2:00s 0 -
+Rule AT 2000 only - Aug lastSun 2:00s 1:00 -
+Rule AT 2001 max - Oct Sun>=1 2:00s 1:00 -
+Rule AT 2006 only - Apr Sun>=1 2:00s 0 -
+Rule AT 2007 only - Mar lastSun 2:00s 0 -
+Rule AT 2008 max - Apr Sun>=1 2:00s 0 -
+Zone Australia/Hobart 9:49:16 - LMT 1895 Sep
+ 10:00 - EST 1916 Oct 1 2:00
+ 10:00 1:00 EST 1917 Feb
+ 10:00 Aus EST 1967
+ 10:00 AT EST
+Zone Australia/Currie 9:35:28 - LMT 1895 Sep
+ 10:00 - EST 1916 Oct 1 2:00
+ 10:00 1:00 EST 1917 Feb
+ 10:00 Aus EST 1971 Jul
+ 10:00 AT EST
+Rule AV 1971 1985 - Oct lastSun 2:00s 1:00 -
+Rule AV 1972 only - Feb lastSun 2:00s 0 -
+Rule AV 1973 1985 - Mar Sun>=1 2:00s 0 -
+Rule AV 1986 1990 - Mar Sun>=15 2:00s 0 -
+Rule AV 1986 1987 - Oct Sun>=15 2:00s 1:00 -
+Rule AV 1988 1999 - Oct lastSun 2:00s 1:00 -
+Rule AV 1991 1994 - Mar Sun>=1 2:00s 0 -
+Rule AV 1995 2005 - Mar lastSun 2:00s 0 -
+Rule AV 2000 only - Aug lastSun 2:00s 1:00 -
+Rule AV 2001 2007 - Oct lastSun 2:00s 1:00 -
+Rule AV 2006 only - Apr Sun>=1 2:00s 0 -
+Rule AV 2007 only - Mar lastSun 2:00s 0 -
+Rule AV 2008 max - Apr Sun>=1 2:00s 0 -
+Rule AV 2008 max - Oct Sun>=1 2:00s 1:00 -
+Zone Australia/Melbourne 9:39:52 - LMT 1895 Feb
+ 10:00 Aus EST 1971
+ 10:00 AV EST
+Rule AN 1971 1985 - Oct lastSun 2:00s 1:00 -
+Rule AN 1972 only - Feb 27 2:00s 0 -
+Rule AN 1973 1981 - Mar Sun>=1 2:00s 0 -
+Rule AN 1982 only - Apr Sun>=1 2:00s 0 -
+Rule AN 1983 1985 - Mar Sun>=1 2:00s 0 -
+Rule AN 1986 1989 - Mar Sun>=15 2:00s 0 -
+Rule AN 1986 only - Oct 19 2:00s 1:00 -
+Rule AN 1987 1999 - Oct lastSun 2:00s 1:00 -
+Rule AN 1990 1995 - Mar Sun>=1 2:00s 0 -
+Rule AN 1996 2005 - Mar lastSun 2:00s 0 -
+Rule AN 2000 only - Aug lastSun 2:00s 1:00 -
+Rule AN 2001 2007 - Oct lastSun 2:00s 1:00 -
+Rule AN 2006 only - Apr Sun>=1 2:00s 0 -
+Rule AN 2007 only - Mar lastSun 2:00s 0 -
+Rule AN 2008 max - Apr Sun>=1 2:00s 0 -
+Rule AN 2008 max - Oct Sun>=1 2:00s 1:00 -
+Zone Australia/Sydney 10:04:52 - LMT 1895 Feb
+ 10:00 Aus EST 1971
+ 10:00 AN EST
+Zone Australia/Broken_Hill 9:25:48 - LMT 1895 Feb
+ 10:00 - EST 1896 Aug 23
+ 9:00 - CST 1899 May
+ 9:30 Aus CST 1971
+ 9:30 AN CST 2000
+ 9:30 AS CST
+Rule LH 1981 1984 - Oct lastSun 2:00 1:00 -
+Rule LH 1982 1985 - Mar Sun>=1 2:00 0 -
+Rule LH 1985 only - Oct lastSun 2:00 0:30 -
+Rule LH 1986 1989 - Mar Sun>=15 2:00 0 -
+Rule LH 1986 only - Oct 19 2:00 0:30 -
+Rule LH 1987 1999 - Oct lastSun 2:00 0:30 -
+Rule LH 1990 1995 - Mar Sun>=1 2:00 0 -
+Rule LH 1996 2005 - Mar lastSun 2:00 0 -
+Rule LH 2000 only - Aug lastSun 2:00 0:30 -
+Rule LH 2001 2007 - Oct lastSun 2:00 0:30 -
+Rule LH 2006 only - Apr Sun>=1 2:00 0 -
+Rule LH 2007 only - Mar lastSun 2:00 0 -
+Rule LH 2008 max - Apr Sun>=1 2:00 0 -
+Rule LH 2008 max - Oct Sun>=1 2:00 0:30 -
+Zone Australia/Lord_Howe 10:36:20 - LMT 1895 Feb
+ 10:00 - EST 1981 Mar
+ 10:30 LH LHST
+Zone Indian/Christmas 7:02:52 - LMT 1895 Feb
+ 7:00 - CXT # Christmas Island Time
+Rule Cook 1978 only - Nov 12 0:00 0:30 HS
+Rule Cook 1979 1991 - Mar Sun>=1 0:00 0 -
+Rule Cook 1979 1990 - Oct lastSun 0:00 0:30 HS
+Zone Pacific/Rarotonga -10:39:04 - LMT 1901 # Avarua
+ -10:30 - CKT 1978 Nov 12 # Cook Is Time
+ -10:00 Cook CK%sT
+Zone Indian/Cocos 6:27:40 - LMT 1900
+ 6:30 - CCT # Cocos Islands Time
+Rule Fiji 1998 1999 - Nov Sun>=1 2:00 1:00 S
+Rule Fiji 1999 2000 - Feb lastSun 3:00 0 -
+Zone Pacific/Fiji 11:53:40 - LMT 1915 Oct 26 # Suva
+ 12:00 Fiji FJ%sT # Fiji Time
+Zone Pacific/Gambier -8:59:48 - LMT 1912 Oct # Rikitea
+ -9:00 - GAMT # Gambier Time
+Zone Pacific/Marquesas -9:18:00 - LMT 1912 Oct
+ -9:30 - MART # Marquesas Time
+Zone Pacific/Tahiti -9:58:16 - LMT 1912 Oct # Papeete
+ -10:00 - TAHT # Tahiti Time
+Zone Pacific/Guam -14:21:00 - LMT 1844 Dec 31
+ 9:39:00 - LMT 1901 # Agana
+ 10:00 - GST 2000 Dec 23 # Guam
+ 10:00 - ChST # Chamorro Standard Time
+Zone Pacific/Tarawa 11:32:04 - LMT 1901 # Bairiki
+ 12:00 - GILT # Gilbert Is Time
+Zone Pacific/Enderbury -11:24:20 - LMT 1901
+ -12:00 - PHOT 1979 Oct # Phoenix Is Time
+ -11:00 - PHOT 1995
+ 13:00 - PHOT
+Zone Pacific/Kiritimati -10:29:20 - LMT 1901
+ -10:40 - LINT 1979 Oct # Line Is Time
+ -10:00 - LINT 1995
+ 14:00 - LINT
+Zone Pacific/Saipan -14:17:00 - LMT 1844 Dec 31
+ 9:43:00 - LMT 1901
+ 9:00 - MPT 1969 Oct # N Mariana Is Time
+ 10:00 - MPT 2000 Dec 23
+ 10:00 - ChST # Chamorro Standard Time
+Zone Pacific/Majuro 11:24:48 - LMT 1901
+ 11:00 - MHT 1969 Oct # Marshall Islands Time
+ 12:00 - MHT
+Zone Pacific/Kwajalein 11:09:20 - LMT 1901
+ 11:00 - MHT 1969 Oct
+ -12:00 - KWAT 1993 Aug 20 # Kwajalein Time
+ 12:00 - MHT
+Zone Pacific/Truk 10:07:08 - LMT 1901
+ 10:00 - TRUT # Truk Time
+Zone Pacific/Ponape 10:32:52 - LMT 1901 # Kolonia
+ 11:00 - PONT # Ponape Time
+Zone Pacific/Kosrae 10:51:56 - LMT 1901
+ 11:00 - KOST 1969 Oct # Kosrae Time
+ 12:00 - KOST 1999
+ 11:00 - KOST
+Zone Pacific/Nauru 11:07:40 - LMT 1921 Jan 15 # Uaobe
+ 11:30 - NRT 1942 Mar 15 # Nauru Time
+ 9:00 - JST 1944 Aug 15
+ 11:30 - NRT 1979 May
+ 12:00 - NRT
+Rule NC 1977 1978 - Dec Sun>=1 0:00 1:00 S
+Rule NC 1978 1979 - Feb 27 0:00 0 -
+Rule NC 1996 only - Dec 1 2:00s 1:00 S
+Rule NC 1997 only - Mar 2 2:00s 0 -
+Zone Pacific/Noumea 11:05:48 - LMT 1912 Jan 13
+ 11:00 NC NC%sT
+Rule NZ 1927 only - Nov 6 2:00 1:00 S
+Rule NZ 1928 only - Mar 4 2:00 0 M
+Rule NZ 1928 1933 - Oct Sun>=8 2:00 0:30 S
+Rule NZ 1929 1933 - Mar Sun>=15 2:00 0 M
+Rule NZ 1934 1940 - Apr lastSun 2:00 0 M
+Rule NZ 1934 1940 - Sep lastSun 2:00 0:30 S
+Rule NZ 1946 only - Jan 1 0:00 0 S
+Rule NZ 1974 only - Nov Sun>=1 2:00s 1:00 D
+Rule Chatham 1974 only - Nov Sun>=1 2:45s 1:00 D
+Rule NZ 1975 only - Feb lastSun 2:00s 0 S
+Rule Chatham 1975 only - Feb lastSun 2:45s 0 S
+Rule NZ 1975 1988 - Oct lastSun 2:00s 1:00 D
+Rule Chatham 1975 1988 - Oct lastSun 2:45s 1:00 D
+Rule NZ 1976 1989 - Mar Sun>=1 2:00s 0 S
+Rule Chatham 1976 1989 - Mar Sun>=1 2:45s 0 S
+Rule NZ 1989 only - Oct Sun>=8 2:00s 1:00 D
+Rule Chatham 1989 only - Oct Sun>=8 2:45s 1:00 D
+Rule NZ 1990 2006 - Oct Sun>=1 2:00s 1:00 D
+Rule Chatham 1990 2006 - Oct Sun>=1 2:45s 1:00 D
+Rule NZ 1990 2007 - Mar Sun>=15 2:00s 0 S
+Rule Chatham 1990 2007 - Mar Sun>=15 2:45s 0 S
+Rule NZ 2007 max - Sep lastSun 2:00s 1:00 D
+Rule Chatham 2007 max - Sep lastSun 2:45s 1:00 D
+Rule NZ 2008 max - Apr Sun>=1 2:00s 0 S
+Rule Chatham 2008 max - Apr Sun>=1 2:45s 0 S
+Zone Pacific/Auckland 11:39:04 - LMT 1868 Nov 2
+ 11:30 NZ NZ%sT 1946 Jan 1
+ 12:00 NZ NZ%sT
+Zone Pacific/Chatham 12:13:48 - LMT 1957 Jan 1
+ 12:45 Chatham CHA%sT
+Zone Pacific/Niue -11:19:40 - LMT 1901 # Alofi
+ -11:20 - NUT 1951 # Niue Time
+ -11:30 - NUT 1978 Oct 1
+ -11:00 - NUT
+Zone Pacific/Norfolk 11:11:52 - LMT 1901 # Kingston
+ 11:12 - NMT 1951 # Norfolk Mean Time
+ 11:30 - NFT # Norfolk Time
+Zone Pacific/Palau 8:57:56 - LMT 1901 # Koror
+ 9:00 - PWT # Palau Time
+Zone Pacific/Port_Moresby 9:48:40 - LMT 1880
+ 9:48:32 - PMMT 1895 # Port Moresby Mean Time
+ 10:00 - PGT # Papua New Guinea Time
+Zone Pacific/Pitcairn -8:40:20 - LMT 1901 # Adamstown
+ -8:30 - PNT 1998 Apr 27 00:00
+ -8:00 - PST # Pitcairn Standard Time
+Zone Pacific/Pago_Pago 12:37:12 - LMT 1879 Jul 5
+ -11:22:48 - LMT 1911
+ -11:30 - SAMT 1950 # Samoa Time
+ -11:00 - NST 1967 Apr # N=Nome
+ -11:00 - BST 1983 Nov 30 # B=Bering
+ -11:00 - SST # S=Samoa
+Zone Pacific/Apia 12:33:04 - LMT 1879 Jul 5
+ -11:26:56 - LMT 1911
+ -11:30 - SAMT 1950 # Samoa Time
+ -11:00 - WST # Samoa Time
+Zone Pacific/Guadalcanal 10:39:48 - LMT 1912 Oct # Honiara
+ 11:00 - SBT # Solomon Is Time
+Zone Pacific/Fakaofo -11:24:56 - LMT 1901
+ -10:00 - TKT # Tokelau Time
+Rule Tonga 1999 only - Oct 7 2:00s 1:00 S
+Rule Tonga 2000 only - Mar 19 2:00s 0 -
+Rule Tonga 2000 2001 - Nov Sun>=1 2:00 1:00 S
+Rule Tonga 2001 2002 - Jan lastSun 2:00 0 -
+Zone Pacific/Tongatapu 12:19:20 - LMT 1901
+ 12:20 - TOT 1941 # Tonga Time
+ 13:00 - TOT 1999
+ 13:00 Tonga TO%sT
+Zone Pacific/Funafuti 11:56:52 - LMT 1901
+ 12:00 - TVT # Tuvalu Time
+Zone Pacific/Johnston -10:00 - HST
+Zone Pacific/Midway -11:49:28 - LMT 1901
+ -11:00 - NST 1956 Jun 3
+ -11:00 1:00 NDT 1956 Sep 2
+ -11:00 - NST 1967 Apr # N=Nome
+ -11:00 - BST 1983 Nov 30 # B=Bering
+ -11:00 - SST # S=Samoa
+Zone Pacific/Wake 11:06:28 - LMT 1901
+ 12:00 - WAKT # Wake Time
+Rule Vanuatu 1983 only - Sep 25 0:00 1:00 S
+Rule Vanuatu 1984 1991 - Mar Sun>=23 0:00 0 -
+Rule Vanuatu 1984 only - Oct 23 0:00 1:00 S
+Rule Vanuatu 1985 1991 - Sep Sun>=23 0:00 1:00 S
+Rule Vanuatu 1992 1993 - Jan Sun>=23 0:00 0 -
+Rule Vanuatu 1992 only - Oct Sun>=23 0:00 1:00 S
+Zone Pacific/Efate 11:13:16 - LMT 1912 Jan 13 # Vila
+ 11:00 Vanuatu VU%sT # Vanuatu Time
+Zone Pacific/Wallis 12:15:20 - LMT 1901
+ 12:00 - WFT # Wallis & Futuna Time
diff --git a/js/dojo-1.7.2/dojox/date/zoneinfo/backward b/js/dojo-1.7.2/dojox/date/zoneinfo/backward
new file mode 100644
index 0000000..f341a7b
--- /dev/null
+++ b/js/dojo-1.7.2/dojox/date/zoneinfo/backward
@@ -0,0 +1,108 @@
+Link Africa/Asmara Africa/Asmera
+Link Africa/Bamako Africa/Timbuktu
+Link America/Argentina/Catamarca America/Argentina/ComodRivadavia
+Link America/Adak America/Atka
+Link America/Argentina/Buenos_Aires America/Buenos_Aires
+Link America/Argentina/Catamarca America/Catamarca
+Link America/Atikokan America/Coral_Harbour
+Link America/Argentina/Cordoba America/Cordoba
+Link America/Tijuana America/Ensenada
+Link America/Indiana/Indianapolis America/Fort_Wayne
+Link America/Indiana/Indianapolis America/Indianapolis
+Link America/Argentina/Jujuy America/Jujuy
+Link America/Indiana/Knox America/Knox_IN
+Link America/Kentucky/Louisville America/Louisville
+Link America/Argentina/Mendoza America/Mendoza
+Link America/Rio_Branco America/Porto_Acre
+Link America/Argentina/Cordoba America/Rosario
+Link America/St_Thomas America/Virgin
+Link Asia/Ashgabat Asia/Ashkhabad
+Link Asia/Chongqing Asia/Chungking
+Link Asia/Dhaka Asia/Dacca
+Link Asia/Kathmandu Asia/Katmandu
+Link Asia/Kolkata Asia/Calcutta
+Link Asia/Macau Asia/Macao
+Link Asia/Jerusalem Asia/Tel_Aviv
+Link Asia/Ho_Chi_Minh Asia/Saigon
+Link Asia/Thimphu Asia/Thimbu
+Link Asia/Makassar Asia/Ujung_Pandang
+Link Asia/Ulaanbaatar Asia/Ulan_Bator
+Link Atlantic/Faroe Atlantic/Faeroe
+Link Europe/Oslo Atlantic/Jan_Mayen
+Link Australia/Sydney Australia/ACT
+Link Australia/Sydney Australia/Canberra
+Link Australia/Lord_Howe Australia/LHI
+Link Australia/Sydney Australia/NSW
+Link Australia/Darwin Australia/North
+Link Australia/Brisbane Australia/Queensland
+Link Australia/Adelaide Australia/South
+Link Australia/Hobart Australia/Tasmania
+Link Australia/Melbourne Australia/Victoria
+Link Australia/Perth Australia/West
+Link Australia/Broken_Hill Australia/Yancowinna
+Link America/Rio_Branco Brazil/Acre
+Link America/Noronha Brazil/DeNoronha
+Link America/Sao_Paulo Brazil/East
+Link America/Manaus Brazil/West
+Link America/Halifax Canada/Atlantic
+Link America/Winnipeg Canada/Central
+Link America/Regina Canada/East-Saskatchewan
+Link America/Toronto Canada/Eastern
+Link America/Edmonton Canada/Mountain
+Link America/St_Johns Canada/Newfoundland
+Link America/Vancouver Canada/Pacific
+Link America/Regina Canada/Saskatchewan
+Link America/Whitehorse Canada/Yukon
+Link America/Santiago Chile/Continental
+Link Pacific/Easter Chile/EasterIsland
+Link America/Havana Cuba
+Link Africa/Cairo Egypt
+Link Europe/Dublin Eire
+Link Europe/London Europe/Belfast
+Link Europe/Chisinau Europe/Tiraspol
+Link Europe/London GB
+Link Europe/London GB-Eire
+Link Etc/GMT GMT+0
+Link Etc/GMT GMT-0
+Link Etc/GMT GMT0
+Link Etc/GMT Greenwich
+Link Asia/Hong_Kong Hongkong
+Link Atlantic/Reykjavik Iceland
+Link Asia/Tehran Iran
+Link Asia/Jerusalem Israel
+Link America/Jamaica Jamaica
+Link Asia/Tokyo Japan
+Link Pacific/Kwajalein Kwajalein
+Link Africa/Tripoli Libya
+Link America/Tijuana Mexico/BajaNorte
+Link America/Mazatlan Mexico/BajaSur
+Link America/Mexico_City Mexico/General
+Link Pacific/Auckland NZ
+Link Pacific/Chatham NZ-CHAT
+Link America/Denver Navajo
+Link Asia/Shanghai PRC
+Link Pacific/Pago_Pago Pacific/Samoa
+Link Pacific/Truk Pacific/Yap
+Link Europe/Warsaw Poland
+Link Europe/Lisbon Portugal
+Link Asia/Taipei ROC
+Link Asia/Seoul ROK
+Link Asia/Singapore Singapore
+Link Europe/Istanbul Turkey
+Link Etc/UCT UCT
+Link America/Anchorage US/Alaska
+Link America/Adak US/Aleutian
+Link America/Phoenix US/Arizona
+Link America/Chicago US/Central
+Link America/Indiana/Indianapolis US/East-Indiana
+Link America/New_York US/Eastern
+Link Pacific/Honolulu US/Hawaii
+Link America/Indiana/Knox US/Indiana-Starke
+Link America/Detroit US/Michigan
+Link America/Denver US/Mountain
+Link America/Los_Angeles US/Pacific
+Link Pacific/Pago_Pago US/Samoa
+Link Etc/UTC UTC
+Link Etc/UTC Universal
+Link Europe/Moscow W-SU
+Link Etc/UTC Zulu
diff --git a/js/dojo-1.7.2/dojox/date/zoneinfo/etcetera b/js/dojo-1.7.2/dojox/date/zoneinfo/etcetera
new file mode 100644
index 0000000..b459c36
--- /dev/null
+++ b/js/dojo-1.7.2/dojox/date/zoneinfo/etcetera
@@ -0,0 +1,36 @@
+Zone Etc/GMT 0 - GMT
+Zone Etc/UTC 0 - UTC
+Zone Etc/UCT 0 - UCT
+Link Etc/GMT GMT
+Link Etc/UTC Etc/Universal
+Link Etc/UTC Etc/Zulu
+Link Etc/GMT Etc/Greenwich
+Link Etc/GMT Etc/GMT-0
+Link Etc/GMT Etc/GMT+0
+Link Etc/GMT Etc/GMT0
+Zone Etc/GMT-14 14 - GMT-14 # 14 hours ahead of GMT
+Zone Etc/GMT-13 13 - GMT-13
+Zone Etc/GMT-12 12 - GMT-12
+Zone Etc/GMT-11 11 - GMT-11
+Zone Etc/GMT-10 10 - GMT-10
+Zone Etc/GMT-9 9 - GMT-9
+Zone Etc/GMT-8 8 - GMT-8
+Zone Etc/GMT-7 7 - GMT-7
+Zone Etc/GMT-6 6 - GMT-6
+Zone Etc/GMT-5 5 - GMT-5
+Zone Etc/GMT-4 4 - GMT-4
+Zone Etc/GMT-3 3 - GMT-3
+Zone Etc/GMT-2 2 - GMT-2
+Zone Etc/GMT-1 1 - GMT-1
+Zone Etc/GMT+1 -1 - GMT+1
+Zone Etc/GMT+2 -2 - GMT+2
+Zone Etc/GMT+3 -3 - GMT+3
+Zone Etc/GMT+4 -4 - GMT+4
+Zone Etc/GMT+5 -5 - GMT+5
+Zone Etc/GMT+6 -6 - GMT+6
+Zone Etc/GMT+7 -7 - GMT+7
+Zone Etc/GMT+8 -8 - GMT+8
+Zone Etc/GMT+9 -9 - GMT+9
+Zone Etc/GMT+10 -10 - GMT+10
+Zone Etc/GMT+11 -11 - GMT+11
+Zone Etc/GMT+12 -12 - GMT+12
diff --git a/js/dojo-1.7.2/dojox/date/zoneinfo/europe b/js/dojo-1.7.2/dojox/date/zoneinfo/europe
new file mode 100644
index 0000000..2e6c61b
--- /dev/null
+++ b/js/dojo-1.7.2/dojox/date/zoneinfo/europe
@@ -0,0 +1,1045 @@
+Rule GB-Eire 1916 only - May 21 2:00s 1:00 BST
+Rule GB-Eire 1916 only - Oct 1 2:00s 0 GMT
+Rule GB-Eire 1917 only - Apr 8 2:00s 1:00 BST
+Rule GB-Eire 1917 only - Sep 17 2:00s 0 GMT
+Rule GB-Eire 1918 only - Mar 24 2:00s 1:00 BST
+Rule GB-Eire 1918 only - Sep 30 2:00s 0 GMT
+Rule GB-Eire 1919 only - Mar 30 2:00s 1:00 BST
+Rule GB-Eire 1919 only - Sep 29 2:00s 0 GMT
+Rule GB-Eire 1920 only - Mar 28 2:00s 1:00 BST
+Rule GB-Eire 1920 only - Oct 25 2:00s 0 GMT
+Rule GB-Eire 1921 only - Apr 3 2:00s 1:00 BST
+Rule GB-Eire 1921 only - Oct 3 2:00s 0 GMT
+Rule GB-Eire 1922 only - Mar 26 2:00s 1:00 BST
+Rule GB-Eire 1922 only - Oct 8 2:00s 0 GMT
+Rule GB-Eire 1923 only - Apr Sun>=16 2:00s 1:00 BST
+Rule GB-Eire 1923 1924 - Sep Sun>=16 2:00s 0 GMT
+Rule GB-Eire 1924 only - Apr Sun>=9 2:00s 1:00 BST
+Rule GB-Eire 1925 1926 - Apr Sun>=16 2:00s 1:00 BST
+Rule GB-Eire 1925 1938 - Oct Sun>=2 2:00s 0 GMT
+Rule GB-Eire 1927 only - Apr Sun>=9 2:00s 1:00 BST
+Rule GB-Eire 1928 1929 - Apr Sun>=16 2:00s 1:00 BST
+Rule GB-Eire 1930 only - Apr Sun>=9 2:00s 1:00 BST
+Rule GB-Eire 1931 1932 - Apr Sun>=16 2:00s 1:00 BST
+Rule GB-Eire 1933 only - Apr Sun>=9 2:00s 1:00 BST
+Rule GB-Eire 1934 only - Apr Sun>=16 2:00s 1:00 BST
+Rule GB-Eire 1935 only - Apr Sun>=9 2:00s 1:00 BST
+Rule GB-Eire 1936 1937 - Apr Sun>=16 2:00s 1:00 BST
+Rule GB-Eire 1938 only - Apr Sun>=9 2:00s 1:00 BST
+Rule GB-Eire 1939 only - Apr Sun>=16 2:00s 1:00 BST
+Rule GB-Eire 1939 only - Nov Sun>=16 2:00s 0 GMT
+Rule GB-Eire 1940 only - Feb Sun>=23 2:00s 1:00 BST
+Rule GB-Eire 1941 only - May Sun>=2 1:00s 2:00 BDST
+Rule GB-Eire 1941 1943 - Aug Sun>=9 1:00s 1:00 BST
+Rule GB-Eire 1942 1944 - Apr Sun>=2 1:00s 2:00 BDST
+Rule GB-Eire 1944 only - Sep Sun>=16 1:00s 1:00 BST
+Rule GB-Eire 1945 only - Apr Mon>=2 1:00s 2:00 BDST
+Rule GB-Eire 1945 only - Jul Sun>=9 1:00s 1:00 BST
+Rule GB-Eire 1945 1946 - Oct Sun>=2 2:00s 0 GMT
+Rule GB-Eire 1946 only - Apr Sun>=9 2:00s 1:00 BST
+Rule GB-Eire 1947 only - Mar 16 2:00s 1:00 BST
+Rule GB-Eire 1947 only - Apr 13 1:00s 2:00 BDST
+Rule GB-Eire 1947 only - Aug 10 1:00s 1:00 BST
+Rule GB-Eire 1947 only - Nov 2 2:00s 0 GMT
+Rule GB-Eire 1948 only - Mar 14 2:00s 1:00 BST
+Rule GB-Eire 1948 only - Oct 31 2:00s 0 GMT
+Rule GB-Eire 1949 only - Apr 3 2:00s 1:00 BST
+Rule GB-Eire 1949 only - Oct 30 2:00s 0 GMT
+Rule GB-Eire 1950 1952 - Apr Sun>=14 2:00s 1:00 BST
+Rule GB-Eire 1950 1952 - Oct Sun>=21 2:00s 0 GMT
+Rule GB-Eire 1953 only - Apr Sun>=16 2:00s 1:00 BST
+Rule GB-Eire 1953 1960 - Oct Sun>=2 2:00s 0 GMT
+Rule GB-Eire 1954 only - Apr Sun>=9 2:00s 1:00 BST
+Rule GB-Eire 1955 1956 - Apr Sun>=16 2:00s 1:00 BST
+Rule GB-Eire 1957 only - Apr Sun>=9 2:00s 1:00 BST
+Rule GB-Eire 1958 1959 - Apr Sun>=16 2:00s 1:00 BST
+Rule GB-Eire 1960 only - Apr Sun>=9 2:00s 1:00 BST
+Rule GB-Eire 1961 1963 - Mar lastSun 2:00s 1:00 BST
+Rule GB-Eire 1961 1968 - Oct Sun>=23 2:00s 0 GMT
+Rule GB-Eire 1964 1967 - Mar Sun>=19 2:00s 1:00 BST
+Rule GB-Eire 1968 only - Feb 18 2:00s 1:00 BST
+Rule GB-Eire 1972 1980 - Mar Sun>=16 2:00s 1:00 BST
+Rule GB-Eire 1972 1980 - Oct Sun>=23 2:00s 0 GMT
+Rule GB-Eire 1981 1995 - Mar lastSun 1:00u 1:00 BST
+Rule GB-Eire 1981 1989 - Oct Sun>=23 1:00u 0 GMT
+Rule GB-Eire 1990 1995 - Oct Sun>=22 1:00u 0 GMT
+Zone Europe/London -0:01:15 - LMT 1847 Dec 1 0:00s
+ 0:00 GB-Eire %s 1968 Oct 27
+ 1:00 - BST 1971 Oct 31 2:00u
+ 0:00 GB-Eire %s 1996
+ 0:00 EU GMT/BST
+Link Europe/London Europe/Jersey
+Link Europe/London Europe/Guernsey
+Link Europe/London Europe/Isle_of_Man
+Zone Europe/Dublin -0:25:00 - LMT 1880 Aug 2
+ -0:25:21 - DMT 1916 May 21 2:00
+ -0:25:21 1:00 IST 1916 Oct 1 2:00s
+ 0:00 GB-Eire %s 1921 Dec 6 # independence
+ 0:00 GB-Eire GMT/IST 1940 Feb 25 2:00
+ 0:00 1:00 IST 1946 Oct 6 2:00
+ 0:00 - GMT 1947 Mar 16 2:00
+ 0:00 1:00 IST 1947 Nov 2 2:00
+ 0:00 - GMT 1948 Apr 18 2:00
+ 0:00 GB-Eire GMT/IST 1968 Oct 27
+ 1:00 - IST 1971 Oct 31 2:00u
+ 0:00 GB-Eire GMT/IST 1996
+ 0:00 EU GMT/IST
+Rule EU 1977 1980 - Apr Sun>=1 1:00u 1:00 S
+Rule EU 1977 only - Sep lastSun 1:00u 0 -
+Rule EU 1978 only - Oct 1 1:00u 0 -
+Rule EU 1979 1995 - Sep lastSun 1:00u 0 -
+Rule EU 1981 max - Mar lastSun 1:00u 1:00 S
+Rule EU 1996 max - Oct lastSun 1:00u 0 -
+Rule W-Eur 1977 1980 - Apr Sun>=1 1:00s 1:00 S
+Rule W-Eur 1977 only - Sep lastSun 1:00s 0 -
+Rule W-Eur 1978 only - Oct 1 1:00s 0 -
+Rule W-Eur 1979 1995 - Sep lastSun 1:00s 0 -
+Rule W-Eur 1981 max - Mar lastSun 1:00s 1:00 S
+Rule W-Eur 1996 max - Oct lastSun 1:00s 0 -
+Rule C-Eur 1916 only - Apr 30 23:00 1:00 S
+Rule C-Eur 1916 only - Oct 1 1:00 0 -
+Rule C-Eur 1917 1918 - Apr Mon>=15 2:00s 1:00 S
+Rule C-Eur 1917 1918 - Sep Mon>=15 2:00s 0 -
+Rule C-Eur 1940 only - Apr 1 2:00s 1:00 S
+Rule C-Eur 1942 only - Nov 2 2:00s 0 -
+Rule C-Eur 1943 only - Mar 29 2:00s 1:00 S
+Rule C-Eur 1943 only - Oct 4 2:00s 0 -
+Rule C-Eur 1944 1945 - Apr Mon>=1 2:00s 1:00 S
+Rule C-Eur 1944 only - Oct 2 2:00s 0 -
+Rule C-Eur 1945 only - Sep 16 2:00s 0 -
+Rule C-Eur 1977 1980 - Apr Sun>=1 2:00s 1:00 S
+Rule C-Eur 1977 only - Sep lastSun 2:00s 0 -
+Rule C-Eur 1978 only - Oct 1 2:00s 0 -
+Rule C-Eur 1979 1995 - Sep lastSun 2:00s 0 -
+Rule C-Eur 1981 max - Mar lastSun 2:00s 1:00 S
+Rule C-Eur 1996 max - Oct lastSun 2:00s 0 -
+Rule E-Eur 1977 1980 - Apr Sun>=1 0:00 1:00 S
+Rule E-Eur 1977 only - Sep lastSun 0:00 0 -
+Rule E-Eur 1978 only - Oct 1 0:00 0 -
+Rule E-Eur 1979 1995 - Sep lastSun 0:00 0 -
+Rule E-Eur 1981 max - Mar lastSun 0:00 1:00 S
+Rule E-Eur 1996 max - Oct lastSun 0:00 0 -
+Rule Russia 1917 only - Jul 1 23:00 1:00 MST # Moscow Summer Time
+Rule Russia 1917 only - Dec 28 0:00 0 MMT # Moscow Mean Time
+Rule Russia 1918 only - May 31 22:00 2:00 MDST # Moscow Double Summer Time
+Rule Russia 1918 only - Sep 16 1:00 1:00 MST
+Rule Russia 1919 only - May 31 23:00 2:00 MDST
+Rule Russia 1919 only - Jul 1 2:00 1:00 S
+Rule Russia 1919 only - Aug 16 0:00 0 -
+Rule Russia 1921 only - Feb 14 23:00 1:00 S
+Rule Russia 1921 only - Mar 20 23:00 2:00 M # Midsummer
+Rule Russia 1921 only - Sep 1 0:00 1:00 S
+Rule Russia 1921 only - Oct 1 0:00 0 -
+Rule Russia 1981 1984 - Apr 1 0:00 1:00 S
+Rule Russia 1981 1983 - Oct 1 0:00 0 -
+Rule Russia 1984 1991 - Sep lastSun 2:00s 0 -
+Rule Russia 1985 1991 - Mar lastSun 2:00s 1:00 S
+Rule Russia 1992 only - Mar lastSat 23:00 1:00 S
+Rule Russia 1992 only - Sep lastSat 23:00 0 -
+Rule Russia 1993 max - Mar lastSun 2:00s 1:00 S
+Rule Russia 1993 1995 - Sep lastSun 2:00s 0 -
+Rule Russia 1996 max - Oct lastSun 2:00s 0 -
+Zone WET 0:00 EU WE%sT
+Zone CET 1:00 C-Eur CE%sT
+Zone MET 1:00 C-Eur ME%sT
+Zone EET 2:00 EU EE%sT
+Rule Albania 1940 only - Jun 16 0:00 1:00 S
+Rule Albania 1942 only - Nov 2 3:00 0 -
+Rule Albania 1943 only - Mar 29 2:00 1:00 S
+Rule Albania 1943 only - Apr 10 3:00 0 -
+Rule Albania 1974 only - May 4 0:00 1:00 S
+Rule Albania 1974 only - Oct 2 0:00 0 -
+Rule Albania 1975 only - May 1 0:00 1:00 S
+Rule Albania 1975 only - Oct 2 0:00 0 -
+Rule Albania 1976 only - May 2 0:00 1:00 S
+Rule Albania 1976 only - Oct 3 0:00 0 -
+Rule Albania 1977 only - May 8 0:00 1:00 S
+Rule Albania 1977 only - Oct 2 0:00 0 -
+Rule Albania 1978 only - May 6 0:00 1:00 S
+Rule Albania 1978 only - Oct 1 0:00 0 -
+Rule Albania 1979 only - May 5 0:00 1:00 S
+Rule Albania 1979 only - Sep 30 0:00 0 -
+Rule Albania 1980 only - May 3 0:00 1:00 S
+Rule Albania 1980 only - Oct 4 0:00 0 -
+Rule Albania 1981 only - Apr 26 0:00 1:00 S
+Rule Albania 1981 only - Sep 27 0:00 0 -
+Rule Albania 1982 only - May 2 0:00 1:00 S
+Rule Albania 1982 only - Oct 3 0:00 0 -
+Rule Albania 1983 only - Apr 18 0:00 1:00 S
+Rule Albania 1983 only - Oct 1 0:00 0 -
+Rule Albania 1984 only - Apr 1 0:00 1:00 S
+Zone Europe/Tirane 1:19:20 - LMT 1914
+ 1:00 - CET 1940 Jun 16
+ 1:00 Albania CE%sT 1984 Jul
+ 1:00 EU CE%sT
+Zone Europe/Andorra 0:06:04 - LMT 1901
+ 0:00 - WET 1946 Sep 30
+ 1:00 - CET 1985 Mar 31 2:00
+ 1:00 EU CE%sT
+Rule Austria 1920 only - Apr 5 2:00s 1:00 S
+Rule Austria 1920 only - Sep 13 2:00s 0 -
+Rule Austria 1946 only - Apr 14 2:00s 1:00 S
+Rule Austria 1946 1948 - Oct Sun>=1 2:00s 0 -
+Rule Austria 1947 only - Apr 6 2:00s 1:00 S
+Rule Austria 1948 only - Apr 18 2:00s 1:00 S
+Rule Austria 1980 only - Apr 6 0:00 1:00 S
+Rule Austria 1980 only - Sep 28 0:00 0 -
+Zone Europe/Vienna 1:05:20 - LMT 1893 Apr
+ 1:00 C-Eur CE%sT 1920
+ 1:00 Austria CE%sT 1940 Apr 1 2:00s
+ 1:00 C-Eur CE%sT 1945 Apr 2 2:00s
+ 1:00 1:00 CEST 1945 Apr 12 2:00s
+ 1:00 - CET 1946
+ 1:00 Austria CE%sT 1981
+ 1:00 EU CE%sT
+Zone Europe/Minsk 1:50:16 - LMT 1880
+ 1:50 - MMT 1924 May 2 # Minsk Mean Time
+ 2:00 - EET 1930 Jun 21
+ 3:00 - MSK 1941 Jun 28
+ 1:00 C-Eur CE%sT 1944 Jul 3
+ 3:00 Russia MSK/MSD 1990
+ 3:00 - MSK 1991 Mar 31 2:00s
+ 2:00 1:00 EEST 1991 Sep 29 2:00s
+ 2:00 - EET 1992 Mar 29 0:00s
+ 2:00 1:00 EEST 1992 Sep 27 0:00s
+ 2:00 Russia EE%sT
+Rule Belgium 1918 only - Mar 9 0:00s 1:00 S
+Rule Belgium 1918 1919 - Oct Sat>=1 23:00s 0 -
+Rule Belgium 1919 only - Mar 1 23:00s 1:00 S
+Rule Belgium 1920 only - Feb 14 23:00s 1:00 S
+Rule Belgium 1920 only - Oct 23 23:00s 0 -
+Rule Belgium 1921 only - Mar 14 23:00s 1:00 S
+Rule Belgium 1921 only - Oct 25 23:00s 0 -
+Rule Belgium 1922 only - Mar 25 23:00s 1:00 S
+Rule Belgium 1922 1927 - Oct Sat>=1 23:00s 0 -
+Rule Belgium 1923 only - Apr 21 23:00s 1:00 S
+Rule Belgium 1924 only - Mar 29 23:00s 1:00 S
+Rule Belgium 1925 only - Apr 4 23:00s 1:00 S
+Rule Belgium 1926 only - Apr 17 23:00s 1:00 S
+Rule Belgium 1927 only - Apr 9 23:00s 1:00 S
+Rule Belgium 1928 only - Apr 14 23:00s 1:00 S
+Rule Belgium 1928 1938 - Oct Sun>=2 2:00s 0 -
+Rule Belgium 1929 only - Apr 21 2:00s 1:00 S
+Rule Belgium 1930 only - Apr 13 2:00s 1:00 S
+Rule Belgium 1931 only - Apr 19 2:00s 1:00 S
+Rule Belgium 1932 only - Apr 3 2:00s 1:00 S
+Rule Belgium 1933 only - Mar 26 2:00s 1:00 S
+Rule Belgium 1934 only - Apr 8 2:00s 1:00 S
+Rule Belgium 1935 only - Mar 31 2:00s 1:00 S
+Rule Belgium 1936 only - Apr 19 2:00s 1:00 S
+Rule Belgium 1937 only - Apr 4 2:00s 1:00 S
+Rule Belgium 1938 only - Mar 27 2:00s 1:00 S
+Rule Belgium 1939 only - Apr 16 2:00s 1:00 S
+Rule Belgium 1939 only - Nov 19 2:00s 0 -
+Rule Belgium 1940 only - Feb 25 2:00s 1:00 S
+Rule Belgium 1944 only - Sep 17 2:00s 0 -
+Rule Belgium 1945 only - Apr 2 2:00s 1:00 S
+Rule Belgium 1945 only - Sep 16 2:00s 0 -
+Rule Belgium 1946 only - May 19 2:00s 1:00 S
+Rule Belgium 1946 only - Oct 7 2:00s 0 -
+Zone Europe/Brussels 0:17:30 - LMT 1880
+ 0:17:30 - BMT 1892 May 1 12:00 # Brussels MT
+ 0:00 - WET 1914 Nov 8
+ 1:00 - CET 1916 May 1 0:00
+ 1:00 C-Eur CE%sT 1918 Nov 11 11:00u
+ 0:00 Belgium WE%sT 1940 May 20 2:00s
+ 1:00 C-Eur CE%sT 1944 Sep 3
+ 1:00 Belgium CE%sT 1977
+ 1:00 EU CE%sT
+Rule Bulg 1979 only - Mar 31 23:00 1:00 S
+Rule Bulg 1979 only - Oct 1 1:00 0 -
+Rule Bulg 1980 1982 - Apr Sat>=1 23:00 1:00 S
+Rule Bulg 1980 only - Sep 29 1:00 0 -
+Rule Bulg 1981 only - Sep 27 2:00 0 -
+Zone Europe/Sofia 1:33:16 - LMT 1880
+ 1:56:56 - IMT 1894 Nov 30 # Istanbul MT?
+ 2:00 - EET 1942 Nov 2 3:00
+ 1:00 C-Eur CE%sT 1945
+ 1:00 - CET 1945 Apr 2 3:00
+ 2:00 - EET 1979 Mar 31 23:00
+ 2:00 Bulg EE%sT 1982 Sep 26 2:00
+ 2:00 C-Eur EE%sT 1991
+ 2:00 E-Eur EE%sT 1997
+ 2:00 EU EE%sT
+Rule Czech 1945 only - Apr 8 2:00s 1:00 S
+Rule Czech 1945 only - Nov 18 2:00s 0 -
+Rule Czech 1946 only - May 6 2:00s 1:00 S
+Rule Czech 1946 1949 - Oct Sun>=1 2:00s 0 -
+Rule Czech 1947 only - Apr 20 2:00s 1:00 S
+Rule Czech 1948 only - Apr 18 2:00s 1:00 S
+Rule Czech 1949 only - Apr 9 2:00s 1:00 S
+Zone Europe/Prague 0:57:44 - LMT 1850
+ 0:57:44 - PMT 1891 Oct # Prague Mean Time
+ 1:00 C-Eur CE%sT 1944 Sep 17 2:00s
+ 1:00 Czech CE%sT 1979
+ 1:00 EU CE%sT
+Rule Denmark 1916 only - May 14 23:00 1:00 S
+Rule Denmark 1916 only - Sep 30 23:00 0 -
+Rule Denmark 1940 only - May 15 0:00 1:00 S
+Rule Denmark 1945 only - Apr 2 2:00s 1:00 S
+Rule Denmark 1945 only - Aug 15 2:00s 0 -
+Rule Denmark 1946 only - May 1 2:00s 1:00 S
+Rule Denmark 1946 only - Sep 1 2:00s 0 -
+Rule Denmark 1947 only - May 4 2:00s 1:00 S
+Rule Denmark 1947 only - Aug 10 2:00s 0 -
+Rule Denmark 1948 only - May 9 2:00s 1:00 S
+Rule Denmark 1948 only - Aug 8 2:00s 0 -
+Zone Europe/Copenhagen 0:50:20 - LMT 1890
+ 0:50:20 - CMT 1894 Jan 1 # Copenhagen MT
+ 1:00 Denmark CE%sT 1942 Nov 2 2:00s
+ 1:00 C-Eur CE%sT 1945 Apr 2 2:00
+ 1:00 Denmark CE%sT 1980
+ 1:00 EU CE%sT
+Zone Atlantic/Faroe -0:27:04 - LMT 1908 Jan 11 # Torshavn
+ 0:00 - WET 1981
+ 0:00 EU WE%sT
+Rule Thule 1991 1992 - Mar lastSun 2:00 1:00 D
+Rule Thule 1991 1992 - Sep lastSun 2:00 0 S
+Rule Thule 1993 2006 - Apr Sun>=1 2:00 1:00 D
+Rule Thule 1993 2006 - Oct lastSun 2:00 0 S
+Rule Thule 2007 max - Mar Sun>=8 2:00 1:00 D
+Rule Thule 2007 max - Nov Sun>=1 2:00 0 S
+Zone America/Danmarkshavn -1:14:40 - LMT 1916 Jul 28
+ -3:00 - WGT 1980 Apr 6 2:00
+ -3:00 EU WG%sT 1996
+ 0:00 - GMT
+Zone America/Scoresbysund -1:27:52 - LMT 1916 Jul 28 # Ittoqqortoormiit
+ -2:00 - CGT 1980 Apr 6 2:00
+ -2:00 C-Eur CG%sT 1981 Mar 29
+ -1:00 EU EG%sT
+Zone America/Godthab -3:26:56 - LMT 1916 Jul 28 # Nuuk
+ -3:00 - WGT 1980 Apr 6 2:00
+ -3:00 EU WG%sT
+Zone America/Thule -4:35:08 - LMT 1916 Jul 28 # Pituffik air base
+ -4:00 Thule A%sT
+Zone Europe/Tallinn 1:39:00 - LMT 1880
+ 1:39:00 - TMT 1918 Feb # Tallinn Mean Time
+ 1:00 C-Eur CE%sT 1919 Jul
+ 1:39:00 - TMT 1921 May
+ 2:00 - EET 1940 Aug 6
+ 3:00 - MSK 1941 Sep 15
+ 1:00 C-Eur CE%sT 1944 Sep 22
+ 3:00 Russia MSK/MSD 1989 Mar 26 2:00s
+ 2:00 1:00 EEST 1989 Sep 24 2:00s
+ 2:00 C-Eur EE%sT 1998 Sep 22
+ 2:00 EU EE%sT 1999 Nov 1
+ 2:00 - EET 2002 Feb 21
+ 2:00 EU EE%sT
+Rule Finland 1942 only - Apr 3 0:00 1:00 S
+Rule Finland 1942 only - Oct 3 0:00 0 -
+Zone Europe/Helsinki 1:39:52 - LMT 1878 May 31
+ 1:39:52 - HMT 1921 May # Helsinki Mean Time
+ 2:00 Finland EE%sT 1981 Mar 29 2:00
+ 2:00 EU EE%sT
+Link Europe/Helsinki Europe/Mariehamn
+Rule France 1916 only - Jun 14 23:00s 1:00 S
+Rule France 1916 1919 - Oct Sun>=1 23:00s 0 -
+Rule France 1917 only - Mar 24 23:00s 1:00 S
+Rule France 1918 only - Mar 9 23:00s 1:00 S
+Rule France 1919 only - Mar 1 23:00s 1:00 S
+Rule France 1920 only - Feb 14 23:00s 1:00 S
+Rule France 1920 only - Oct 23 23:00s 0 -
+Rule France 1921 only - Mar 14 23:00s 1:00 S
+Rule France 1921 only - Oct 25 23:00s 0 -
+Rule France 1922 only - Mar 25 23:00s 1:00 S
+Rule France 1922 1938 - Oct Sat>=1 23:00s 0 -
+Rule France 1923 only - May 26 23:00s 1:00 S
+Rule France 1924 only - Mar 29 23:00s 1:00 S
+Rule France 1925 only - Apr 4 23:00s 1:00 S
+Rule France 1926 only - Apr 17 23:00s 1:00 S
+Rule France 1927 only - Apr 9 23:00s 1:00 S
+Rule France 1928 only - Apr 14 23:00s 1:00 S
+Rule France 1929 only - Apr 20 23:00s 1:00 S
+Rule France 1930 only - Apr 12 23:00s 1:00 S
+Rule France 1931 only - Apr 18 23:00s 1:00 S
+Rule France 1932 only - Apr 2 23:00s 1:00 S
+Rule France 1933 only - Mar 25 23:00s 1:00 S
+Rule France 1934 only - Apr 7 23:00s 1:00 S
+Rule France 1935 only - Mar 30 23:00s 1:00 S
+Rule France 1936 only - Apr 18 23:00s 1:00 S
+Rule France 1937 only - Apr 3 23:00s 1:00 S
+Rule France 1938 only - Mar 26 23:00s 1:00 S
+Rule France 1939 only - Apr 15 23:00s 1:00 S
+Rule France 1939 only - Nov 18 23:00s 0 -
+Rule France 1940 only - Feb 25 2:00 1:00 S
+Rule France 1941 only - May 5 0:00 2:00 M # Midsummer
+Rule France 1941 only - Oct 6 0:00 1:00 S
+Rule France 1942 only - Mar 9 0:00 2:00 M
+Rule France 1942 only - Nov 2 3:00 1:00 S
+Rule France 1943 only - Mar 29 2:00 2:00 M
+Rule France 1943 only - Oct 4 3:00 1:00 S
+Rule France 1944 only - Apr 3 2:00 2:00 M
+Rule France 1944 only - Oct 8 1:00 1:00 S
+Rule France 1945 only - Apr 2 2:00 2:00 M
+Rule France 1945 only - Sep 16 3:00 0 -
+Rule France 1976 only - Mar 28 1:00 1:00 S
+Rule France 1976 only - Sep 26 1:00 0 -
+Zone Europe/Paris 0:09:21 - LMT 1891 Mar 15 0:01
+ 0:09:21 - PMT 1911 Mar 11 0:01 # Paris MT
+ 0:00 France WE%sT 1940 Jun 14 23:00
+ 1:00 C-Eur CE%sT 1944 Aug 25
+ 0:00 France WE%sT 1945 Sep 16 3:00
+ 1:00 France CE%sT 1977
+ 1:00 EU CE%sT
+Rule Germany 1946 only - Apr 14 2:00s 1:00 S
+Rule Germany 1946 only - Oct 7 2:00s 0 -
+Rule Germany 1947 1949 - Oct Sun>=1 2:00s 0 -
+Rule Germany 1947 only - Apr 6 3:00s 1:00 S
+Rule Germany 1947 only - May 11 2:00s 2:00 M
+Rule Germany 1947 only - Jun 29 3:00 1:00 S
+Rule Germany 1948 only - Apr 18 2:00s 1:00 S
+Rule Germany 1949 only - Apr 10 2:00s 1:00 S
+Rule SovietZone 1945 only - May 24 2:00 2:00 M # Midsummer
+Rule SovietZone 1945 only - Sep 24 3:00 1:00 S
+Rule SovietZone 1945 only - Nov 18 2:00s 0 -
+Zone Europe/Berlin 0:53:28 - LMT 1893 Apr
+ 1:00 C-Eur CE%sT 1945 May 24 2:00
+ 1:00 SovietZone CE%sT 1946
+ 1:00 Germany CE%sT 1980
+ 1:00 EU CE%sT
+Zone Europe/Gibraltar -0:21:24 - LMT 1880 Aug 2 0:00s
+ 0:00 GB-Eire %s 1957 Apr 14 2:00
+ 1:00 - CET 1982
+ 1:00 EU CE%sT
+Rule Greece 1932 only - Jul 7 0:00 1:00 S
+Rule Greece 1932 only - Sep 1 0:00 0 -
+Rule Greece 1941 only - Apr 7 0:00 1:00 S
+Rule Greece 1942 only - Nov 2 3:00 0 -
+Rule Greece 1943 only - Mar 30 0:00 1:00 S
+Rule Greece 1943 only - Oct 4 0:00 0 -
+Rule Greece 1952 only - Jul 1 0:00 1:00 S
+Rule Greece 1952 only - Nov 2 0:00 0 -
+Rule Greece 1975 only - Apr 12 0:00s 1:00 S
+Rule Greece 1975 only - Nov 26 0:00s 0 -
+Rule Greece 1976 only - Apr 11 2:00s 1:00 S
+Rule Greece 1976 only - Oct 10 2:00s 0 -
+Rule Greece 1977 1978 - Apr Sun>=1 2:00s 1:00 S
+Rule Greece 1977 only - Sep 26 2:00s 0 -
+Rule Greece 1978 only - Sep 24 4:00 0 -
+Rule Greece 1979 only - Apr 1 9:00 1:00 S
+Rule Greece 1979 only - Sep 29 2:00 0 -
+Rule Greece 1980 only - Apr 1 0:00 1:00 S
+Rule Greece 1980 only - Sep 28 0:00 0 -
+Zone Europe/Athens 1:34:52 - LMT 1895 Sep 14
+ 1:34:52 - AMT 1916 Jul 28 0:01 # Athens MT
+ 2:00 Greece EE%sT 1941 Apr 30
+ 1:00 Greece CE%sT 1944 Apr 4
+ 2:00 Greece EE%sT 1981
+ # Shanks & Pottenger say it switched to C-Eur in 1981;
+ # go with EU instead, since Greece joined it on Jan 1.
+ 2:00 EU EE%sT
+Rule Hungary 1918 only - Apr 1 3:00 1:00 S
+Rule Hungary 1918 only - Sep 29 3:00 0 -
+Rule Hungary 1919 only - Apr 15 3:00 1:00 S
+Rule Hungary 1919 only - Sep 15 3:00 0 -
+Rule Hungary 1920 only - Apr 5 3:00 1:00 S
+Rule Hungary 1920 only - Sep 30 3:00 0 -
+Rule Hungary 1945 only - May 1 23:00 1:00 S
+Rule Hungary 1945 only - Nov 3 0:00 0 -
+Rule Hungary 1946 only - Mar 31 2:00s 1:00 S
+Rule Hungary 1946 1949 - Oct Sun>=1 2:00s 0 -
+Rule Hungary 1947 1949 - Apr Sun>=4 2:00s 1:00 S
+Rule Hungary 1950 only - Apr 17 2:00s 1:00 S
+Rule Hungary 1950 only - Oct 23 2:00s 0 -
+Rule Hungary 1954 1955 - May 23 0:00 1:00 S
+Rule Hungary 1954 1955 - Oct 3 0:00 0 -
+Rule Hungary 1956 only - Jun Sun>=1 0:00 1:00 S
+Rule Hungary 1956 only - Sep lastSun 0:00 0 -
+Rule Hungary 1957 only - Jun Sun>=1 1:00 1:00 S
+Rule Hungary 1957 only - Sep lastSun 3:00 0 -
+Rule Hungary 1980 only - Apr 6 1:00 1:00 S
+Zone Europe/Budapest 1:16:20 - LMT 1890 Oct
+ 1:00 C-Eur CE%sT 1918
+ 1:00 Hungary CE%sT 1941 Apr 6 2:00
+ 1:00 C-Eur CE%sT 1945
+ 1:00 Hungary CE%sT 1980 Sep 28 2:00s
+ 1:00 EU CE%sT
+Rule Iceland 1917 1918 - Feb 19 23:00 1:00 S
+Rule Iceland 1917 only - Oct 21 1:00 0 -
+Rule Iceland 1918 only - Nov 16 1:00 0 -
+Rule Iceland 1939 only - Apr 29 23:00 1:00 S
+Rule Iceland 1939 only - Nov 29 2:00 0 -
+Rule Iceland 1940 only - Feb 25 2:00 1:00 S
+Rule Iceland 1940 only - Nov 3 2:00 0 -
+Rule Iceland 1941 only - Mar 2 1:00s 1:00 S
+Rule Iceland 1941 only - Nov 2 1:00s 0 -
+Rule Iceland 1942 only - Mar 8 1:00s 1:00 S
+Rule Iceland 1942 only - Oct 25 1:00s 0 -
+Rule Iceland 1943 1946 - Mar Sun>=1 1:00s 1:00 S
+Rule Iceland 1943 1948 - Oct Sun>=22 1:00s 0 -
+Rule Iceland 1947 1967 - Apr Sun>=1 1:00s 1:00 S
+Rule Iceland 1949 only - Oct 30 1:00s 0 -
+Rule Iceland 1950 1966 - Oct Sun>=22 1:00s 0 -
+Rule Iceland 1967 only - Oct 29 1:00s 0 -
+Zone Atlantic/Reykjavik -1:27:24 - LMT 1837
+ -1:27:48 - RMT 1908 # Reykjavik Mean Time?
+ -1:00 Iceland IS%sT 1968 Apr 7 1:00s
+ 0:00 - GMT
+Rule Italy 1916 only - Jun 3 0:00s 1:00 S
+Rule Italy 1916 only - Oct 1 0:00s 0 -
+Rule Italy 1917 only - Apr 1 0:00s 1:00 S
+Rule Italy 1917 only - Sep 30 0:00s 0 -
+Rule Italy 1918 only - Mar 10 0:00s 1:00 S
+Rule Italy 1918 1919 - Oct Sun>=1 0:00s 0 -
+Rule Italy 1919 only - Mar 2 0:00s 1:00 S
+Rule Italy 1920 only - Mar 21 0:00s 1:00 S
+Rule Italy 1920 only - Sep 19 0:00s 0 -
+Rule Italy 1940 only - Jun 15 0:00s 1:00 S
+Rule Italy 1944 only - Sep 17 0:00s 0 -
+Rule Italy 1945 only - Apr 2 2:00 1:00 S
+Rule Italy 1945 only - Sep 15 0:00s 0 -
+Rule Italy 1946 only - Mar 17 2:00s 1:00 S
+Rule Italy 1946 only - Oct 6 2:00s 0 -
+Rule Italy 1947 only - Mar 16 0:00s 1:00 S
+Rule Italy 1947 only - Oct 5 0:00s 0 -
+Rule Italy 1948 only - Feb 29 2:00s 1:00 S
+Rule Italy 1948 only - Oct 3 2:00s 0 -
+Rule Italy 1966 1968 - May Sun>=22 0:00 1:00 S
+Rule Italy 1966 1969 - Sep Sun>=22 0:00 0 -
+Rule Italy 1969 only - Jun 1 0:00 1:00 S
+Rule Italy 1970 only - May 31 0:00 1:00 S
+Rule Italy 1970 only - Sep lastSun 0:00 0 -
+Rule Italy 1971 1972 - May Sun>=22 0:00 1:00 S
+Rule Italy 1971 only - Sep lastSun 1:00 0 -
+Rule Italy 1972 only - Oct 1 0:00 0 -
+Rule Italy 1973 only - Jun 3 0:00 1:00 S
+Rule Italy 1973 1974 - Sep lastSun 0:00 0 -
+Rule Italy 1974 only - May 26 0:00 1:00 S
+Rule Italy 1975 only - Jun 1 0:00s 1:00 S
+Rule Italy 1975 1977 - Sep lastSun 0:00s 0 -
+Rule Italy 1976 only - May 30 0:00s 1:00 S
+Rule Italy 1977 1979 - May Sun>=22 0:00s 1:00 S
+Rule Italy 1978 only - Oct 1 0:00s 0 -
+Rule Italy 1979 only - Sep 30 0:00s 0 -
+Zone Europe/Rome 0:49:56 - LMT 1866 Sep 22
+ 0:49:56 - RMT 1893 Nov 1 0:00s # Rome Mean
+ 1:00 Italy CE%sT 1942 Nov 2 2:00s
+ 1:00 C-Eur CE%sT 1944 Jul
+ 1:00 Italy CE%sT 1980
+ 1:00 EU CE%sT
+Link Europe/Rome Europe/Vatican
+Link Europe/Rome Europe/San_Marino
+Rule Latvia 1989 1996 - Mar lastSun 2:00s 1:00 S
+Rule Latvia 1989 1996 - Sep lastSun 2:00s 0 -
+Zone Europe/Riga 1:36:24 - LMT 1880
+ 1:36:24 - RMT 1918 Apr 15 2:00 #Riga Mean Time
+ 1:36:24 1:00 LST 1918 Sep 16 3:00 #Latvian Summer
+ 1:36:24 - RMT 1919 Apr 1 2:00
+ 1:36:24 1:00 LST 1919 May 22 3:00
+ 1:36:24 - RMT 1926 May 11
+ 2:00 - EET 1940 Aug 5
+ 3:00 - MSK 1941 Jul
+ 1:00 C-Eur CE%sT 1944 Oct 13
+ 3:00 Russia MSK/MSD 1989 Mar lastSun 2:00s
+ 2:00 1:00 EEST 1989 Sep lastSun 2:00s
+ 2:00 Latvia EE%sT 1997 Jan 21
+ 2:00 EU EE%sT 2000 Feb 29
+ 2:00 - EET 2001 Jan 2
+ 2:00 EU EE%sT
+Zone Europe/Vaduz 0:38:04 - LMT 1894 Jun
+ 1:00 - CET 1981
+ 1:00 EU CE%sT
+Zone Europe/Vilnius 1:41:16 - LMT 1880
+ 1:24:00 - WMT 1917 # Warsaw Mean Time
+ 1:35:36 - KMT 1919 Oct 10 # Kaunas Mean Time
+ 1:00 - CET 1920 Jul 12
+ 2:00 - EET 1920 Oct 9
+ 1:00 - CET 1940 Aug 3
+ 3:00 - MSK 1941 Jun 24
+ 1:00 C-Eur CE%sT 1944 Aug
+ 3:00 Russia MSK/MSD 1991 Mar 31 2:00s
+ 2:00 1:00 EEST 1991 Sep 29 2:00s
+ 2:00 C-Eur EE%sT 1998
+ 2:00 - EET 1998 Mar 29 1:00u
+ 1:00 EU CE%sT 1999 Oct 31 1:00u
+ 2:00 - EET 2003 Jan 1
+ 2:00 EU EE%sT
+Rule Lux 1916 only - May 14 23:00 1:00 S
+Rule Lux 1916 only - Oct 1 1:00 0 -
+Rule Lux 1917 only - Apr 28 23:00 1:00 S
+Rule Lux 1917 only - Sep 17 1:00 0 -
+Rule Lux 1918 only - Apr Mon>=15 2:00s 1:00 S
+Rule Lux 1918 only - Sep Mon>=15 2:00s 0 -
+Rule Lux 1919 only - Mar 1 23:00 1:00 S
+Rule Lux 1919 only - Oct 5 3:00 0 -
+Rule Lux 1920 only - Feb 14 23:00 1:00 S
+Rule Lux 1920 only - Oct 24 2:00 0 -
+Rule Lux 1921 only - Mar 14 23:00 1:00 S
+Rule Lux 1921 only - Oct 26 2:00 0 -
+Rule Lux 1922 only - Mar 25 23:00 1:00 S
+Rule Lux 1922 only - Oct Sun>=2 1:00 0 -
+Rule Lux 1923 only - Apr 21 23:00 1:00 S
+Rule Lux 1923 only - Oct Sun>=2 2:00 0 -
+Rule Lux 1924 only - Mar 29 23:00 1:00 S
+Rule Lux 1924 1928 - Oct Sun>=2 1:00 0 -
+Rule Lux 1925 only - Apr 5 23:00 1:00 S
+Rule Lux 1926 only - Apr 17 23:00 1:00 S
+Rule Lux 1927 only - Apr 9 23:00 1:00 S
+Rule Lux 1928 only - Apr 14 23:00 1:00 S
+Rule Lux 1929 only - Apr 20 23:00 1:00 S
+Zone Europe/Luxembourg 0:24:36 - LMT 1904 Jun
+ 1:00 Lux CE%sT 1918 Nov 25
+ 0:00 Lux WE%sT 1929 Oct 6 2:00s
+ 0:00 Belgium WE%sT 1940 May 14 3:00
+ 1:00 C-Eur WE%sT 1944 Sep 18 3:00
+ 1:00 Belgium CE%sT 1977
+ 1:00 EU CE%sT
+Rule Malta 1973 only - Mar 31 0:00s 1:00 S
+Rule Malta 1973 only - Sep 29 0:00s 0 -
+Rule Malta 1974 only - Apr 21 0:00s 1:00 S
+Rule Malta 1974 only - Sep 16 0:00s 0 -
+Rule Malta 1975 1979 - Apr Sun>=15 2:00 1:00 S
+Rule Malta 1975 1980 - Sep Sun>=15 2:00 0 -
+Rule Malta 1980 only - Mar 31 2:00 1:00 S
+Zone Europe/Malta 0:58:04 - LMT 1893 Nov 2 0:00s # Valletta
+ 1:00 Italy CE%sT 1942 Nov 2 2:00s
+ 1:00 C-Eur CE%sT 1945 Apr 2 2:00s
+ 1:00 Italy CE%sT 1973 Mar 31
+ 1:00 Malta CE%sT 1981
+ 1:00 EU CE%sT
+Zone Europe/Chisinau 1:55:20 - LMT 1880
+ 1:55 - CMT 1918 Feb 15 # Chisinau MT
+ 1:44:24 - BMT 1931 Jul 24 # Bucharest MT
+ 2:00 Romania EE%sT 1940 Aug 15
+ 2:00 1:00 EEST 1941 Jul 17
+ 1:00 C-Eur CE%sT 1944 Aug 24
+ 3:00 Russia MSK/MSD 1990
+ 3:00 - MSK 1990 May 6
+ 2:00 - EET 1991
+ 2:00 Russia EE%sT 1992
+ 2:00 E-Eur EE%sT 1997
+ 2:00 EU EE%sT
+Zone Europe/Monaco 0:29:32 - LMT 1891 Mar 15
+ 0:09:21 - PMT 1911 Mar 11 # Paris Mean Time
+ 0:00 France WE%sT 1945 Sep 16 3:00
+ 1:00 France CE%sT 1977
+ 1:00 EU CE%sT
+Rule Neth 1916 only - May 1 0:00 1:00 NST # Netherlands Summer Time
+Rule Neth 1916 only - Oct 1 0:00 0 AMT # Amsterdam Mean Time
+Rule Neth 1917 only - Apr 16 2:00s 1:00 NST
+Rule Neth 1917 only - Sep 17 2:00s 0 AMT
+Rule Neth 1918 1921 - Apr Mon>=1 2:00s 1:00 NST
+Rule Neth 1918 1921 - Sep lastMon 2:00s 0 AMT
+Rule Neth 1922 only - Mar lastSun 2:00s 1:00 NST
+Rule Neth 1922 1936 - Oct Sun>=2 2:00s 0 AMT
+Rule Neth 1923 only - Jun Fri>=1 2:00s 1:00 NST
+Rule Neth 1924 only - Mar lastSun 2:00s 1:00 NST
+Rule Neth 1925 only - Jun Fri>=1 2:00s 1:00 NST
+Rule Neth 1926 1931 - May 15 2:00s 1:00 NST
+Rule Neth 1932 only - May 22 2:00s 1:00 NST
+Rule Neth 1933 1936 - May 15 2:00s 1:00 NST
+Rule Neth 1937 only - May 22 2:00s 1:00 NST
+Rule Neth 1937 only - Jul 1 0:00 1:00 S
+Rule Neth 1937 1939 - Oct Sun>=2 2:00s 0 -
+Rule Neth 1938 1939 - May 15 2:00s 1:00 S
+Rule Neth 1945 only - Apr 2 2:00s 1:00 S
+Rule Neth 1945 only - Sep 16 2:00s 0 -
+Zone Europe/Amsterdam 0:19:32 - LMT 1835
+ 0:19:32 Neth %s 1937 Jul 1
+ 0:20 Neth NE%sT 1940 May 16 0:00 # Dutch Time
+ 1:00 C-Eur CE%sT 1945 Apr 2 2:00
+ 1:00 Neth CE%sT 1977
+ 1:00 EU CE%sT
+Rule Norway 1916 only - May 22 1:00 1:00 S
+Rule Norway 1916 only - Sep 30 0:00 0 -
+Rule Norway 1945 only - Apr 2 2:00s 1:00 S
+Rule Norway 1945 only - Oct 1 2:00s 0 -
+Rule Norway 1959 1964 - Mar Sun>=15 2:00s 1:00 S
+Rule Norway 1959 1965 - Sep Sun>=15 2:00s 0 -
+Rule Norway 1965 only - Apr 25 2:00s 1:00 S
+Zone Europe/Oslo 0:43:00 - LMT 1895 Jan 1
+ 1:00 Norway CE%sT 1940 Aug 10 23:00
+ 1:00 C-Eur CE%sT 1945 Apr 2 2:00
+ 1:00 Norway CE%sT 1980
+ 1:00 EU CE%sT
+Link Europe/Oslo Arctic/Longyearbyen
+Rule Poland 1918 1919 - Sep 16 2:00s 0 -
+Rule Poland 1919 only - Apr 15 2:00s 1:00 S
+Rule Poland 1944 only - Apr 3 2:00s 1:00 S
+Rule Poland 1944 only - Oct 4 2:00 0 -
+Rule Poland 1945 only - Apr 29 0:00 1:00 S
+Rule Poland 1945 only - Nov 1 0:00 0 -
+Rule Poland 1946 only - Apr 14 0:00s 1:00 S
+Rule Poland 1946 only - Oct 7 2:00s 0 -
+Rule Poland 1947 only - May 4 2:00s 1:00 S
+Rule Poland 1947 1949 - Oct Sun>=1 2:00s 0 -
+Rule Poland 1948 only - Apr 18 2:00s 1:00 S
+Rule Poland 1949 only - Apr 10 2:00s 1:00 S
+Rule Poland 1957 only - Jun 2 1:00s 1:00 S
+Rule Poland 1957 1958 - Sep lastSun 1:00s 0 -
+Rule Poland 1958 only - Mar 30 1:00s 1:00 S
+Rule Poland 1959 only - May 31 1:00s 1:00 S
+Rule Poland 1959 1961 - Oct Sun>=1 1:00s 0 -
+Rule Poland 1960 only - Apr 3 1:00s 1:00 S
+Rule Poland 1961 1964 - May lastSun 1:00s 1:00 S
+Rule Poland 1962 1964 - Sep lastSun 1:00s 0 -
+Zone Europe/Warsaw 1:24:00 - LMT 1880
+ 1:24:00 - WMT 1915 Aug 5 # Warsaw Mean Time
+ 1:00 C-Eur CE%sT 1918 Sep 16 3:00
+ 2:00 Poland EE%sT 1922 Jun
+ 1:00 Poland CE%sT 1940 Jun 23 2:00
+ 1:00 C-Eur CE%sT 1944 Oct
+ 1:00 Poland CE%sT 1977
+ 1:00 W-Eur CE%sT 1988
+ 1:00 EU CE%sT
+Rule Port 1916 only - Jun 17 23:00 1:00 S
+Rule Port 1916 only - Nov 1 1:00 0 -
+Rule Port 1917 only - Feb 28 23:00s 1:00 S
+Rule Port 1917 1921 - Oct 14 23:00s 0 -
+Rule Port 1918 only - Mar 1 23:00s 1:00 S
+Rule Port 1919 only - Feb 28 23:00s 1:00 S
+Rule Port 1920 only - Feb 29 23:00s 1:00 S
+Rule Port 1921 only - Feb 28 23:00s 1:00 S
+Rule Port 1924 only - Apr 16 23:00s 1:00 S
+Rule Port 1924 only - Oct 14 23:00s 0 -
+Rule Port 1926 only - Apr 17 23:00s 1:00 S
+Rule Port 1926 1929 - Oct Sat>=1 23:00s 0 -
+Rule Port 1927 only - Apr 9 23:00s 1:00 S
+Rule Port 1928 only - Apr 14 23:00s 1:00 S
+Rule Port 1929 only - Apr 20 23:00s 1:00 S
+Rule Port 1931 only - Apr 18 23:00s 1:00 S
+Rule Port 1931 1932 - Oct Sat>=1 23:00s 0 -
+Rule Port 1932 only - Apr 2 23:00s 1:00 S
+Rule Port 1934 only - Apr 7 23:00s 1:00 S
+Rule Port 1934 1938 - Oct Sat>=1 23:00s 0 -
+Rule Port 1935 only - Mar 30 23:00s 1:00 S
+Rule Port 1936 only - Apr 18 23:00s 1:00 S
+Rule Port 1937 only - Apr 3 23:00s 1:00 S
+Rule Port 1938 only - Mar 26 23:00s 1:00 S
+Rule Port 1939 only - Apr 15 23:00s 1:00 S
+Rule Port 1939 only - Nov 18 23:00s 0 -
+Rule Port 1940 only - Feb 24 23:00s 1:00 S
+Rule Port 1940 1941 - Oct 5 23:00s 0 -
+Rule Port 1941 only - Apr 5 23:00s 1:00 S
+Rule Port 1942 1945 - Mar Sat>=8 23:00s 1:00 S
+Rule Port 1942 only - Apr 25 22:00s 2:00 M # Midsummer
+Rule Port 1942 only - Aug 15 22:00s 1:00 S
+Rule Port 1942 1945 - Oct Sat>=24 23:00s 0 -
+Rule Port 1943 only - Apr 17 22:00s 2:00 M
+Rule Port 1943 1945 - Aug Sat>=25 22:00s 1:00 S
+Rule Port 1944 1945 - Apr Sat>=21 22:00s 2:00 M
+Rule Port 1946 only - Apr Sat>=1 23:00s 1:00 S
+Rule Port 1946 only - Oct Sat>=1 23:00s 0 -
+Rule Port 1947 1949 - Apr Sun>=1 2:00s 1:00 S
+Rule Port 1947 1949 - Oct Sun>=1 2:00s 0 -
+Rule Port 1951 1965 - Apr Sun>=1 2:00s 1:00 S
+Rule Port 1951 1965 - Oct Sun>=1 2:00s 0 -
+Rule Port 1977 only - Mar 27 0:00s 1:00 S
+Rule Port 1977 only - Sep 25 0:00s 0 -
+Rule Port 1978 1979 - Apr Sun>=1 0:00s 1:00 S
+Rule Port 1978 only - Oct 1 0:00s 0 -
+Rule Port 1979 1982 - Sep lastSun 1:00s 0 -
+Rule Port 1980 only - Mar lastSun 0:00s 1:00 S
+Rule Port 1981 1982 - Mar lastSun 1:00s 1:00 S
+Rule Port 1983 only - Mar lastSun 2:00s 1:00 S
+Zone Europe/Lisbon -0:36:32 - LMT 1884
+ -0:36:32 - LMT 1912 Jan 1 # Lisbon Mean Time
+ 0:00 Port WE%sT 1966 Apr 3 2:00
+ 1:00 - CET 1976 Sep 26 1:00
+ 0:00 Port WE%sT 1983 Sep 25 1:00s
+ 0:00 W-Eur WE%sT 1992 Sep 27 1:00s
+ 1:00 EU CE%sT 1996 Mar 31 1:00u
+ 0:00 EU WE%sT
+Zone Atlantic/Azores -1:42:40 - LMT 1884 # Ponta Delgada
+ -1:54:32 - HMT 1911 May 24 # Horta Mean Time
+ -2:00 Port AZO%sT 1966 Apr 3 2:00 # Azores Time
+ -1:00 Port AZO%sT 1983 Sep 25 1:00s
+ -1:00 W-Eur AZO%sT 1992 Sep 27 1:00s
+ 0:00 EU WE%sT 1993 Mar 28 1:00u
+ -1:00 EU AZO%sT
+Zone Atlantic/Madeira -1:07:36 - LMT 1884 # Funchal
+ -1:07:36 - FMT 1911 May 24 # Funchal Mean Time
+ -1:00 Port MAD%sT 1966 Apr 3 2:00 # Madeira Time
+ 0:00 Port WE%sT 1983 Sep 25 1:00s
+ 0:00 EU WE%sT
+Rule Romania 1932 only - May 21 0:00s 1:00 S
+Rule Romania 1932 1939 - Oct Sun>=1 0:00s 0 -
+Rule Romania 1933 1939 - Apr Sun>=2 0:00s 1:00 S
+Rule Romania 1979 only - May 27 0:00 1:00 S
+Rule Romania 1979 only - Sep lastSun 0:00 0 -
+Rule Romania 1980 only - Apr 5 23:00 1:00 S
+Rule Romania 1980 only - Sep lastSun 1:00 0 -
+Rule Romania 1991 1993 - Mar lastSun 0:00s 1:00 S
+Rule Romania 1991 1993 - Sep lastSun 0:00s 0 -
+Zone Europe/Bucharest 1:44:24 - LMT 1891 Oct
+ 1:44:24 - BMT 1931 Jul 24 # Bucharest MT
+ 2:00 Romania EE%sT 1981 Mar 29 2:00s
+ 2:00 C-Eur EE%sT 1991
+ 2:00 Romania EE%sT 1994
+ 2:00 E-Eur EE%sT 1997
+ 2:00 EU EE%sT
+Zone Europe/Kaliningrad 1:22:00 - LMT 1893 Apr
+ 1:00 C-Eur CE%sT 1945
+ 2:00 Poland CE%sT 1946
+ 3:00 Russia MSK/MSD 1991 Mar 31 2:00s
+ 2:00 Russia EE%sT
+Zone Europe/Moscow 2:30:20 - LMT 1880
+ 2:30 - MMT 1916 Jul 3 # Moscow Mean Time
+ 2:30:48 Russia %s 1919 Jul 1 2:00
+ 3:00 Russia MSK/MSD 1922 Oct
+ 2:00 - EET 1930 Jun 21
+ 3:00 Russia MSK/MSD 1991 Mar 31 2:00s
+ 2:00 Russia EE%sT 1992 Jan 19 2:00s
+ 3:00 Russia MSK/MSD
+Zone Europe/Volgograd 2:57:40 - LMT 1920 Jan 3
+ 3:00 - TSAT 1925 Apr 6 # Tsaritsyn Time
+ 3:00 - STAT 1930 Jun 21 # Stalingrad Time
+ 4:00 - STAT 1961 Nov 11
+ 4:00 Russia VOL%sT 1989 Mar 26 2:00s # Volgograd T
+ 3:00 Russia VOL%sT 1991 Mar 31 2:00s
+ 4:00 - VOLT 1992 Mar 29 2:00s
+ 3:00 Russia VOL%sT
+Zone Europe/Samara 3:20:36 - LMT 1919 Jul 1 2:00
+ 3:00 - SAMT 1930 Jun 21
+ 4:00 - SAMT 1935 Jan 27
+ 4:00 Russia KUY%sT 1989 Mar 26 2:00s # Kuybyshev
+ 3:00 Russia KUY%sT 1991 Mar 31 2:00s
+ 2:00 Russia KUY%sT 1991 Sep 29 2:00s
+ 3:00 - KUYT 1991 Oct 20 3:00
+ 4:00 Russia SAM%sT # Samara Time
+Zone Asia/Yekaterinburg 4:02:24 - LMT 1919 Jul 15 4:00
+ 4:00 - SVET 1930 Jun 21 # Sverdlovsk Time
+ 5:00 Russia SVE%sT 1991 Mar 31 2:00s
+ 4:00 Russia SVE%sT 1992 Jan 19 2:00s
+ 5:00 Russia YEK%sT # Yekaterinburg Time
+Zone Asia/Omsk 4:53:36 - LMT 1919 Nov 14
+ 5:00 - OMST 1930 Jun 21 # Omsk TIme
+ 6:00 Russia OMS%sT 1991 Mar 31 2:00s
+ 5:00 Russia OMS%sT 1992 Jan 19 2:00s
+ 6:00 Russia OMS%sT
+Zone Asia/Novosibirsk 5:31:40 - LMT 1919 Dec 14 6:00
+ 6:00 - NOVT 1930 Jun 21 # Novosibirsk Time
+ 7:00 Russia NOV%sT 1991 Mar 31 2:00s
+ 6:00 Russia NOV%sT 1992 Jan 19 2:00s
+ 7:00 Russia NOV%sT 1993 May 23 # say Shanks & P.
+ 6:00 Russia NOV%sT
+Zone Asia/Krasnoyarsk 6:11:20 - LMT 1920 Jan 6
+ 6:00 - KRAT 1930 Jun 21 # Krasnoyarsk Time
+ 7:00 Russia KRA%sT 1991 Mar 31 2:00s
+ 6:00 Russia KRA%sT 1992 Jan 19 2:00s
+ 7:00 Russia KRA%sT
+Zone Asia/Irkutsk 6:57:20 - LMT 1880
+ 6:57:20 - IMT 1920 Jan 25 # Irkutsk Mean Time
+ 7:00 - IRKT 1930 Jun 21 # Irkutsk Time
+ 8:00 Russia IRK%sT 1991 Mar 31 2:00s
+ 7:00 Russia IRK%sT 1992 Jan 19 2:00s
+ 8:00 Russia IRK%sT
+Zone Asia/Yakutsk 8:38:40 - LMT 1919 Dec 15
+ 8:00 - YAKT 1930 Jun 21 # Yakutsk Time
+ 9:00 Russia YAK%sT 1991 Mar 31 2:00s
+ 8:00 Russia YAK%sT 1992 Jan 19 2:00s
+ 9:00 Russia YAK%sT
+Zone Asia/Vladivostok 8:47:44 - LMT 1922 Nov 15
+ 9:00 - VLAT 1930 Jun 21 # Vladivostok Time
+ 10:00 Russia VLA%sT 1991 Mar 31 2:00s
+ 9:00 Russia VLA%sST 1992 Jan 19 2:00s
+ 10:00 Russia VLA%sT
+Zone Asia/Sakhalin 9:30:48 - LMT 1905 Aug 23
+ 9:00 - CJT 1938
+ 9:00 - JST 1945 Aug 25
+ 11:00 Russia SAK%sT 1991 Mar 31 2:00s # Sakhalin T.
+ 10:00 Russia SAK%sT 1992 Jan 19 2:00s
+ 11:00 Russia SAK%sT 1997 Mar lastSun 2:00s
+ 10:00 Russia SAK%sT
+Zone Asia/Magadan 10:03:12 - LMT 1924 May 2
+ 10:00 - MAGT 1930 Jun 21 # Magadan Time
+ 11:00 Russia MAG%sT 1991 Mar 31 2:00s
+ 10:00 Russia MAG%sT 1992 Jan 19 2:00s
+ 11:00 Russia MAG%sT
+Zone Asia/Kamchatka 10:34:36 - LMT 1922 Nov 10
+ 11:00 - PETT 1930 Jun 21 # P-K Time
+ 12:00 Russia PET%sT 1991 Mar 31 2:00s
+ 11:00 Russia PET%sT 1992 Jan 19 2:00s
+ 12:00 Russia PET%sT
+Zone Asia/Anadyr 11:49:56 - LMT 1924 May 2
+ 12:00 - ANAT 1930 Jun 21 # Anadyr Time
+ 13:00 Russia ANA%sT 1982 Apr 1 0:00s
+ 12:00 Russia ANA%sT 1991 Mar 31 2:00s
+ 11:00 Russia ANA%sT 1992 Jan 19 2:00s
+ 12:00 Russia ANA%sT
+Zone Europe/Belgrade 1:22:00 - LMT 1884
+ 1:00 - CET 1941 Apr 18 23:00
+ 1:00 C-Eur CE%sT 1945
+ 1:00 - CET 1945 May 8 2:00s
+ 1:00 1:00 CEST 1945 Sep 16 2:00s
+ 1:00 - CET 1982 Nov 27
+ 1:00 EU CE%sT
+Link Europe/Belgrade Europe/Ljubljana # Slovenia
+Link Europe/Belgrade Europe/Podgorica # Montenegro
+Link Europe/Belgrade Europe/Sarajevo # Bosnia and Herzegovina
+Link Europe/Belgrade Europe/Skopje # Macedonia
+Link Europe/Belgrade Europe/Zagreb # Croatia
+Link Europe/Prague Europe/Bratislava
+Rule Spain 1917 only - May 5 23:00s 1:00 S
+Rule Spain 1917 1919 - Oct 6 23:00s 0 -
+Rule Spain 1918 only - Apr 15 23:00s 1:00 S
+Rule Spain 1919 only - Apr 5 23:00s 1:00 S
+Rule Spain 1924 only - Apr 16 23:00s 1:00 S
+Rule Spain 1924 only - Oct 4 23:00s 0 -
+Rule Spain 1926 only - Apr 17 23:00s 1:00 S
+Rule Spain 1926 1929 - Oct Sat>=1 23:00s 0 -
+Rule Spain 1927 only - Apr 9 23:00s 1:00 S
+Rule Spain 1928 only - Apr 14 23:00s 1:00 S
+Rule Spain 1929 only - Apr 20 23:00s 1:00 S
+Rule Spain 1937 only - May 22 23:00s 1:00 S
+Rule Spain 1937 1939 - Oct Sat>=1 23:00s 0 -
+Rule Spain 1938 only - Mar 22 23:00s 1:00 S
+Rule Spain 1939 only - Apr 15 23:00s 1:00 S
+Rule Spain 1940 only - Mar 16 23:00s 1:00 S
+Rule Spain 1942 only - May 2 22:00s 2:00 M # Midsummer
+Rule Spain 1942 only - Sep 1 22:00s 1:00 S
+Rule Spain 1943 1946 - Apr Sat>=13 22:00s 2:00 M
+Rule Spain 1943 only - Oct 3 22:00s 1:00 S
+Rule Spain 1944 only - Oct 10 22:00s 1:00 S
+Rule Spain 1945 only - Sep 30 1:00 1:00 S
+Rule Spain 1946 only - Sep 30 0:00 0 -
+Rule Spain 1949 only - Apr 30 23:00 1:00 S
+Rule Spain 1949 only - Sep 30 1:00 0 -
+Rule Spain 1974 1975 - Apr Sat>=13 23:00 1:00 S
+Rule Spain 1974 1975 - Oct Sun>=1 1:00 0 -
+Rule Spain 1976 only - Mar 27 23:00 1:00 S
+Rule Spain 1976 1977 - Sep lastSun 1:00 0 -
+Rule Spain 1977 1978 - Apr 2 23:00 1:00 S
+Rule Spain 1978 only - Oct 1 1:00 0 -
+Rule SpainAfrica 1967 only - Jun 3 12:00 1:00 S
+Rule SpainAfrica 1967 only - Oct 1 0:00 0 -
+Rule SpainAfrica 1974 only - Jun 24 0:00 1:00 S
+Rule SpainAfrica 1974 only - Sep 1 0:00 0 -
+Rule SpainAfrica 1976 1977 - May 1 0:00 1:00 S
+Rule SpainAfrica 1976 only - Aug 1 0:00 0 -
+Rule SpainAfrica 1977 only - Sep 28 0:00 0 -
+Rule SpainAfrica 1978 only - Jun 1 0:00 1:00 S
+Rule SpainAfrica 1978 only - Aug 4 0:00 0 -
+Zone Europe/Madrid -0:14:44 - LMT 1901 Jan 1 0:00s
+ 0:00 Spain WE%sT 1946 Sep 30
+ 1:00 Spain CE%sT 1979
+ 1:00 EU CE%sT
+Zone Africa/Ceuta -0:21:16 - LMT 1901
+ 0:00 - WET 1918 May 6 23:00
+ 0:00 1:00 WEST 1918 Oct 7 23:00
+ 0:00 - WET 1924
+ 0:00 Spain WE%sT 1929
+ 0:00 SpainAfrica WE%sT 1984 Mar 16
+ 1:00 - CET 1986
+ 1:00 EU CE%sT
+Zone Atlantic/Canary -1:01:36 - LMT 1922 Mar # Las Palmas de Gran C.
+ -1:00 - CANT 1946 Sep 30 1:00 # Canaries Time
+ 0:00 - WET 1980 Apr 6 0:00s
+ 0:00 1:00 WEST 1980 Sep 28 0:00s
+ 0:00 EU WE%sT
+Zone Europe/Stockholm 1:12:12 - LMT 1879 Jan 1
+ 1:00:14 - SET 1900 Jan 1 # Swedish Time
+ 1:00 - CET 1916 May 14 23:00
+ 1:00 1:00 CEST 1916 Oct 1 01:00
+ 1:00 - CET 1980
+ 1:00 EU CE%sT
+Rule Swiss 1941 1942 - May Mon>=1 1:00 1:00 S
+Rule Swiss 1941 1942 - Oct Mon>=1 2:00 0 -
+Zone Europe/Zurich 0:34:08 - LMT 1848 Sep 12
+ 0:29:44 - BMT 1894 Jun # Bern Mean Time
+ 1:00 Swiss CE%sT 1981
+ 1:00 EU CE%sT
+Rule Turkey 1916 only - May 1 0:00 1:00 S
+Rule Turkey 1916 only - Oct 1 0:00 0 -
+Rule Turkey 1920 only - Mar 28 0:00 1:00 S
+Rule Turkey 1920 only - Oct 25 0:00 0 -
+Rule Turkey 1921 only - Apr 3 0:00 1:00 S
+Rule Turkey 1921 only - Oct 3 0:00 0 -
+Rule Turkey 1922 only - Mar 26 0:00 1:00 S
+Rule Turkey 1922 only - Oct 8 0:00 0 -
+Rule Turkey 1924 only - May 13 0:00 1:00 S
+Rule Turkey 1924 1925 - Oct 1 0:00 0 -
+Rule Turkey 1925 only - May 1 0:00 1:00 S
+Rule Turkey 1940 only - Jun 30 0:00 1:00 S
+Rule Turkey 1940 only - Oct 5 0:00 0 -
+Rule Turkey 1940 only - Dec 1 0:00 1:00 S
+Rule Turkey 1941 only - Sep 21 0:00 0 -
+Rule Turkey 1942 only - Apr 1 0:00 1:00 S
+Rule Turkey 1942 only - Nov 1 0:00 0 -
+Rule Turkey 1945 only - Apr 2 0:00 1:00 S
+Rule Turkey 1945 only - Oct 8 0:00 0 -
+Rule Turkey 1946 only - Jun 1 0:00 1:00 S
+Rule Turkey 1946 only - Oct 1 0:00 0 -
+Rule Turkey 1947 1948 - Apr Sun>=16 0:00 1:00 S
+Rule Turkey 1947 1950 - Oct Sun>=2 0:00 0 -
+Rule Turkey 1949 only - Apr 10 0:00 1:00 S
+Rule Turkey 1950 only - Apr 19 0:00 1:00 S
+Rule Turkey 1951 only - Apr 22 0:00 1:00 S
+Rule Turkey 1951 only - Oct 8 0:00 0 -
+Rule Turkey 1962 only - Jul 15 0:00 1:00 S
+Rule Turkey 1962 only - Oct 8 0:00 0 -
+Rule Turkey 1964 only - May 15 0:00 1:00 S
+Rule Turkey 1964 only - Oct 1 0:00 0 -
+Rule Turkey 1970 1972 - May Sun>=2 0:00 1:00 S
+Rule Turkey 1970 1972 - Oct Sun>=2 0:00 0 -
+Rule Turkey 1973 only - Jun 3 1:00 1:00 S
+Rule Turkey 1973 only - Nov 4 3:00 0 -
+Rule Turkey 1974 only - Mar 31 2:00 1:00 S
+Rule Turkey 1974 only - Nov 3 5:00 0 -
+Rule Turkey 1975 only - Mar 30 0:00 1:00 S
+Rule Turkey 1975 1976 - Oct lastSun 0:00 0 -
+Rule Turkey 1976 only - Jun 1 0:00 1:00 S
+Rule Turkey 1977 1978 - Apr Sun>=1 0:00 1:00 S
+Rule Turkey 1977 only - Oct 16 0:00 0 -
+Rule Turkey 1979 1980 - Apr Sun>=1 3:00 1:00 S
+Rule Turkey 1979 1982 - Oct Mon>=11 0:00 0 -
+Rule Turkey 1981 1982 - Mar lastSun 3:00 1:00 S
+Rule Turkey 1983 only - Jul 31 0:00 1:00 S
+Rule Turkey 1983 only - Oct 2 0:00 0 -
+Rule Turkey 1985 only - Apr 20 0:00 1:00 S
+Rule Turkey 1985 only - Sep 28 0:00 0 -
+Rule Turkey 1986 1990 - Mar lastSun 2:00s 1:00 S
+Rule Turkey 1986 1990 - Sep lastSun 2:00s 0 -
+Rule Turkey 1991 2006 - Mar lastSun 1:00s 1:00 S
+Rule Turkey 1991 1995 - Sep lastSun 1:00s 0 -
+Rule Turkey 1996 2006 - Oct lastSun 1:00s 0 -
+Zone Europe/Istanbul 1:55:52 - LMT 1880
+ 1:56:56 - IMT 1910 Oct # Istanbul Mean Time?
+ 2:00 Turkey EE%sT 1978 Oct 15
+ 3:00 Turkey TR%sT 1985 Apr 20 # Turkey Time
+ 2:00 Turkey EE%sT 2007
+ 2:00 EU EE%sT
+Link Europe/Istanbul Asia/Istanbul # Istanbul is in both continents.
+Zone Europe/Kiev 2:02:04 - LMT 1880
+ 2:02:04 - KMT 1924 May 2 # Kiev Mean Time
+ 2:00 - EET 1930 Jun 21
+ 3:00 - MSK 1941 Sep 20
+ 1:00 C-Eur CE%sT 1943 Nov 6
+ 3:00 Russia MSK/MSD 1990
+ 3:00 - MSK 1990 Jul 1 2:00
+ 2:00 - EET 1992
+ 2:00 E-Eur EE%sT 1995
+ 2:00 EU EE%sT
+Zone Europe/Uzhgorod 1:29:12 - LMT 1890 Oct
+ 1:00 - CET 1940
+ 1:00 C-Eur CE%sT 1944 Oct
+ 1:00 1:00 CEST 1944 Oct 26
+ 1:00 - CET 1945 Jun 29
+ 3:00 Russia MSK/MSD 1990
+ 3:00 - MSK 1990 Jul 1 2:00
+ 1:00 - CET 1991 Mar 31 3:00
+ 2:00 - EET 1992
+ 2:00 E-Eur EE%sT 1995
+ 2:00 EU EE%sT
+Zone Europe/Zaporozhye 2:20:40 - LMT 1880
+ 2:20 - CUT 1924 May 2 # Central Ukraine T
+ 2:00 - EET 1930 Jun 21
+ 3:00 - MSK 1941 Aug 25
+ 1:00 C-Eur CE%sT 1943 Oct 25
+ 3:00 Russia MSK/MSD 1991 Mar 31 2:00
+ 2:00 E-Eur EE%sT 1995
+ 2:00 EU EE%sT
+Zone Europe/Simferopol 2:16:24 - LMT 1880
+ 2:16 - SMT 1924 May 2 # Simferopol Mean T
+ 2:00 - EET 1930 Jun 21
+ 3:00 - MSK 1941 Nov
+ 1:00 C-Eur CE%sT 1944 Apr 13
+ 3:00 Russia MSK/MSD 1990
+ 3:00 - MSK 1990 Jul 1 2:00
+ 2:00 - EET 1992
+ 2:00 E-Eur EE%sT 1994 May
+ 3:00 E-Eur MSK/MSD 1996 Mar 31 3:00s
+ 3:00 1:00 MSD 1996 Oct 27 3:00s
+ 3:00 Russia MSK/MSD 1997
+ 3:00 - MSK 1997 Mar lastSun 1:00u
+ 2:00 EU EE%sT
diff --git a/js/dojo-1.7.2/dojox/date/zoneinfo/northamerica b/js/dojo-1.7.2/dojox/date/zoneinfo/northamerica
new file mode 100644
index 0000000..fe60abb
--- /dev/null
+++ b/js/dojo-1.7.2/dojox/date/zoneinfo/northamerica
@@ -0,0 +1,895 @@
+Rule US 1918 1919 - Mar lastSun 2:00 1:00 D
+Rule US 1918 1919 - Oct lastSun 2:00 0 S
+Rule US 1942 only - Feb 9 2:00 1:00 W # War
+Rule US 1945 only - Aug 14 23:00u 1:00 P # Peace
+Rule US 1945 only - Sep 30 2:00 0 S
+Rule US 1967 2006 - Oct lastSun 2:00 0 S
+Rule US 1967 1973 - Apr lastSun 2:00 1:00 D
+Rule US 1974 only - Jan 6 2:00 1:00 D
+Rule US 1975 only - Feb 23 2:00 1:00 D
+Rule US 1976 1986 - Apr lastSun 2:00 1:00 D
+Rule US 1987 2006 - Apr Sun>=1 2:00 1:00 D
+Rule US 2007 max - Mar Sun>=8 2:00 1:00 D
+Rule US 2007 max - Nov Sun>=1 2:00 0 S
+Zone EST -5:00 - EST
+Zone MST -7:00 - MST
+Zone HST -10:00 - HST
+Zone EST5EDT -5:00 US E%sT
+Zone CST6CDT -6:00 US C%sT
+Zone MST7MDT -7:00 US M%sT
+Zone PST8PDT -8:00 US P%sT
+Rule NYC 1920 only - Mar lastSun 2:00 1:00 D
+Rule NYC 1920 only - Oct lastSun 2:00 0 S
+Rule NYC 1921 1966 - Apr lastSun 2:00 1:00 D
+Rule NYC 1921 1954 - Sep lastSun 2:00 0 S
+Rule NYC 1955 1966 - Oct lastSun 2:00 0 S
+Zone America/New_York -4:56:02 - LMT 1883 Nov 18 12:03:58
+ -5:00 US E%sT 1920
+ -5:00 NYC E%sT 1942
+ -5:00 US E%sT 1946
+ -5:00 NYC E%sT 1967
+ -5:00 US E%sT
+Rule Chicago 1920 only - Jun 13 2:00 1:00 D
+Rule Chicago 1920 1921 - Oct lastSun 2:00 0 S
+Rule Chicago 1921 only - Mar lastSun 2:00 1:00 D
+Rule Chicago 1922 1966 - Apr lastSun 2:00 1:00 D
+Rule Chicago 1922 1954 - Sep lastSun 2:00 0 S
+Rule Chicago 1955 1966 - Oct lastSun 2:00 0 S
+Zone America/Chicago -5:50:36 - LMT 1883 Nov 18 12:09:24
+ -6:00 US C%sT 1920
+ -6:00 Chicago C%sT 1936 Mar 1 2:00
+ -5:00 - EST 1936 Nov 15 2:00
+ -6:00 Chicago C%sT 1942
+ -6:00 US C%sT 1946
+ -6:00 Chicago C%sT 1967
+ -6:00 US C%sT
+Zone America/North_Dakota/Center -6:45:12 - LMT 1883 Nov 18 12:14:48
+ -7:00 US M%sT 1992 Oct 25 02:00
+ -6:00 US C%sT
+Zone America/North_Dakota/New_Salem -6:45:39 - LMT 1883 Nov 18 12:14:21
+ -7:00 US M%sT 2003 Oct 26 02:00
+ -6:00 US C%sT
+Rule Denver 1920 1921 - Mar lastSun 2:00 1:00 D
+Rule Denver 1920 only - Oct lastSun 2:00 0 S
+Rule Denver 1921 only - May 22 2:00 0 S
+Rule Denver 1965 1966 - Apr lastSun 2:00 1:00 D
+Rule Denver 1965 1966 - Oct lastSun 2:00 0 S
+Zone America/Denver -6:59:56 - LMT 1883 Nov 18 12:00:04
+ -7:00 US M%sT 1920
+ -7:00 Denver M%sT 1942
+ -7:00 US M%sT 1946
+ -7:00 Denver M%sT 1967
+ -7:00 US M%sT
+Rule CA 1948 only - Mar 14 2:00 1:00 D
+Rule CA 1949 only - Jan 1 2:00 0 S
+Rule CA 1950 1966 - Apr lastSun 2:00 1:00 D
+Rule CA 1950 1961 - Sep lastSun 2:00 0 S
+Rule CA 1962 1966 - Oct lastSun 2:00 0 S
+Zone America/Los_Angeles -7:52:58 - LMT 1883 Nov 18 12:07:02
+ -8:00 US P%sT 1946
+ -8:00 CA P%sT 1967
+ -8:00 US P%sT
+Zone America/Juneau 15:02:19 - LMT 1867 Oct 18
+ -8:57:41 - LMT 1900 Aug 20 12:00
+ -8:00 - PST 1942
+ -8:00 US P%sT 1946
+ -8:00 - PST 1969
+ -8:00 US P%sT 1983 Oct 30 2:00
+ -9:00 US Y%sT 1983 Nov 30
+ -9:00 US AK%sT
+Zone America/Yakutat 14:41:05 - LMT 1867 Oct 18
+ -9:18:55 - LMT 1900 Aug 20 12:00
+ -9:00 - YST 1942
+ -9:00 US Y%sT 1946
+ -9:00 - YST 1969
+ -9:00 US Y%sT 1983 Nov 30
+ -9:00 US AK%sT
+Zone America/Anchorage 14:00:24 - LMT 1867 Oct 18
+ -9:59:36 - LMT 1900 Aug 20 12:00
+ -10:00 - CAT 1942
+ -10:00 US CAT/CAWT 1945 Aug 14 23:00u
+ -10:00 US CAT/CAPT 1946 # Peace
+ -10:00 - CAT 1967 Apr
+ -10:00 - AHST 1969
+ -10:00 US AH%sT 1983 Oct 30 2:00
+ -9:00 US Y%sT 1983 Nov 30
+ -9:00 US AK%sT
+Zone America/Nome 12:58:21 - LMT 1867 Oct 18
+ -11:01:38 - LMT 1900 Aug 20 12:00
+ -11:00 - NST 1942
+ -11:00 US N%sT 1946
+ -11:00 - NST 1967 Apr
+ -11:00 - BST 1969
+ -11:00 US B%sT 1983 Oct 30 2:00
+ -9:00 US Y%sT 1983 Nov 30
+ -9:00 US AK%sT
+Zone America/Adak 12:13:21 - LMT 1867 Oct 18
+ -11:46:38 - LMT 1900 Aug 20 12:00
+ -11:00 - NST 1942
+ -11:00 US N%sT 1946
+ -11:00 - NST 1967 Apr
+ -11:00 - BST 1969
+ -11:00 US B%sT 1983 Oct 30 2:00
+ -10:00 US AH%sT 1983 Nov 30
+ -10:00 US HA%sT
+Zone Pacific/Honolulu -10:31:26 - LMT 1900 Jan 1 12:00
+ -10:30 - HST 1933 Apr 30 2:00
+ -10:30 1:00 HDT 1933 May 21 2:00
+ -10:30 US H%sT 1947 Jun 8 2:00
+ -10:00 - HST
+Zone America/Phoenix -7:28:18 - LMT 1883 Nov 18 11:31:42
+ -7:00 US M%sT 1944 Jan 1 00:01
+ -7:00 - MST 1944 Apr 1 00:01
+ -7:00 US M%sT 1944 Oct 1 00:01
+ -7:00 - MST 1967
+ -7:00 US M%sT 1968 Mar 21
+ -7:00 - MST
+Link America/Denver America/Shiprock
+Zone America/Boise -7:44:49 - LMT 1883 Nov 18 12:15:11
+ -8:00 US P%sT 1923 May 13 2:00
+ -7:00 US M%sT 1974
+ -7:00 - MST 1974 Feb 3 2:00
+ -7:00 US M%sT
+Rule Indianapolis 1941 only - Jun 22 2:00 1:00 D
+Rule Indianapolis 1941 1954 - Sep lastSun 2:00 0 S
+Rule Indianapolis 1946 1954 - Apr lastSun 2:00 1:00 D
+Zone America/Indiana/Indianapolis -5:44:38 - LMT 1883 Nov 18 12:15:22
+ -6:00 US C%sT 1920
+ -6:00 Indianapolis C%sT 1942
+ -6:00 US C%sT 1946
+ -6:00 Indianapolis C%sT 1955 Apr 24 2:00
+ -5:00 - EST 1957 Sep 29 2:00
+ -6:00 - CST 1958 Apr 27 2:00
+ -5:00 - EST 1969
+ -5:00 US E%sT 1971
+ -5:00 - EST 2006
+ -5:00 US E%sT
+Rule Marengo 1951 only - Apr lastSun 2:00 1:00 D
+Rule Marengo 1951 only - Sep lastSun 2:00 0 S
+Rule Marengo 1954 1960 - Apr lastSun 2:00 1:00 D
+Rule Marengo 1954 1960 - Sep lastSun 2:00 0 S
+Zone America/Indiana/Marengo -5:45:23 - LMT 1883 Nov 18 12:14:37
+ -6:00 US C%sT 1951
+ -6:00 Marengo C%sT 1961 Apr 30 2:00
+ -5:00 - EST 1969
+ -5:00 US E%sT 1974 Jan 6 2:00
+ -6:00 1:00 CDT 1974 Oct 27 2:00
+ -5:00 US E%sT 1976
+ -5:00 - EST 2006
+ -5:00 US E%sT
+Rule Vincennes 1946 only - Apr lastSun 2:00 1:00 D
+Rule Vincennes 1946 only - Sep lastSun 2:00 0 S
+Rule Vincennes 1953 1954 - Apr lastSun 2:00 1:00 D
+Rule Vincennes 1953 1959 - Sep lastSun 2:00 0 S
+Rule Vincennes 1955 only - May 1 0:00 1:00 D
+Rule Vincennes 1956 1963 - Apr lastSun 2:00 1:00 D
+Rule Vincennes 1960 only - Oct lastSun 2:00 0 S
+Rule Vincennes 1961 only - Sep lastSun 2:00 0 S
+Rule Vincennes 1962 1963 - Oct lastSun 2:00 0 S
+Zone America/Indiana/Vincennes -5:50:07 - LMT 1883 Nov 18 12:09:53
+ -6:00 US C%sT 1946
+ -6:00 Vincennes C%sT 1964 Apr 26 2:00
+ -5:00 - EST 1969
+ -5:00 US E%sT 1971
+ -5:00 - EST 2006 Apr 2 2:00
+ -6:00 US C%sT 2007 Nov 4 2:00
+ -5:00 US E%sT
+Rule Perry 1946 only - Apr lastSun 2:00 1:00 D
+Rule Perry 1946 only - Sep lastSun 2:00 0 S
+Rule Perry 1953 1954 - Apr lastSun 2:00 1:00 D
+Rule Perry 1953 1959 - Sep lastSun 2:00 0 S
+Rule Perry 1955 only - May 1 0:00 1:00 D
+Rule Perry 1956 1963 - Apr lastSun 2:00 1:00 D
+Rule Perry 1960 only - Oct lastSun 2:00 0 S
+Rule Perry 1961 only - Sep lastSun 2:00 0 S
+Rule Perry 1962 1963 - Oct lastSun 2:00 0 S
+Zone America/Indiana/Tell_City -5:47:03 - LMT 1883 Nov 18 12:12:57
+ -6:00 US C%sT 1946
+ -6:00 Perry C%sT 1964 Apr 26 2:00
+ -5:00 - EST 1969
+ -5:00 US E%sT 1971
+ -5:00 - EST 2006 Apr 2 2:00
+ -6:00 US C%sT
+Rule Pike 1955 only - May 1 0:00 1:00 D
+Rule Pike 1955 1960 - Sep lastSun 2:00 0 S
+Rule Pike 1956 1964 - Apr lastSun 2:00 1:00 D
+Rule Pike 1961 1964 - Oct lastSun 2:00 0 S
+Zone America/Indiana/Petersburg -5:49:07 - LMT 1883 Nov 18 12:10:53
+ -6:00 US C%sT 1955
+ -6:00 Pike C%sT 1965 Apr 25 2:00
+ -5:00 - EST 1966 Oct 30 2:00
+ -6:00 US C%sT 1977 Oct 30 2:00
+ -5:00 - EST 2006 Apr 2 2:00
+ -6:00 US C%sT 2007 Nov 4 2:00
+ -5:00 US E%sT
+Rule Starke 1947 1961 - Apr lastSun 2:00 1:00 D
+Rule Starke 1947 1954 - Sep lastSun 2:00 0 S
+Rule Starke 1955 1956 - Oct lastSun 2:00 0 S
+Rule Starke 1957 1958 - Sep lastSun 2:00 0 S
+Rule Starke 1959 1961 - Oct lastSun 2:00 0 S
+Zone America/Indiana/Knox -5:46:30 - LMT 1883 Nov 18 12:13:30
+ -6:00 US C%sT 1947
+ -6:00 Starke C%sT 1962 Apr 29 2:00
+ -5:00 - EST 1963 Oct 27 2:00
+ -6:00 US C%sT 1991 Oct 27 2:00
+ -5:00 - EST 2006 Apr 2 2:00
+ -6:00 US C%sT
+Rule Pulaski 1946 1960 - Apr lastSun 2:00 1:00 D
+Rule Pulaski 1946 1954 - Sep lastSun 2:00 0 S
+Rule Pulaski 1955 1956 - Oct lastSun 2:00 0 S
+Rule Pulaski 1957 1960 - Sep lastSun 2:00 0 S
+Zone America/Indiana/Winamac -5:46:25 - LMT 1883 Nov 18 12:13:35
+ -6:00 US C%sT 1946
+ -6:00 Pulaski C%sT 1961 Apr 30 2:00
+ -5:00 - EST 1969
+ -5:00 US E%sT 1971
+ -5:00 - EST 2006 Apr 2 2:00
+ -6:00 US C%sT 2007 Mar 11 2:00
+ -5:00 US E%sT
+Zone America/Indiana/Vevay -5:40:16 - LMT 1883 Nov 18 12:19:44
+ -6:00 US C%sT 1954 Apr 25 2:00
+ -5:00 - EST 1969
+ -5:00 US E%sT 1973
+ -5:00 - EST 2006
+ -5:00 US E%sT
+Rule Louisville 1921 only - May 1 2:00 1:00 D
+Rule Louisville 1921 only - Sep 1 2:00 0 S
+Rule Louisville 1941 1961 - Apr lastSun 2:00 1:00 D
+Rule Louisville 1941 only - Sep lastSun 2:00 0 S
+Rule Louisville 1946 only - Jun 2 2:00 0 S
+Rule Louisville 1950 1955 - Sep lastSun 2:00 0 S
+Rule Louisville 1956 1960 - Oct lastSun 2:00 0 S
+Zone America/Kentucky/Louisville -5:43:02 - LMT 1883 Nov 18 12:16:58
+ -6:00 US C%sT 1921
+ -6:00 Louisville C%sT 1942
+ -6:00 US C%sT 1946
+ -6:00 Louisville C%sT 1961 Jul 23 2:00
+ -5:00 - EST 1968
+ -5:00 US E%sT 1974 Jan 6 2:00
+ -6:00 1:00 CDT 1974 Oct 27 2:00
+ -5:00 US E%sT
+Zone America/Kentucky/Monticello -5:39:24 - LMT 1883 Nov 18 12:20:36
+ -6:00 US C%sT 1946
+ -6:00 - CST 1968
+ -6:00 US C%sT 2000 Oct 29 2:00
+ -5:00 US E%sT
+Rule Detroit 1948 only - Apr lastSun 2:00 1:00 D
+Rule Detroit 1948 only - Sep lastSun 2:00 0 S
+Rule Detroit 1967 only - Jun 14 2:00 1:00 D
+Rule Detroit 1967 only - Oct lastSun 2:00 0 S
+Zone America/Detroit -5:32:11 - LMT 1905
+ -6:00 - CST 1915 May 15 2:00
+ -5:00 - EST 1942
+ -5:00 US E%sT 1946
+ -5:00 Detroit E%sT 1973
+ -5:00 US E%sT 1975
+ -5:00 - EST 1975 Apr 27 2:00
+ -5:00 US E%sT
+Rule Menominee 1946 only - Apr lastSun 2:00 1:00 D
+Rule Menominee 1946 only - Sep lastSun 2:00 0 S
+Rule Menominee 1966 only - Apr lastSun 2:00 1:00 D
+Rule Menominee 1966 only - Oct lastSun 2:00 0 S
+Zone America/Menominee -5:50:27 - LMT 1885 Sep 18 12:00
+ -6:00 US C%sT 1946
+ -6:00 Menominee C%sT 1969 Apr 27 2:00
+ -5:00 - EST 1973 Apr 29 2:00
+ -6:00 US C%sT
+Rule Canada 1918 only - Apr 14 2:00 1:00 D
+Rule Canada 1918 only - Oct 31 2:00 0 S
+Rule Canada 1942 only - Feb 9 2:00 1:00 W # War
+Rule Canada 1945 only - Aug 14 23:00u 1:00 P # Peace
+Rule Canada 1945 only - Sep 30 2:00 0 S
+Rule Canada 1974 1986 - Apr lastSun 2:00 1:00 D
+Rule Canada 1974 2006 - Oct lastSun 2:00 0 S
+Rule Canada 1987 2006 - Apr Sun>=1 2:00 1:00 D
+Rule Canada 2007 max - Mar Sun>=8 2:00 1:00 D
+Rule Canada 2007 max - Nov Sun>=1 2:00 0 S
+Rule StJohns 1917 only - Apr 8 2:00 1:00 D
+Rule StJohns 1917 only - Sep 17 2:00 0 S
+Rule StJohns 1919 only - May 5 23:00 1:00 D
+Rule StJohns 1919 only - Aug 12 23:00 0 S
+Rule StJohns 1920 1935 - May Sun>=1 23:00 1:00 D
+Rule StJohns 1920 1935 - Oct lastSun 23:00 0 S
+Rule StJohns 1936 1941 - May Mon>=9 0:00 1:00 D
+Rule StJohns 1936 1941 - Oct Mon>=2 0:00 0 S
+Rule StJohns 1946 1950 - May Sun>=8 2:00 1:00 D
+Rule StJohns 1946 1950 - Oct Sun>=2 2:00 0 S
+Rule StJohns 1951 1986 - Apr lastSun 2:00 1:00 D
+Rule StJohns 1951 1959 - Sep lastSun 2:00 0 S
+Rule StJohns 1960 1986 - Oct lastSun 2:00 0 S
+Rule StJohns 1987 only - Apr Sun>=1 0:01 1:00 D
+Rule StJohns 1987 2006 - Oct lastSun 0:01 0 S
+Rule StJohns 1988 only - Apr Sun>=1 0:01 2:00 DD
+Rule StJohns 1989 2006 - Apr Sun>=1 0:01 1:00 D
+Rule StJohns 2007 max - Mar Sun>=8 0:01 1:00 D
+Rule StJohns 2007 max - Nov Sun>=1 0:01 0 S
+Zone America/St_Johns -3:30:52 - LMT 1884
+ -3:30:52 StJohns N%sT 1918
+ -3:30:52 Canada N%sT 1919
+ -3:30:52 StJohns N%sT 1935 Mar 30
+ -3:30 StJohns N%sT 1942 May 11
+ -3:30 Canada N%sT 1946
+ -3:30 StJohns N%sT
+Zone America/Goose_Bay -4:01:40 - LMT 1884 # Happy Valley-Goose Bay
+ -3:30:52 - NST 1918
+ -3:30:52 Canada N%sT 1919
+ -3:30:52 - NST 1935 Mar 30
+ -3:30 - NST 1936
+ -3:30 StJohns N%sT 1942 May 11
+ -3:30 Canada N%sT 1946
+ -3:30 StJohns N%sT 1966 Mar 15 2:00
+ -4:00 StJohns A%sT
+Rule Halifax 1916 only - Apr 1 0:00 1:00 D
+Rule Halifax 1916 only - Oct 1 0:00 0 S
+Rule Halifax 1920 only - May 9 0:00 1:00 D
+Rule Halifax 1920 only - Aug 29 0:00 0 S
+Rule Halifax 1921 only - May 6 0:00 1:00 D
+Rule Halifax 1921 1922 - Sep 5 0:00 0 S
+Rule Halifax 1922 only - Apr 30 0:00 1:00 D
+Rule Halifax 1923 1925 - May Sun>=1 0:00 1:00 D
+Rule Halifax 1923 only - Sep 4 0:00 0 S
+Rule Halifax 1924 only - Sep 15 0:00 0 S
+Rule Halifax 1925 only - Sep 28 0:00 0 S
+Rule Halifax 1926 only - May 16 0:00 1:00 D
+Rule Halifax 1926 only - Sep 13 0:00 0 S
+Rule Halifax 1927 only - May 1 0:00 1:00 D
+Rule Halifax 1927 only - Sep 26 0:00 0 S
+Rule Halifax 1928 1931 - May Sun>=8 0:00 1:00 D
+Rule Halifax 1928 only - Sep 9 0:00 0 S
+Rule Halifax 1929 only - Sep 3 0:00 0 S
+Rule Halifax 1930 only - Sep 15 0:00 0 S
+Rule Halifax 1931 1932 - Sep Mon>=24 0:00 0 S
+Rule Halifax 1932 only - May 1 0:00 1:00 D
+Rule Halifax 1933 only - Apr 30 0:00 1:00 D
+Rule Halifax 1933 only - Oct 2 0:00 0 S
+Rule Halifax 1934 only - May 20 0:00 1:00 D
+Rule Halifax 1934 only - Sep 16 0:00 0 S
+Rule Halifax 1935 only - Jun 2 0:00 1:00 D
+Rule Halifax 1935 only - Sep 30 0:00 0 S
+Rule Halifax 1936 only - Jun 1 0:00 1:00 D
+Rule Halifax 1936 only - Sep 14 0:00 0 S
+Rule Halifax 1937 1938 - May Sun>=1 0:00 1:00 D
+Rule Halifax 1937 1941 - Sep Mon>=24 0:00 0 S
+Rule Halifax 1939 only - May 28 0:00 1:00 D
+Rule Halifax 1940 1941 - May Sun>=1 0:00 1:00 D
+Rule Halifax 1946 1949 - Apr lastSun 2:00 1:00 D
+Rule Halifax 1946 1949 - Sep lastSun 2:00 0 S
+Rule Halifax 1951 1954 - Apr lastSun 2:00 1:00 D
+Rule Halifax 1951 1954 - Sep lastSun 2:00 0 S
+Rule Halifax 1956 1959 - Apr lastSun 2:00 1:00 D
+Rule Halifax 1956 1959 - Sep lastSun 2:00 0 S
+Rule Halifax 1962 1973 - Apr lastSun 2:00 1:00 D
+Rule Halifax 1962 1973 - Oct lastSun 2:00 0 S
+Zone America/Halifax -4:14:24 - LMT 1902 Jun 15
+ -4:00 Halifax A%sT 1918
+ -4:00 Canada A%sT 1919
+ -4:00 Halifax A%sT 1942 Feb 9 2:00s
+ -4:00 Canada A%sT 1946
+ -4:00 Halifax A%sT 1974
+ -4:00 Canada A%sT
+Zone America/Glace_Bay -3:59:48 - LMT 1902 Jun 15
+ -4:00 Canada A%sT 1953
+ -4:00 Halifax A%sT 1954
+ -4:00 - AST 1972
+ -4:00 Halifax A%sT 1974
+ -4:00 Canada A%sT
+Rule Moncton 1933 1935 - Jun Sun>=8 1:00 1:00 D
+Rule Moncton 1933 1935 - Sep Sun>=8 1:00 0 S
+Rule Moncton 1936 1938 - Jun Sun>=1 1:00 1:00 D
+Rule Moncton 1936 1938 - Sep Sun>=1 1:00 0 S
+Rule Moncton 1939 only - May 27 1:00 1:00 D
+Rule Moncton 1939 1941 - Sep Sat>=21 1:00 0 S
+Rule Moncton 1940 only - May 19 1:00 1:00 D
+Rule Moncton 1941 only - May 4 1:00 1:00 D
+Rule Moncton 1946 1972 - Apr lastSun 2:00 1:00 D
+Rule Moncton 1946 1956 - Sep lastSun 2:00 0 S
+Rule Moncton 1957 1972 - Oct lastSun 2:00 0 S
+Rule Moncton 1993 2006 - Apr Sun>=1 0:01 1:00 D
+Rule Moncton 1993 2006 - Oct lastSun 0:01 0 S
+Zone America/Moncton -4:19:08 - LMT 1883 Dec 9
+ -5:00 - EST 1902 Jun 15
+ -4:00 Canada A%sT 1933
+ -4:00 Moncton A%sT 1942
+ -4:00 Canada A%sT 1946
+ -4:00 Moncton A%sT 1973
+ -4:00 Canada A%sT 1993
+ -4:00 Moncton A%sT 2007
+ -4:00 Canada A%sT
+Rule Mont 1917 only - Mar 25 2:00 1:00 D
+Rule Mont 1917 only - Apr 24 0:00 0 S
+Rule Mont 1919 only - Mar 31 2:30 1:00 D
+Rule Mont 1919 only - Oct 25 2:30 0 S
+Rule Mont 1920 only - May 2 2:30 1:00 D
+Rule Mont 1920 1922 - Oct Sun>=1 2:30 0 S
+Rule Mont 1921 only - May 1 2:00 1:00 D
+Rule Mont 1922 only - Apr 30 2:00 1:00 D
+Rule Mont 1924 only - May 17 2:00 1:00 D
+Rule Mont 1924 1926 - Sep lastSun 2:30 0 S
+Rule Mont 1925 1926 - May Sun>=1 2:00 1:00 D
+Rule Mont 1927 only - May 1 0:00 1:00 D
+Rule Mont 1927 1932 - Sep lastSun 0:00 0 S
+Rule Mont 1928 1931 - Apr lastSun 0:00 1:00 D
+Rule Mont 1932 only - May 1 0:00 1:00 D
+Rule Mont 1933 1940 - Apr lastSun 0:00 1:00 D
+Rule Mont 1933 only - Oct 1 0:00 0 S
+Rule Mont 1934 1939 - Sep lastSun 0:00 0 S
+Rule Mont 1946 1973 - Apr lastSun 2:00 1:00 D
+Rule Mont 1945 1948 - Sep lastSun 2:00 0 S
+Rule Mont 1949 1950 - Oct lastSun 2:00 0 S
+Rule Mont 1951 1956 - Sep lastSun 2:00 0 S
+Rule Mont 1957 1973 - Oct lastSun 2:00 0 S
+Zone America/Blanc-Sablon -3:48:28 - LMT 1884
+ -4:00 Canada A%sT 1970
+ -4:00 - AST
+Zone America/Montreal -4:54:16 - LMT 1884
+ -5:00 Mont E%sT 1918
+ -5:00 Canada E%sT 1919
+ -5:00 Mont E%sT 1942 Feb 9 2:00s
+ -5:00 Canada E%sT 1946
+ -5:00 Mont E%sT 1974
+ -5:00 Canada E%sT
+Rule Toronto 1919 only - Mar 30 23:30 1:00 D
+Rule Toronto 1919 only - Oct 26 0:00 0 S
+Rule Toronto 1920 only - May 2 2:00 1:00 D
+Rule Toronto 1920 only - Sep 26 0:00 0 S
+Rule Toronto 1921 only - May 15 2:00 1:00 D
+Rule Toronto 1921 only - Sep 15 2:00 0 S
+Rule Toronto 1922 1923 - May Sun>=8 2:00 1:00 D
+Rule Toronto 1922 1926 - Sep Sun>=15 2:00 0 S
+Rule Toronto 1924 1927 - May Sun>=1 2:00 1:00 D
+Rule Toronto 1927 1932 - Sep lastSun 2:00 0 S
+Rule Toronto 1928 1931 - Apr lastSun 2:00 1:00 D
+Rule Toronto 1932 only - May 1 2:00 1:00 D
+Rule Toronto 1933 1940 - Apr lastSun 2:00 1:00 D
+Rule Toronto 1933 only - Oct 1 2:00 0 S
+Rule Toronto 1934 1939 - Sep lastSun 2:00 0 S
+Rule Toronto 1945 1946 - Sep lastSun 2:00 0 S
+Rule Toronto 1946 only - Apr lastSun 2:00 1:00 D
+Rule Toronto 1947 1949 - Apr lastSun 0:00 1:00 D
+Rule Toronto 1947 1948 - Sep lastSun 0:00 0 S
+Rule Toronto 1949 only - Nov lastSun 0:00 0 S
+Rule Toronto 1950 1973 - Apr lastSun 2:00 1:00 D
+Rule Toronto 1950 only - Nov lastSun 2:00 0 S
+Rule Toronto 1951 1956 - Sep lastSun 2:00 0 S
+Rule Toronto 1957 1973 - Oct lastSun 2:00 0 S
+Zone America/Toronto -5:17:32 - LMT 1895
+ -5:00 Canada E%sT 1919
+ -5:00 Toronto E%sT 1942 Feb 9 2:00s
+ -5:00 Canada E%sT 1946
+ -5:00 Toronto E%sT 1974
+ -5:00 Canada E%sT
+Zone America/Thunder_Bay -5:57:00 - LMT 1895
+ -6:00 - CST 1910
+ -5:00 - EST 1942
+ -5:00 Canada E%sT 1970
+ -5:00 Mont E%sT 1973
+ -5:00 - EST 1974
+ -5:00 Canada E%sT
+Zone America/Nipigon -5:53:04 - LMT 1895
+ -5:00 Canada E%sT 1940 Sep 29
+ -5:00 1:00 EDT 1942 Feb 9 2:00s
+ -5:00 Canada E%sT
+Zone America/Rainy_River -6:18:16 - LMT 1895
+ -6:00 Canada C%sT 1940 Sep 29
+ -6:00 1:00 CDT 1942 Feb 9 2:00s
+ -6:00 Canada C%sT
+Zone America/Atikokan -6:06:28 - LMT 1895
+ -6:00 Canada C%sT 1940 Sep 29
+ -6:00 1:00 CDT 1942 Feb 9 2:00s
+ -6:00 Canada C%sT 1945 Sep 30 2:00
+ -5:00 - EST
+Rule Winn 1916 only - Apr 23 0:00 1:00 D
+Rule Winn 1916 only - Sep 17 0:00 0 S
+Rule Winn 1918 only - Apr 14 2:00 1:00 D
+Rule Winn 1918 only - Oct 31 2:00 0 S
+Rule Winn 1937 only - May 16 2:00 1:00 D
+Rule Winn 1937 only - Sep 26 2:00 0 S
+Rule Winn 1942 only - Feb 9 2:00 1:00 W # War
+Rule Winn 1945 only - Aug 14 23:00u 1:00 P # Peace
+Rule Winn 1945 only - Sep lastSun 2:00 0 S
+Rule Winn 1946 only - May 12 2:00 1:00 D
+Rule Winn 1946 only - Oct 13 2:00 0 S
+Rule Winn 1947 1949 - Apr lastSun 2:00 1:00 D
+Rule Winn 1947 1949 - Sep lastSun 2:00 0 S
+Rule Winn 1950 only - May 1 2:00 1:00 D
+Rule Winn 1950 only - Sep 30 2:00 0 S
+Rule Winn 1951 1960 - Apr lastSun 2:00 1:00 D
+Rule Winn 1951 1958 - Sep lastSun 2:00 0 S
+Rule Winn 1959 only - Oct lastSun 2:00 0 S
+Rule Winn 1960 only - Sep lastSun 2:00 0 S
+Rule Winn 1963 only - Apr lastSun 2:00 1:00 D
+Rule Winn 1963 only - Sep 22 2:00 0 S
+Rule Winn 1966 1986 - Apr lastSun 2:00s 1:00 D
+Rule Winn 1966 2005 - Oct lastSun 2:00s 0 S
+Rule Winn 1987 2005 - Apr Sun>=1 2:00s 1:00 D
+Zone America/Winnipeg -6:28:36 - LMT 1887 Jul 16
+ -6:00 Winn C%sT 2006
+ -6:00 Canada C%sT
+Rule Regina 1918 only - Apr 14 2:00 1:00 D
+Rule Regina 1918 only - Oct 31 2:00 0 S
+Rule Regina 1930 1934 - May Sun>=1 0:00 1:00 D
+Rule Regina 1930 1934 - Oct Sun>=1 0:00 0 S
+Rule Regina 1937 1941 - Apr Sun>=8 0:00 1:00 D
+Rule Regina 1937 only - Oct Sun>=8 0:00 0 S
+Rule Regina 1938 only - Oct Sun>=1 0:00 0 S
+Rule Regina 1939 1941 - Oct Sun>=8 0:00 0 S
+Rule Regina 1942 only - Feb 9 2:00 1:00 W # War
+Rule Regina 1945 only - Aug 14 23:00u 1:00 P # Peace
+Rule Regina 1945 only - Sep lastSun 2:00 0 S
+Rule Regina 1946 only - Apr Sun>=8 2:00 1:00 D
+Rule Regina 1946 only - Oct Sun>=8 2:00 0 S
+Rule Regina 1947 1957 - Apr lastSun 2:00 1:00 D
+Rule Regina 1947 1957 - Sep lastSun 2:00 0 S
+Rule Regina 1959 only - Apr lastSun 2:00 1:00 D
+Rule Regina 1959 only - Oct lastSun 2:00 0 S
+Rule Swift 1957 only - Apr lastSun 2:00 1:00 D
+Rule Swift 1957 only - Oct lastSun 2:00 0 S
+Rule Swift 1959 1961 - Apr lastSun 2:00 1:00 D
+Rule Swift 1959 only - Oct lastSun 2:00 0 S
+Rule Swift 1960 1961 - Sep lastSun 2:00 0 S
+Zone America/Regina -6:58:36 - LMT 1905 Sep
+ -7:00 Regina M%sT 1960 Apr lastSun 2:00
+ -6:00 - CST
+Zone America/Swift_Current -7:11:20 - LMT 1905 Sep
+ -7:00 Canada M%sT 1946 Apr lastSun 2:00
+ -7:00 Regina M%sT 1950
+ -7:00 Swift M%sT 1972 Apr lastSun 2:00
+ -6:00 - CST
+Rule Edm 1918 1919 - Apr Sun>=8 2:00 1:00 D
+Rule Edm 1918 only - Oct 31 2:00 0 S
+Rule Edm 1919 only - May 27 2:00 0 S
+Rule Edm 1920 1923 - Apr lastSun 2:00 1:00 D
+Rule Edm 1920 only - Oct lastSun 2:00 0 S
+Rule Edm 1921 1923 - Sep lastSun 2:00 0 S
+Rule Edm 1942 only - Feb 9 2:00 1:00 W # War
+Rule Edm 1945 only - Aug 14 23:00u 1:00 P # Peace
+Rule Edm 1945 only - Sep lastSun 2:00 0 S
+Rule Edm 1947 only - Apr lastSun 2:00 1:00 D
+Rule Edm 1947 only - Sep lastSun 2:00 0 S
+Rule Edm 1967 only - Apr lastSun 2:00 1:00 D
+Rule Edm 1967 only - Oct lastSun 2:00 0 S
+Rule Edm 1969 only - Apr lastSun 2:00 1:00 D
+Rule Edm 1969 only - Oct lastSun 2:00 0 S
+Rule Edm 1972 1986 - Apr lastSun 2:00 1:00 D
+Rule Edm 1972 2006 - Oct lastSun 2:00 0 S
+Zone America/Edmonton -7:33:52 - LMT 1906 Sep
+ -7:00 Edm M%sT 1987
+ -7:00 Canada M%sT
+Rule Vanc 1918 only - Apr 14 2:00 1:00 D
+Rule Vanc 1918 only - Oct 31 2:00 0 S
+Rule Vanc 1942 only - Feb 9 2:00 1:00 W # War
+Rule Vanc 1945 only - Aug 14 23:00u 1:00 P # Peace
+Rule Vanc 1945 only - Sep 30 2:00 0 S
+Rule Vanc 1946 1986 - Apr lastSun 2:00 1:00 D
+Rule Vanc 1946 only - Oct 13 2:00 0 S
+Rule Vanc 1947 1961 - Sep lastSun 2:00 0 S
+Rule Vanc 1962 2006 - Oct lastSun 2:00 0 S
+Zone America/Vancouver -8:12:28 - LMT 1884
+ -8:00 Vanc P%sT 1987
+ -8:00 Canada P%sT
+Zone America/Dawson_Creek -8:00:56 - LMT 1884
+ -8:00 Canada P%sT 1947
+ -8:00 Vanc P%sT 1972 Aug 30 2:00
+ -7:00 - MST
+Rule NT_YK 1918 only - Apr 14 2:00 1:00 D
+Rule NT_YK 1918 only - Oct 27 2:00 0 S
+Rule NT_YK 1919 only - May 25 2:00 1:00 D
+Rule NT_YK 1919 only - Nov 1 0:00 0 S
+Rule NT_YK 1942 only - Feb 9 2:00 1:00 W # War
+Rule NT_YK 1945 only - Aug 14 23:00u 1:00 P # Peace
+Rule NT_YK 1945 only - Sep 30 2:00 0 S
+Rule NT_YK 1965 only - Apr lastSun 0:00 2:00 DD
+Rule NT_YK 1965 only - Oct lastSun 2:00 0 S
+Rule NT_YK 1980 1986 - Apr lastSun 2:00 1:00 D
+Rule NT_YK 1980 2006 - Oct lastSun 2:00 0 S
+Rule NT_YK 1987 2006 - Apr Sun>=1 2:00 1:00 D
+Zone America/Pangnirtung 0 - zzz 1921 # trading post est.
+ -4:00 NT_YK A%sT 1995 Apr Sun>=1 2:00
+ -5:00 Canada E%sT 1999 Oct 31 2:00
+ -6:00 Canada C%sT 2000 Oct 29 2:00
+ -5:00 Canada E%sT
+Zone America/Iqaluit 0 - zzz 1942 Aug # Frobisher Bay est.
+ -5:00 NT_YK E%sT 1999 Oct 31 2:00
+ -6:00 Canada C%sT 2000 Oct 29 2:00
+ -5:00 Canada E%sT
+Rule Resolute 2006 max - Nov Sun>=1 2:00 0 ES
+Rule Resolute 2007 max - Mar Sun>=8 2:00 0 CD
+Zone America/Resolute 0 - zzz 1947 Aug 31 # Resolute founded
+ -6:00 NT_YK C%sT 2000 Oct 29 2:00
+ -5:00 - EST 2001 Apr 1 3:00
+ -6:00 Canada C%sT 2006 Oct 29 2:00
+ -5:00 Resolute %sT
+Zone America/Rankin_Inlet 0 - zzz 1957 # Rankin Inlet founded
+ -6:00 NT_YK C%sT 2000 Oct 29 2:00
+ -5:00 - EST 2001 Apr 1 3:00
+ -6:00 Canada C%sT
+Zone America/Cambridge_Bay 0 - zzz 1920 # trading post est.?
+ -7:00 NT_YK M%sT 1999 Oct 31 2:00
+ -6:00 Canada C%sT 2000 Oct 29 2:00
+ -5:00 - EST 2000 Nov 5 0:00
+ -6:00 - CST 2001 Apr 1 3:00
+ -7:00 Canada M%sT
+Zone America/Yellowknife 0 - zzz 1935 # Yellowknife founded?
+ -7:00 NT_YK M%sT 1980
+ -7:00 Canada M%sT
+Zone America/Inuvik 0 - zzz 1953 # Inuvik founded
+ -8:00 NT_YK P%sT 1979 Apr lastSun 2:00
+ -7:00 NT_YK M%sT 1980
+ -7:00 Canada M%sT
+Zone America/Whitehorse -9:00:12 - LMT 1900 Aug 20
+ -9:00 NT_YK Y%sT 1966 Jul 1 2:00
+ -8:00 NT_YK P%sT 1980
+ -8:00 Canada P%sT
+Zone America/Dawson -9:17:40 - LMT 1900 Aug 20
+ -9:00 NT_YK Y%sT 1973 Oct 28 0:00
+ -8:00 NT_YK P%sT 1980
+ -8:00 Canada P%sT
+Rule Mexico 1939 only - Feb 5 0:00 1:00 D
+Rule Mexico 1939 only - Jun 25 0:00 0 S
+Rule Mexico 1940 only - Dec 9 0:00 1:00 D
+Rule Mexico 1941 only - Apr 1 0:00 0 S
+Rule Mexico 1943 only - Dec 16 0:00 1:00 W # War
+Rule Mexico 1944 only - May 1 0:00 0 S
+Rule Mexico 1950 only - Feb 12 0:00 1:00 D
+Rule Mexico 1950 only - Jul 30 0:00 0 S
+Rule Mexico 1996 2000 - Apr Sun>=1 2:00 1:00 D
+Rule Mexico 1996 2000 - Oct lastSun 2:00 0 S
+Rule Mexico 2001 only - May Sun>=1 2:00 1:00 D
+Rule Mexico 2001 only - Sep lastSun 2:00 0 S
+Rule Mexico 2002 max - Apr Sun>=1 2:00 1:00 D
+Rule Mexico 2002 max - Oct lastSun 2:00 0 S
+Zone America/Cancun -5:47:04 - LMT 1922 Jan 1 0:12:56
+ -6:00 - CST 1981 Dec 23
+ -5:00 Mexico E%sT 1998 Aug 2 2:00
+ -6:00 Mexico C%sT
+Zone America/Merida -5:58:28 - LMT 1922 Jan 1 0:01:32
+ -6:00 - CST 1981 Dec 23
+ -5:00 - EST 1982 Dec 2
+ -6:00 Mexico C%sT
+Zone America/Monterrey -6:41:16 - LMT 1921 Dec 31 23:18:44
+ -6:00 - CST 1988
+ -6:00 US C%sT 1989
+ -6:00 Mexico C%sT
+Zone America/Mexico_City -6:36:36 - LMT 1922 Jan 1 0:23:24
+ -7:00 - MST 1927 Jun 10 23:00
+ -6:00 - CST 1930 Nov 15
+ -7:00 - MST 1931 May 1 23:00
+ -6:00 - CST 1931 Oct
+ -7:00 - MST 1932 Apr 1
+ -6:00 Mexico C%sT 2001 Sep 30 02:00
+ -6:00 - CST 2002 Feb 20
+ -6:00 Mexico C%sT
+Zone America/Chihuahua -7:04:20 - LMT 1921 Dec 31 23:55:40
+ -7:00 - MST 1927 Jun 10 23:00
+ -6:00 - CST 1930 Nov 15
+ -7:00 - MST 1931 May 1 23:00
+ -6:00 - CST 1931 Oct
+ -7:00 - MST 1932 Apr 1
+ -6:00 - CST 1996
+ -6:00 Mexico C%sT 1998
+ -6:00 - CST 1998 Apr Sun>=1 3:00
+ -7:00 Mexico M%sT
+Zone America/Hermosillo -7:23:52 - LMT 1921 Dec 31 23:36:08
+ -7:00 - MST 1927 Jun 10 23:00
+ -6:00 - CST 1930 Nov 15
+ -7:00 - MST 1931 May 1 23:00
+ -6:00 - CST 1931 Oct
+ -7:00 - MST 1932 Apr 1
+ -6:00 - CST 1942 Apr 24
+ -7:00 - MST 1949 Jan 14
+ -8:00 - PST 1970
+ -7:00 Mexico M%sT 1999
+ -7:00 - MST
+Zone America/Mazatlan -7:05:40 - LMT 1921 Dec 31 23:54:20
+ -7:00 - MST 1927 Jun 10 23:00
+ -6:00 - CST 1930 Nov 15
+ -7:00 - MST 1931 May 1 23:00
+ -6:00 - CST 1931 Oct
+ -7:00 - MST 1932 Apr 1
+ -6:00 - CST 1942 Apr 24
+ -7:00 - MST 1949 Jan 14
+ -8:00 - PST 1970
+ -7:00 Mexico M%sT
+Zone America/Tijuana -7:48:04 - LMT 1922 Jan 1 0:11:56
+ -7:00 - MST 1924
+ -8:00 - PST 1927 Jun 10 23:00
+ -7:00 - MST 1930 Nov 15
+ -8:00 - PST 1931 Apr 1
+ -8:00 1:00 PDT 1931 Sep 30
+ -8:00 - PST 1942 Apr 24
+ -8:00 1:00 PWT 1945 Aug 14 23:00u
+ -8:00 1:00 PPT 1945 Nov 12 # Peace
+ -8:00 - PST 1948 Apr 5
+ -8:00 1:00 PDT 1949 Jan 14
+ -8:00 - PST 1954
+ -8:00 CA P%sT 1961
+ -8:00 - PST 1976
+ -8:00 US P%sT 1996
+ -8:00 Mexico P%sT 2001
+ -8:00 US P%sT 2002 Feb 20
+ -8:00 Mexico P%sT
+Zone America/Anguilla -4:12:16 - LMT 1912 Mar 2
+ -4:00 - AST
+Zone America/Antigua -4:07:12 - LMT 1912 Mar 2
+ -5:00 - EST 1951
+ -4:00 - AST
+Rule Bahamas 1964 1975 - Oct lastSun 2:00 0 S
+Rule Bahamas 1964 1975 - Apr lastSun 2:00 1:00 D
+Zone America/Nassau -5:09:24 - LMT 1912 Mar 2
+ -5:00 Bahamas E%sT 1976
+ -5:00 US E%sT
+Rule Barb 1977 only - Jun 12 2:00 1:00 D
+Rule Barb 1977 1978 - Oct Sun>=1 2:00 0 S
+Rule Barb 1978 1980 - Apr Sun>=15 2:00 1:00 D
+Rule Barb 1979 only - Sep 30 2:00 0 S
+Rule Barb 1980 only - Sep 25 2:00 0 S
+Zone America/Barbados -3:58:28 - LMT 1924 # Bridgetown
+ -3:58:28 - BMT 1932 # Bridgetown Mean Time
+ -4:00 Barb A%sT
+Rule Belize 1918 1942 - Oct Sun>=2 0:00 0:30 HD
+Rule Belize 1919 1943 - Feb Sun>=9 0:00 0 S
+Rule Belize 1973 only - Dec 5 0:00 1:00 D
+Rule Belize 1974 only - Feb 9 0:00 0 S
+Rule Belize 1982 only - Dec 18 0:00 1:00 D
+Rule Belize 1983 only - Feb 12 0:00 0 S
+Zone America/Belize -5:52:48 - LMT 1912 Apr
+ -6:00 Belize C%sT
+Zone Atlantic/Bermuda -4:19:04 - LMT 1930 Jan 1 2:00 # Hamilton
+ -4:00 - AST 1974 Apr 28 2:00
+ -4:00 Bahamas A%sT 1976
+ -4:00 US A%sT
+Zone America/Cayman -5:25:32 - LMT 1890 # Georgetown
+ -5:07:12 - KMT 1912 Feb # Kingston Mean Time
+ -5:00 - EST
+Rule CR 1979 1980 - Feb lastSun 0:00 1:00 D
+Rule CR 1979 1980 - Jun Sun>=1 0:00 0 S
+Rule CR 1991 1992 - Jan Sat>=15 0:00 1:00 D
+Rule CR 1991 only - Jul 1 0:00 0 S
+Rule CR 1992 only - Mar 15 0:00 0 S
+Zone America/Costa_Rica -5:36:20 - LMT 1890 # San Jose
+ -5:36:20 - SJMT 1921 Jan 15 # San Jose Mean Time
+ -6:00 CR C%sT
+Rule Cuba 1928 only - Jun 10 0:00 1:00 D
+Rule Cuba 1928 only - Oct 10 0:00 0 S
+Rule Cuba 1940 1942 - Jun Sun>=1 0:00 1:00 D
+Rule Cuba 1940 1942 - Sep Sun>=1 0:00 0 S
+Rule Cuba 1945 1946 - Jun Sun>=1 0:00 1:00 D
+Rule Cuba 1945 1946 - Sep Sun>=1 0:00 0 S
+Rule Cuba 1965 only - Jun 1 0:00 1:00 D
+Rule Cuba 1965 only - Sep 30 0:00 0 S
+Rule Cuba 1966 only - May 29 0:00 1:00 D
+Rule Cuba 1966 only - Oct 2 0:00 0 S
+Rule Cuba 1967 only - Apr 8 0:00 1:00 D
+Rule Cuba 1967 1968 - Sep Sun>=8 0:00 0 S
+Rule Cuba 1968 only - Apr 14 0:00 1:00 D
+Rule Cuba 1969 1977 - Apr lastSun 0:00 1:00 D
+Rule Cuba 1969 1971 - Oct lastSun 0:00 0 S
+Rule Cuba 1972 1974 - Oct 8 0:00 0 S
+Rule Cuba 1975 1977 - Oct lastSun 0:00 0 S
+Rule Cuba 1978 only - May 7 0:00 1:00 D
+Rule Cuba 1978 1990 - Oct Sun>=8 0:00 0 S
+Rule Cuba 1979 1980 - Mar Sun>=15 0:00 1:00 D
+Rule Cuba 1981 1985 - May Sun>=5 0:00 1:00 D
+Rule Cuba 1986 1989 - Mar Sun>=14 0:00 1:00 D
+Rule Cuba 1990 1997 - Apr Sun>=1 0:00 1:00 D
+Rule Cuba 1991 1995 - Oct Sun>=8 0:00s 0 S
+Rule Cuba 1996 only - Oct 6 0:00s 0 S
+Rule Cuba 1997 only - Oct 12 0:00s 0 S
+Rule Cuba 1998 1999 - Mar lastSun 0:00s 1:00 D
+Rule Cuba 1998 2003 - Oct lastSun 0:00s 0 S
+Rule Cuba 2000 2004 - Apr Sun>=1 0:00s 1:00 D
+Rule Cuba 2006 max - Oct lastSun 0:00s 0 S
+Rule Cuba 2007 only - Mar Sun>=8 0:00s 1:00 D
+Rule Cuba 2008 only - Mar Sun>=15 0:00s 1:00 D
+Rule Cuba 2009 max - Mar Sun>=8 0:00s 1:00 D
+Zone America/Havana -5:29:28 - LMT 1890
+ -5:29:36 - HMT 1925 Jul 19 12:00 # Havana MT
+ -5:00 Cuba C%sT
+Zone America/Dominica -4:05:36 - LMT 1911 Jul 1 0:01 # Roseau
+ -4:00 - AST
+Rule DR 1966 only - Oct 30 0:00 1:00 D
+Rule DR 1967 only - Feb 28 0:00 0 S
+Rule DR 1969 1973 - Oct lastSun 0:00 0:30 HD
+Rule DR 1970 only - Feb 21 0:00 0 S
+Rule DR 1971 only - Jan 20 0:00 0 S
+Rule DR 1972 1974 - Jan 21 0:00 0 S
+Zone America/Santo_Domingo -4:39:36 - LMT 1890
+ -4:40 - SDMT 1933 Apr 1 12:00 # S. Dom. MT
+ -5:00 DR E%sT 1974 Oct 27
+ -4:00 - AST 2000 Oct 29 02:00
+ -5:00 US E%sT 2000 Dec 3 01:00
+ -4:00 - AST
+Rule Salv 1987 1988 - May Sun>=1 0:00 1:00 D
+Rule Salv 1987 1988 - Sep lastSun 0:00 0 S
+Zone America/El_Salvador -5:56:48 - LMT 1921 # San Salvador
+ -6:00 Salv C%sT
+Zone America/Grenada -4:07:00 - LMT 1911 Jul # St George's
+ -4:00 - AST
+Zone America/Guadeloupe -4:06:08 - LMT 1911 Jun 8 # Pointe a Pitre
+ -4:00 - AST
+Link America/Guadeloupe America/St_Barthelemy
+Link America/Guadeloupe America/Marigot
+Rule Guat 1973 only - Nov 25 0:00 1:00 D
+Rule Guat 1974 only - Feb 24 0:00 0 S
+Rule Guat 1983 only - May 21 0:00 1:00 D
+Rule Guat 1983 only - Sep 22 0:00 0 S
+Rule Guat 1991 only - Mar 23 0:00 1:00 D
+Rule Guat 1991 only - Sep 7 0:00 0 S
+Rule Guat 2006 only - Apr 30 0:00 1:00 D
+Rule Guat 2006 only - Oct 1 0:00 0 S
+Zone America/Guatemala -6:02:04 - LMT 1918 Oct 5
+ -6:00 Guat C%sT
+Rule Haiti 1983 only - May 8 0:00 1:00 D
+Rule Haiti 1984 1987 - Apr lastSun 0:00 1:00 D
+Rule Haiti 1983 1987 - Oct lastSun 0:00 0 S
+Rule Haiti 1988 1997 - Apr Sun>=1 1:00s 1:00 D
+Rule Haiti 1988 1997 - Oct lastSun 1:00s 0 S
+Rule Haiti 2005 2006 - Apr Sun>=1 0:00 1:00 D
+Rule Haiti 2005 2006 - Oct lastSun 0:00 0 S
+Zone America/Port-au-Prince -4:49:20 - LMT 1890
+ -4:49 - PPMT 1917 Jan 24 12:00 # P-a-P MT
+ -5:00 Haiti E%sT
+Rule Hond 1987 1988 - May Sun>=1 0:00 1:00 D
+Rule Hond 1987 1988 - Sep lastSun 0:00 0 S
+Rule Hond 2006 only - May Sun>=1 0:00 1:00 D
+Rule Hond 2006 only - Aug Mon>=1 0:00 0 S
+Zone America/Tegucigalpa -5:48:52 - LMT 1921 Apr
+ -6:00 Hond C%sT
+Zone America/Jamaica -5:07:12 - LMT 1890 # Kingston
+ -5:07:12 - KMT 1912 Feb # Kingston Mean Time
+ -5:00 - EST 1974 Apr 28 2:00
+ -5:00 US E%sT 1984
+ -5:00 - EST
+Zone America/Martinique -4:04:20 - LMT 1890 # Fort-de-France
+ -4:04:20 - FFMT 1911 May # Fort-de-France MT
+ -4:00 - AST 1980 Apr 6
+ -4:00 1:00 ADT 1980 Sep 28
+ -4:00 - AST
+Zone America/Montserrat -4:08:52 - LMT 1911 Jul 1 0:01 # Cork Hill
+ -4:00 - AST
+Rule Nic 1979 1980 - Mar Sun>=16 0:00 1:00 D
+Rule Nic 1979 1980 - Jun Mon>=23 0:00 0 S
+Rule Nic 2005 only - Apr 10 0:00 1:00 D
+Rule Nic 2005 only - Oct Sun>=1 0:00 0 S
+Rule Nic 2006 only - Apr 30 2:00 1:00 D
+Rule Nic 2006 only - Oct Sun>=1 1:00 0 S
+Zone America/Managua -5:45:08 - LMT 1890
+ -5:45:12 - MMT 1934 Jun 23 # Managua Mean Time?
+ -6:00 - CST 1973 May
+ -5:00 - EST 1975 Feb 16
+ -6:00 Nic C%sT 1992 Jan 1 4:00
+ -5:00 - EST 1992 Sep 24
+ -6:00 - CST 1993
+ -5:00 - EST 1997
+ -6:00 Nic C%sT
+Zone America/Panama -5:18:08 - LMT 1890
+ -5:19:36 - CMT 1908 Apr 22 # Colon Mean Time
+ -5:00 - EST
+Zone America/Puerto_Rico -4:24:25 - LMT 1899 Mar 28 12:00 # San Juan
+ -4:00 - AST 1942 May 3
+ -4:00 US A%sT 1946
+ -4:00 - AST
+Zone America/St_Kitts -4:10:52 - LMT 1912 Mar 2 # Basseterre
+ -4:00 - AST
+Zone America/St_Lucia -4:04:00 - LMT 1890 # Castries
+ -4:04:00 - CMT 1912 # Castries Mean Time
+ -4:00 - AST
+Zone America/Miquelon -3:44:40 - LMT 1911 May 15 # St Pierre
+ -4:00 - AST 1980 May
+ -3:00 - PMST 1987 # Pierre & Miquelon Time
+ -3:00 Canada PM%sT
+Zone America/St_Vincent -4:04:56 - LMT 1890 # Kingstown
+ -4:04:56 - KMT 1912 # Kingstown Mean Time
+ -4:00 - AST
+Rule TC 1979 1986 - Apr lastSun 2:00 1:00 D
+Rule TC 1979 2006 - Oct lastSun 2:00 0 S
+Rule TC 1987 2006 - Apr Sun>=1 2:00 1:00 D
+Rule TC 2007 max - Mar Sun>=8 2:00 1:00 D
+Rule TC 2007 max - Nov Sun>=1 2:00 0 S
+Zone America/Grand_Turk -4:44:32 - LMT 1890
+ -5:07:12 - KMT 1912 Feb # Kingston Mean Time
+ -5:00 TC E%sT
+Zone America/Tortola -4:18:28 - LMT 1911 Jul # Road Town
+ -4:00 - AST
+Zone America/St_Thomas -4:19:44 - LMT 1911 Jul # Charlotte Amalie
+ -4:00 - AST
diff --git a/js/dojo-1.7.2/dojox/date/zoneinfo/pacificnew b/js/dojo-1.7.2/dojox/date/zoneinfo/pacificnew
new file mode 100644
index 0000000..5a2988f
--- /dev/null
+++ b/js/dojo-1.7.2/dojox/date/zoneinfo/pacificnew
@@ -0,0 +1 @@
+Link America/Los_Angeles US/Pacific-New ##
diff --git a/js/dojo-1.7.2/dojox/date/zoneinfo/southamerica b/js/dojo-1.7.2/dojox/date/zoneinfo/southamerica
new file mode 100644
index 0000000..c0db4af
--- /dev/null
+++ b/js/dojo-1.7.2/dojox/date/zoneinfo/southamerica
@@ -0,0 +1,501 @@
+Rule Arg 1930 only - Dec 1 0:00 1:00 S
+Rule Arg 1931 only - Apr 1 0:00 0 -
+Rule Arg 1931 only - Oct 15 0:00 1:00 S
+Rule Arg 1932 1940 - Mar 1 0:00 0 -
+Rule Arg 1932 1939 - Nov 1 0:00 1:00 S
+Rule Arg 1940 only - Jul 1 0:00 1:00 S
+Rule Arg 1941 only - Jun 15 0:00 0 -
+Rule Arg 1941 only - Oct 15 0:00 1:00 S
+Rule Arg 1943 only - Aug 1 0:00 0 -
+Rule Arg 1943 only - Oct 15 0:00 1:00 S
+Rule Arg 1946 only - Mar 1 0:00 0 -
+Rule Arg 1946 only - Oct 1 0:00 1:00 S
+Rule Arg 1963 only - Oct 1 0:00 0 -
+Rule Arg 1963 only - Dec 15 0:00 1:00 S
+Rule Arg 1964 1966 - Mar 1 0:00 0 -
+Rule Arg 1964 1966 - Oct 15 0:00 1:00 S
+Rule Arg 1967 only - Apr 2 0:00 0 -
+Rule Arg 1967 1968 - Oct Sun>=1 0:00 1:00 S
+Rule Arg 1968 1969 - Apr Sun>=1 0:00 0 -
+Rule Arg 1974 only - Jan 23 0:00 1:00 S
+Rule Arg 1974 only - May 1 0:00 0 -
+Rule Arg 1988 only - Dec 1 0:00 1:00 S
+Rule Arg 1989 1993 - Mar Sun>=1 0:00 0 -
+Rule Arg 1989 1992 - Oct Sun>=15 0:00 1:00 S
+Rule Arg 1999 only - Oct Sun>=1 0:00 1:00 S
+Rule Arg 2000 only - Mar 3 0:00 0 -
+Rule Arg 2007 only - Dec 30 0:00 1:00 S
+Rule Arg 2008 max - Mar Sun>=15 0:00 0 -
+Rule Arg 2008 max - Oct Sun>=15 0:00 1:00 S
+
+Zone America/Argentina/Buenos_Aires -3:53:48 - LMT 1894 Oct 31
+ -4:16:48 - CMT 1920 May # Cordoba Mean Time
+ -4:00 - ART 1930 Dec
+ -4:00 Arg AR%sT 1969 Oct 5
+ -3:00 Arg AR%sT 1999 Oct 3
+ -4:00 Arg AR%sT 2000 Mar 3
+ -3:00 Arg AR%sT
+Zone America/Argentina/Cordoba -4:16:48 - LMT 1894 Oct 31
+ -4:16:48 - CMT 1920 May
+ -4:00 - ART 1930 Dec
+ -4:00 Arg AR%sT 1969 Oct 5
+ -3:00 Arg AR%sT 1991 Mar 3
+ -4:00 - WART 1991 Oct 20
+ -3:00 Arg AR%sT 1999 Oct 3
+ -4:00 Arg AR%sT 2000 Mar 3
+ -3:00 Arg AR%sT
+Zone America/Argentina/Salta -4:21:40 - LMT 1894 Oct 31
+ -4:16:48 - CMT 1920 May
+ -4:00 - ART 1930 Dec
+ -4:00 Arg AR%sT 1969 Oct 5
+ -3:00 Arg AR%sT 1991 Mar 3
+ -4:00 - WART 1991 Oct 20
+ -3:00 Arg AR%sT 1999 Oct 3
+ -4:00 Arg AR%sT 2000 Mar 3
+ -3:00 Arg AR%sT 2008 Oct 18
+ -3:00 - ART
+Zone America/Argentina/Tucuman -4:20:52 - LMT 1894 Oct 31
+ -4:16:48 - CMT 1920 May
+ -4:00 - ART 1930 Dec
+ -4:00 Arg AR%sT 1969 Oct 5
+ -3:00 Arg AR%sT 1991 Mar 3
+ -4:00 - WART 1991 Oct 20
+ -3:00 Arg AR%sT 1999 Oct 3
+ -4:00 Arg AR%sT 2000 Mar 3
+ -3:00 - ART 2004 Jun 1
+ -4:00 - WART 2004 Jun 13
+ -3:00 Arg AR%sT
+Zone America/Argentina/La_Rioja -4:27:24 - LMT 1894 Oct 31
+ -4:16:48 - CMT 1920 May
+ -4:00 - ART 1930 Dec
+ -4:00 Arg AR%sT 1969 Oct 5
+ -3:00 Arg AR%sT 1991 Mar 1
+ -4:00 - WART 1991 May 7
+ -3:00 Arg AR%sT 1999 Oct 3
+ -4:00 Arg AR%sT 2000 Mar 3
+ -3:00 - ART 2004 Jun 1
+ -4:00 - WART 2004 Jun 20
+ -3:00 Arg AR%sT 2008 Oct 18
+ -3:00 - ART
+Zone America/Argentina/San_Juan -4:34:04 - LMT 1894 Oct 31
+ -4:16:48 - CMT 1920 May
+ -4:00 - ART 1930 Dec
+ -4:00 Arg AR%sT 1969 Oct 5
+ -3:00 Arg AR%sT 1991 Mar 1
+ -4:00 - WART 1991 May 7
+ -3:00 Arg AR%sT 1999 Oct 3
+ -4:00 Arg AR%sT 2000 Mar 3
+ -3:00 - ART 2004 May 31
+ -4:00 - WART 2004 Jul 25
+ -3:00 Arg AR%sT 2008 Oct 18
+ -3:00 - ART
+Zone America/Argentina/Jujuy -4:21:12 - LMT 1894 Oct 31
+ -4:16:48 - CMT 1920 May
+ -4:00 - ART 1930 Dec
+ -4:00 Arg AR%sT 1969 Oct 5
+ -3:00 Arg AR%sT 1990 Mar 4
+ -4:00 - WART 1990 Oct 28
+ -4:00 1:00 WARST 1991 Mar 17
+ -4:00 - WART 1991 Oct 6
+ -3:00 1:00 ARST 1992
+ -3:00 Arg AR%sT 1999 Oct 3
+ -4:00 Arg AR%sT 2000 Mar 3
+ -3:00 Arg AR%sT 2008 Oct 18
+ -3:00 - ART
+Zone America/Argentina/Catamarca -4:23:08 - LMT 1894 Oct 31
+ -4:16:48 - CMT 1920 May
+ -4:00 - ART 1930 Dec
+ -4:00 Arg AR%sT 1969 Oct 5
+ -3:00 Arg AR%sT 1991 Mar 3
+ -4:00 - WART 1991 Oct 20
+ -3:00 Arg AR%sT 1999 Oct 3
+ -4:00 Arg AR%sT 2000 Mar 3
+ -3:00 - ART 2004 Jun 1
+ -4:00 - WART 2004 Jun 20
+ -3:00 Arg AR%sT 2008 Oct 18
+ -3:00 - ART
+Zone America/Argentina/Mendoza -4:35:16 - LMT 1894 Oct 31
+ -4:16:48 - CMT 1920 May
+ -4:00 - ART 1930 Dec
+ -4:00 Arg AR%sT 1969 Oct 5
+ -3:00 Arg AR%sT 1990 Mar 4
+ -4:00 - WART 1990 Oct 15
+ -4:00 1:00 WARST 1991 Mar 1
+ -4:00 - WART 1991 Oct 15
+ -4:00 1:00 WARST 1992 Mar 1
+ -4:00 - WART 1992 Oct 18
+ -3:00 Arg AR%sT 1999 Oct 3
+ -4:00 Arg AR%sT 2000 Mar 3
+ -3:00 - ART 2004 May 23
+ -4:00 - WART 2004 Sep 26
+ -3:00 Arg AR%sT 2008 Oct 18
+ -3:00 - ART
+Zone America/Argentina/San_Luis -4:25:24 - LMT 1894 Oct 31
+ -4:16:48 - CMT 1920 May
+ -4:00 - ART 1930 Dec
+ -4:00 Arg AR%sT 1969 Oct 5
+ -3:00 Arg AR%sT 1990
+ -3:00 1:00 ARST 1990 Mar 14
+ -4:00 - WART 1990 Oct 15
+ -4:00 1:00 WARST 1991 Mar 1
+ -4:00 - WART 1991 Jun 1
+ -3:00 - ART 1999 Oct 3
+ -4:00 1:00 WARST 2000 Mar 3
+ -3:00 - ART 2004 May 31
+ -4:00 - WART 2004 Jul 25
+ -3:00 Arg AR%sT 2008 Jan 21
+ -3:00 - ART 2009 Mar 15
+ -4:00 Arg WAR%sT
+Zone America/Argentina/Rio_Gallegos -4:36:52 - LMT 1894 Oct 31
+ -4:16:48 - CMT 1920 May # Cordoba Mean Time
+ -4:00 - ART 1930 Dec
+ -4:00 Arg AR%sT 1969 Oct 5
+ -3:00 Arg AR%sT 1999 Oct 3
+ -4:00 Arg AR%sT 2000 Mar 3
+ -3:00 - ART 2004 Jun 1
+ -4:00 - WART 2004 Jun 20
+ -3:00 Arg AR%sT 2008 Oct 18
+ -3:00 - ART
+Zone America/Argentina/Ushuaia -4:33:12 - LMT 1894 Oct 31
+ -4:16:48 - CMT 1920 May # Cordoba Mean Time
+ -4:00 - ART 1930 Dec
+ -4:00 Arg AR%sT 1969 Oct 5
+ -3:00 Arg AR%sT 1999 Oct 3
+ -4:00 Arg AR%sT 2000 Mar 3
+ -3:00 - ART 2004 May 30
+ -4:00 - WART 2004 Jun 20
+ -3:00 Arg AR%sT 2008 Oct 18
+ -3:00 - ART
+Zone America/Aruba -4:40:24 - LMT 1912 Feb 12 # Oranjestad
+ -4:30 - ANT 1965 # Netherlands Antilles Time
+ -4:00 - AST
+Zone America/La_Paz -4:32:36 - LMT 1890
+ -4:32:36 - CMT 1931 Oct 15 # Calamarca MT
+ -4:32:36 1:00 BOST 1932 Mar 21 # Bolivia ST
+ -4:00 - BOT # Bolivia Time
+Rule Brazil 1931 only - Oct 3 11:00 1:00 S
+Rule Brazil 1932 1933 - Apr 1 0:00 0 -
+Rule Brazil 1932 only - Oct 3 0:00 1:00 S
+Rule Brazil 1949 1952 - Dec 1 0:00 1:00 S
+Rule Brazil 1950 only - Apr 16 1:00 0 -
+Rule Brazil 1951 1952 - Apr 1 0:00 0 -
+Rule Brazil 1953 only - Mar 1 0:00 0 -
+Rule Brazil 1963 only - Dec 9 0:00 1:00 S
+Rule Brazil 1964 only - Mar 1 0:00 0 -
+Rule Brazil 1965 only - Jan 31 0:00 1:00 S
+Rule Brazil 1965 only - Mar 31 0:00 0 -
+Rule Brazil 1965 only - Dec 1 0:00 1:00 S
+Rule Brazil 1966 1968 - Mar 1 0:00 0 -
+Rule Brazil 1966 1967 - Nov 1 0:00 1:00 S
+Rule Brazil 1985 only - Nov 2 0:00 1:00 S
+Rule Brazil 1986 only - Mar 15 0:00 0 -
+Rule Brazil 1986 only - Oct 25 0:00 1:00 S
+Rule Brazil 1987 only - Feb 14 0:00 0 -
+Rule Brazil 1987 only - Oct 25 0:00 1:00 S
+Rule Brazil 1988 only - Feb 7 0:00 0 -
+Rule Brazil 1988 only - Oct 16 0:00 1:00 S
+Rule Brazil 1989 only - Jan 29 0:00 0 -
+Rule Brazil 1989 only - Oct 15 0:00 1:00 S
+Rule Brazil 1990 only - Feb 11 0:00 0 -
+Rule Brazil 1990 only - Oct 21 0:00 1:00 S
+Rule Brazil 1991 only - Feb 17 0:00 0 -
+Rule Brazil 1991 only - Oct 20 0:00 1:00 S
+Rule Brazil 1992 only - Feb 9 0:00 0 -
+Rule Brazil 1992 only - Oct 25 0:00 1:00 S
+Rule Brazil 1993 only - Jan 31 0:00 0 -
+Rule Brazil 1993 1995 - Oct Sun>=11 0:00 1:00 S
+Rule Brazil 1994 1995 - Feb Sun>=15 0:00 0 -
+Rule Brazil 1996 only - Feb 11 0:00 0 -
+Rule Brazil 1996 only - Oct 6 0:00 1:00 S
+Rule Brazil 1997 only - Feb 16 0:00 0 -
+Rule Brazil 1997 only - Oct 6 0:00 1:00 S
+Rule Brazil 1998 only - Mar 1 0:00 0 -
+Rule Brazil 1998 only - Oct 11 0:00 1:00 S
+Rule Brazil 1999 only - Feb 21 0:00 0 -
+Rule Brazil 1999 only - Oct 3 0:00 1:00 S
+Rule Brazil 2000 only - Feb 27 0:00 0 -
+Rule Brazil 2000 2001 - Oct Sun>=8 0:00 1:00 S
+Rule Brazil 2001 2006 - Feb Sun>=15 0:00 0 -
+Rule Brazil 2002 only - Nov 3 0:00 1:00 S
+Rule Brazil 2003 only - Oct 19 0:00 1:00 S
+Rule Brazil 2004 only - Nov 2 0:00 1:00 S
+Rule Brazil 2005 only - Oct 16 0:00 1:00 S
+Rule Brazil 2006 only - Nov 5 0:00 1:00 S
+Rule Brazil 2007 only - Feb 25 0:00 0 -
+Rule Brazil 2007 only - Oct Sun>=8 0:00 1:00 S
+Rule Brazil 2008 max - Oct Sun>=15 0:00 1:00 S
+Rule Brazil 2008 2011 - Feb Sun>=15 0:00 0 -
+Rule Brazil 2012 only - Feb Sun>=22 0:00 0 -
+Rule Brazil 2013 2014 - Feb Sun>=15 0:00 0 -
+Rule Brazil 2015 only - Feb Sun>=22 0:00 0 -
+Rule Brazil 2016 2022 - Feb Sun>=15 0:00 0 -
+Rule Brazil 2023 only - Feb Sun>=22 0:00 0 -
+Rule Brazil 2024 2025 - Feb Sun>=15 0:00 0 -
+Rule Brazil 2026 only - Feb Sun>=22 0:00 0 -
+Rule Brazil 2027 2033 - Feb Sun>=15 0:00 0 -
+Rule Brazil 2034 only - Feb Sun>=22 0:00 0 -
+Rule Brazil 2035 2036 - Feb Sun>=15 0:00 0 -
+Rule Brazil 2037 only - Feb Sun>=22 0:00 0 -
+Rule Brazil 2038 max - Feb Sun>=15 0:00 0 -
+Zone America/Noronha -2:09:40 - LMT 1914
+ -2:00 Brazil FN%sT 1990 Sep 17
+ -2:00 - FNT 1999 Sep 30
+ -2:00 Brazil FN%sT 2000 Oct 15
+ -2:00 - FNT 2001 Sep 13
+ -2:00 Brazil FN%sT 2002 Oct 1
+ -2:00 - FNT
+Zone America/Belem -3:13:56 - LMT 1914
+ -3:00 Brazil BR%sT 1988 Sep 12
+ -3:00 - BRT
+Zone America/Santarem -3:38:48 - LMT 1914
+ -4:00 Brazil AM%sT 1988 Sep 12
+ -4:00 - AMT 2008 Jun 24 00:00
+ -3:00 - BRT
+Zone America/Fortaleza -2:34:00 - LMT 1914
+ -3:00 Brazil BR%sT 1990 Sep 17
+ -3:00 - BRT 1999 Sep 30
+ -3:00 Brazil BR%sT 2000 Oct 22
+ -3:00 - BRT 2001 Sep 13
+ -3:00 Brazil BR%sT 2002 Oct 1
+ -3:00 - BRT
+Zone America/Recife -2:19:36 - LMT 1914
+ -3:00 Brazil BR%sT 1990 Sep 17
+ -3:00 - BRT 1999 Sep 30
+ -3:00 Brazil BR%sT 2000 Oct 15
+ -3:00 - BRT 2001 Sep 13
+ -3:00 Brazil BR%sT 2002 Oct 1
+ -3:00 - BRT
+Zone America/Araguaina -3:12:48 - LMT 1914
+ -3:00 Brazil BR%sT 1990 Sep 17
+ -3:00 - BRT 1995 Sep 14
+ -3:00 Brazil BR%sT 2003 Sep 24
+ -3:00 - BRT
+Zone America/Maceio -2:22:52 - LMT 1914
+ -3:00 Brazil BR%sT 1990 Sep 17
+ -3:00 - BRT 1995 Oct 13
+ -3:00 Brazil BR%sT 1996 Sep 4
+ -3:00 - BRT 1999 Sep 30
+ -3:00 Brazil BR%sT 2000 Oct 22
+ -3:00 - BRT 2001 Sep 13
+ -3:00 Brazil BR%sT 2002 Oct 1
+ -3:00 - BRT
+Zone America/Bahia -2:34:04 - LMT 1914
+ -3:00 Brazil BR%sT 2003 Sep 24
+ -3:00 - BRT
+Zone America/Sao_Paulo -3:06:28 - LMT 1914
+ -3:00 Brazil BR%sT 1963 Oct 23 00:00
+ -3:00 1:00 BRST 1964
+ -3:00 Brazil BR%sT
+Zone America/Campo_Grande -3:38:28 - LMT 1914
+ -4:00 Brazil AM%sT
+Zone America/Cuiaba -3:44:20 - LMT 1914
+ -4:00 Brazil AM%sT 2003 Sep 24
+ -4:00 - AMT 2004 Oct 1
+ -4:00 Brazil AM%sT
+Zone America/Porto_Velho -4:15:36 - LMT 1914
+ -4:00 Brazil AM%sT 1988 Sep 12
+ -4:00 - AMT
+Zone America/Boa_Vista -4:02:40 - LMT 1914
+ -4:00 Brazil AM%sT 1988 Sep 12
+ -4:00 - AMT 1999 Sep 30
+ -4:00 Brazil AM%sT 2000 Oct 15
+ -4:00 - AMT
+Zone America/Manaus -4:00:04 - LMT 1914
+ -4:00 Brazil AM%sT 1988 Sep 12
+ -4:00 - AMT 1993 Sep 28
+ -4:00 Brazil AM%sT 1994 Sep 22
+ -4:00 - AMT
+Zone America/Eirunepe -4:39:28 - LMT 1914
+ -5:00 Brazil AC%sT 1988 Sep 12
+ -5:00 - ACT 1993 Sep 28
+ -5:00 Brazil AC%sT 1994 Sep 22
+ -5:00 - ACT 2008 Jun 24 00:00
+ -4:00 - AMT
+Zone America/Rio_Branco -4:31:12 - LMT 1914
+ -5:00 Brazil AC%sT 1988 Sep 12
+ -5:00 - ACT 2008 Jun 24 00:00
+ -4:00 - AMT
+Rule Chile 1927 1932 - Sep 1 0:00 1:00 S
+Rule Chile 1928 1932 - Apr 1 0:00 0 -
+Rule Chile 1942 only - Jun 1 4:00u 0 -
+Rule Chile 1942 only - Aug 1 5:00u 1:00 S
+Rule Chile 1946 only - Jul 15 4:00u 1:00 S
+Rule Chile 1946 only - Sep 1 3:00u 0:00 -
+Rule Chile 1947 only - Apr 1 4:00u 0 -
+Rule Chile 1968 only - Nov 3 4:00u 1:00 S
+Rule Chile 1969 only - Mar 30 3:00u 0 -
+Rule Chile 1969 only - Nov 23 4:00u 1:00 S
+Rule Chile 1970 only - Mar 29 3:00u 0 -
+Rule Chile 1971 only - Mar 14 3:00u 0 -
+Rule Chile 1970 1972 - Oct Sun>=9 4:00u 1:00 S
+Rule Chile 1972 1986 - Mar Sun>=9 3:00u 0 -
+Rule Chile 1973 only - Sep 30 4:00u 1:00 S
+Rule Chile 1974 1987 - Oct Sun>=9 4:00u 1:00 S
+Rule Chile 1987 only - Apr 12 3:00u 0 -
+Rule Chile 1988 1989 - Mar Sun>=9 3:00u 0 -
+Rule Chile 1988 only - Oct Sun>=1 4:00u 1:00 S
+Rule Chile 1989 only - Oct Sun>=9 4:00u 1:00 S
+Rule Chile 1990 only - Mar 18 3:00u 0 -
+Rule Chile 1990 only - Sep 16 4:00u 1:00 S
+Rule Chile 1991 1996 - Mar Sun>=9 3:00u 0 -
+Rule Chile 1991 1997 - Oct Sun>=9 4:00u 1:00 S
+Rule Chile 1997 only - Mar 30 3:00u 0 -
+Rule Chile 1998 only - Mar Sun>=9 3:00u 0 -
+Rule Chile 1998 only - Sep 27 4:00u 1:00 S
+Rule Chile 1999 only - Apr 4 3:00u 0 -
+Rule Chile 1999 max - Oct Sun>=9 4:00u 1:00 S
+Rule Chile 2000 2007 - Mar Sun>=9 3:00u 0 -
+Rule Chile 2008 only - Mar 30 3:00u 0 -
+Rule Chile 2009 max - Mar Sun>=9 3:00u 0 -
+Zone America/Santiago -4:42:46 - LMT 1890
+ -4:42:46 - SMT 1910 # Santiago Mean Time
+ -5:00 - CLT 1916 Jul 1 # Chile Time
+ -4:42:46 - SMT 1918 Sep 1 # Santiago Mean Time
+ -4:00 - CLT 1919 Jul 1 # Chile Time
+ -4:42:46 - SMT 1927 Sep 1 # Santiago Mean Time
+ -5:00 Chile CL%sT 1947 May 22 # Chile Time
+ -4:00 Chile CL%sT
+Zone Pacific/Easter -7:17:44 - LMT 1890
+ -7:17:28 - EMT 1932 Sep # Easter Mean Time
+ -7:00 Chile EAS%sT 1982 Mar 13 21:00 # Easter I Time
+ -6:00 Chile EAS%sT
+Rule CO 1992 only - May 3 0:00 1:00 S
+Rule CO 1993 only - Apr 4 0:00 0 -
+Zone America/Bogota -4:56:20 - LMT 1884 Mar 13
+ -4:56:20 - BMT 1914 Nov 23 # Bogota Mean Time
+ -5:00 CO CO%sT # Colombia Time
+Zone America/Curacao -4:35:44 - LMT 1912 Feb 12 # Willemstad
+ -4:30 - ANT 1965 # Netherlands Antilles Time
+ -4:00 - AST
+Zone America/Guayaquil -5:19:20 - LMT 1890
+ -5:14:00 - QMT 1931 # Quito Mean Time
+ -5:00 - ECT # Ecuador Time
+Zone Pacific/Galapagos -5:58:24 - LMT 1931 # Puerto Baquerizo Moreno
+ -5:00 - ECT 1986
+ -6:00 - GALT # Galapagos Time
+Rule Falk 1937 1938 - Sep lastSun 0:00 1:00 S
+Rule Falk 1938 1942 - Mar Sun>=19 0:00 0 -
+Rule Falk 1939 only - Oct 1 0:00 1:00 S
+Rule Falk 1940 1942 - Sep lastSun 0:00 1:00 S
+Rule Falk 1943 only - Jan 1 0:00 0 -
+Rule Falk 1983 only - Sep lastSun 0:00 1:00 S
+Rule Falk 1984 1985 - Apr lastSun 0:00 0 -
+Rule Falk 1984 only - Sep 16 0:00 1:00 S
+Rule Falk 1985 2000 - Sep Sun>=9 0:00 1:00 S
+Rule Falk 1986 2000 - Apr Sun>=16 0:00 0 -
+Rule Falk 2001 max - Apr Sun>=15 2:00 0 -
+Rule Falk 2001 max - Sep Sun>=1 2:00 1:00 S
+Zone Atlantic/Stanley -3:51:24 - LMT 1890
+ -3:51:24 - SMT 1912 Mar 12 # Stanley Mean Time
+ -4:00 Falk FK%sT 1983 May # Falkland Is Time
+ -3:00 Falk FK%sT 1985 Sep 15
+ -4:00 Falk FK%sT
+Zone America/Cayenne -3:29:20 - LMT 1911 Jul
+ -4:00 - GFT 1967 Oct # French Guiana Time
+ -3:00 - GFT
+Zone America/Guyana -3:52:40 - LMT 1915 Mar # Georgetown
+ -3:45 - GBGT 1966 May 26 # Br Guiana Time
+ -3:45 - GYT 1975 Jul 31 # Guyana Time
+ -3:00 - GYT 1991
+ -4:00 - GYT
+Rule Para 1975 1988 - Oct 1 0:00 1:00 S
+Rule Para 1975 1978 - Mar 1 0:00 0 -
+Rule Para 1979 1991 - Apr 1 0:00 0 -
+Rule Para 1989 only - Oct 22 0:00 1:00 S
+Rule Para 1990 only - Oct 1 0:00 1:00 S
+Rule Para 1991 only - Oct 6 0:00 1:00 S
+Rule Para 1992 only - Mar 1 0:00 0 -
+Rule Para 1992 only - Oct 5 0:00 1:00 S
+Rule Para 1993 only - Mar 31 0:00 0 -
+Rule Para 1993 1995 - Oct 1 0:00 1:00 S
+Rule Para 1994 1995 - Feb lastSun 0:00 0 -
+Rule Para 1996 only - Mar 1 0:00 0 -
+Rule Para 1996 2001 - Oct Sun>=1 0:00 1:00 S
+Rule Para 1997 only - Feb lastSun 0:00 0 -
+Rule Para 1998 2001 - Mar Sun>=1 0:00 0 -
+Rule Para 2002 2004 - Apr Sun>=1 0:00 0 -
+Rule Para 2002 2003 - Sep Sun>=1 0:00 1:00 S
+Rule Para 2004 max - Oct Sun>=15 0:00 1:00 S
+Rule Para 2005 max - Mar Sun>=8 0:00 0 -
+Zone America/Asuncion -3:50:40 - LMT 1890
+ -3:50:40 - AMT 1931 Oct 10 # Asuncion Mean Time
+ -4:00 - PYT 1972 Oct # Paraguay Time
+ -3:00 - PYT 1974 Apr
+ -4:00 Para PY%sT
+Rule Peru 1938 only - Jan 1 0:00 1:00 S
+Rule Peru 1938 only - Apr 1 0:00 0 -
+Rule Peru 1938 1939 - Sep lastSun 0:00 1:00 S
+Rule Peru 1939 1940 - Mar Sun>=24 0:00 0 -
+Rule Peru 1986 1987 - Jan 1 0:00 1:00 S
+Rule Peru 1986 1987 - Apr 1 0:00 0 -
+Rule Peru 1990 only - Jan 1 0:00 1:00 S
+Rule Peru 1990 only - Apr 1 0:00 0 -
+Rule Peru 1994 only - Jan 1 0:00 1:00 S
+Rule Peru 1994 only - Apr 1 0:00 0 -
+Zone America/Lima -5:08:12 - LMT 1890
+ -5:08:36 - LMT 1908 Jul 28 # Lima Mean Time?
+ -5:00 Peru PE%sT # Peru Time
+Zone Atlantic/South_Georgia -2:26:08 - LMT 1890 # Grytviken
+ -2:00 - GST # South Georgia Time
+Zone America/Paramaribo -3:40:40 - LMT 1911
+ -3:40:52 - PMT 1935 # Paramaribo Mean Time
+ -3:40:36 - PMT 1945 Oct # The capital moved?
+ -3:30 - NEGT 1975 Nov 20 # Dutch Guiana Time
+ -3:30 - SRT 1984 Oct # Suriname Time
+ -3:00 - SRT
+Zone America/Port_of_Spain -4:06:04 - LMT 1912 Mar 2
+ -4:00 - AST
+Rule Uruguay 1923 only - Oct 2 0:00 0:30 HS
+Rule Uruguay 1924 1926 - Apr 1 0:00 0 -
+Rule Uruguay 1924 1925 - Oct 1 0:00 0:30 HS
+Rule Uruguay 1933 1935 - Oct lastSun 0:00 0:30 HS
+Rule Uruguay 1934 1936 - Mar Sat>=25 23:30s 0 -
+Rule Uruguay 1936 only - Nov 1 0:00 0:30 HS
+Rule Uruguay 1937 1941 - Mar lastSun 0:00 0 -
+Rule Uruguay 1937 1940 - Oct lastSun 0:00 0:30 HS
+Rule Uruguay 1941 only - Aug 1 0:00 0:30 HS
+Rule Uruguay 1942 only - Jan 1 0:00 0 -
+Rule Uruguay 1942 only - Dec 14 0:00 1:00 S
+Rule Uruguay 1943 only - Mar 14 0:00 0 -
+Rule Uruguay 1959 only - May 24 0:00 1:00 S
+Rule Uruguay 1959 only - Nov 15 0:00 0 -
+Rule Uruguay 1960 only - Jan 17 0:00 1:00 S
+Rule Uruguay 1960 only - Mar 6 0:00 0 -
+Rule Uruguay 1965 1967 - Apr Sun>=1 0:00 1:00 S
+Rule Uruguay 1965 only - Sep 26 0:00 0 -
+Rule Uruguay 1966 1967 - Oct 31 0:00 0 -
+Rule Uruguay 1968 1970 - May 27 0:00 0:30 HS
+Rule Uruguay 1968 1970 - Dec 2 0:00 0 -
+Rule Uruguay 1972 only - Apr 24 0:00 1:00 S
+Rule Uruguay 1972 only - Aug 15 0:00 0 -
+Rule Uruguay 1974 only - Mar 10 0:00 0:30 HS
+Rule Uruguay 1974 only - Dec 22 0:00 1:00 S
+Rule Uruguay 1976 only - Oct 1 0:00 0 -
+Rule Uruguay 1977 only - Dec 4 0:00 1:00 S
+Rule Uruguay 1978 only - Apr 1 0:00 0 -
+Rule Uruguay 1979 only - Oct 1 0:00 1:00 S
+Rule Uruguay 1980 only - May 1 0:00 0 -
+Rule Uruguay 1987 only - Dec 14 0:00 1:00 S
+Rule Uruguay 1988 only - Mar 14 0:00 0 -
+Rule Uruguay 1988 only - Dec 11 0:00 1:00 S
+Rule Uruguay 1989 only - Mar 12 0:00 0 -
+Rule Uruguay 1989 only - Oct 29 0:00 1:00 S
+Rule Uruguay 1990 1992 - Mar Sun>=1 0:00 0 -
+Rule Uruguay 1990 1991 - Oct Sun>=21 0:00 1:00 S
+Rule Uruguay 1992 only - Oct 18 0:00 1:00 S
+Rule Uruguay 1993 only - Feb 28 0:00 0 -
+Rule Uruguay 2004 only - Sep 19 0:00 1:00 S
+Rule Uruguay 2005 only - Mar 27 2:00 0 -
+Rule Uruguay 2005 only - Oct 9 2:00 1:00 S
+Rule Uruguay 2006 only - Mar 12 2:00 0 -
+Rule Uruguay 2006 max - Oct Sun>=1 2:00 1:00 S
+Rule Uruguay 2007 max - Mar Sun>=8 2:00 0 -
+Zone America/Montevideo -3:44:44 - LMT 1898 Jun 28
+ -3:44:44 - MMT 1920 May 1 # Montevideo MT
+ -3:30 Uruguay UY%sT 1942 Dec 14 # Uruguay Time
+ -3:00 Uruguay UY%sT
+Zone America/Caracas -4:27:44 - LMT 1890
+ -4:27:40 - CMT 1912 Feb 12 # Caracas Mean Time?
+ -4:30 - VET 1965 # Venezuela Time
+ -4:00 - VET 2007 Dec 9 03:00
+ -4:30 - VET