conschedule 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +154 -0
  4. data/Rakefile +37 -0
  5. data/app/assets/config/conschedule_manifest.js +2 -0
  6. data/app/assets/fonts/icomoon.eot +0 -0
  7. data/app/assets/fonts/proxima_nova_100.eot +0 -0
  8. data/app/assets/fonts/proxima_nova_400.eot +0 -0
  9. data/app/assets/fonts/proxima_nova_700.eot +0 -0
  10. data/app/assets/images/conschedule/chosen-sprite-small.png +0 -0
  11. data/app/assets/images/conschedule/chosen-sprite.png +0 -0
  12. data/app/assets/images/conschedule/close.png +0 -0
  13. data/app/assets/images/conschedule/spinner-small.gif +0 -0
  14. data/app/assets/images/conschedule/spinner.gif +0 -0
  15. data/app/assets/javascripts/conschedule/application.js +22 -0
  16. data/app/assets/javascripts/conschedule/calendar.js +467 -0
  17. data/app/assets/javascripts/conschedule/date.js +104 -0
  18. data/app/assets/javascripts/conschedule/form.js +53 -0
  19. data/app/assets/javascripts/conschedule/home.js +149 -0
  20. data/app/assets/javascripts/conschedule/jquery-ui-datepicker.min.js +1674 -0
  21. data/app/assets/javascripts/conschedule/jquery.easing.min.js +44 -0
  22. data/app/assets/javascripts/conschedule/jquery.validate.js +1532 -0
  23. data/app/assets/javascripts/conschedule/js_time_zone.js +1433 -0
  24. data/app/assets/javascripts/conschedule/moment-timezone.js +1209 -0
  25. data/app/assets/javascripts/conschedule/moment.js +4195 -0
  26. data/app/assets/javascripts/conschedule/schedules.js +22 -0
  27. data/app/assets/javascripts/conschedule/time_zones_drop_down.js +609 -0
  28. data/app/assets/stylesheets/conschedule/application.css +4 -0
  29. data/app/assets/stylesheets/conschedule/common.css +816 -0
  30. data/app/assets/stylesheets/conschedule/home.css +2441 -0
  31. data/app/assets/stylesheets/conschedule/main.css +884 -0
  32. data/app/assets/stylesheets/conschedule/schedules.css +4 -0
  33. data/app/controllers/conschedule/application_controller.rb +49 -0
  34. data/app/controllers/conschedule/schedules_controller.rb +125 -0
  35. data/app/helpers/conschedule/application_helper.rb +15 -0
  36. data/app/helpers/conschedule/schedules_helper.rb +43 -0
  37. data/app/jobs/conschedule/application_job.rb +4 -0
  38. data/app/mailers/conschedule/schedules_mailer.rb +46 -0
  39. data/app/models/conschedule/application_record.rb +5 -0
  40. data/app/models/conschedule/schedule.rb +63 -0
  41. data/app/views/conschedule/schedules/_confirmation.html.erb +38 -0
  42. data/app/views/conschedule/schedules/_page_one.html.erb +75 -0
  43. data/app/views/conschedule/schedules/_page_three.html.erb +94 -0
  44. data/app/views/conschedule/schedules/_page_two.html.erb +22 -0
  45. data/app/views/conschedule/schedules/_schedules.html.erb +122 -0
  46. data/app/views/conschedule/schedules/create.js.erb +11 -0
  47. data/app/views/conschedule/schedules/index.html.erb +123 -0
  48. data/app/views/conschedule/schedules/index.js.erb +3 -0
  49. data/app/views/conschedule/schedules/new.html.erb +11 -0
  50. data/app/views/conschedule/schedules_mailer/send_cancel_email_owner.html.erb +61 -0
  51. data/app/views/conschedule/schedules_mailer/send_cancel_email_user.html.erb +29 -0
  52. data/app/views/conschedule/schedules_mailer/send_confirmation_email_owner.html.erb +77 -0
  53. data/app/views/conschedule/schedules_mailer/send_confirmation_email_user.html.erb +30 -0
  54. data/app/views/kaminari/custom_theme/_first_page.html.erb +3 -0
  55. data/app/views/kaminari/custom_theme/_gap.html.erb +1 -0
  56. data/app/views/kaminari/custom_theme/_last_page.html.erb +3 -0
  57. data/app/views/kaminari/custom_theme/_next_page.html.erb +1 -0
  58. data/app/views/kaminari/custom_theme/_page.html.erb +5 -0
  59. data/app/views/kaminari/custom_theme/_paginator.html.erb +23 -0
  60. data/app/views/kaminari/custom_theme/_prev_page.html.erb +1 -0
  61. data/app/views/layouts/conschedule/application.html.erb +14 -0
  62. data/app/views/layouts/conschedule/mailer.html.erb +11 -0
  63. data/app/views/layouts/conschedule/schedules.html.erb +14 -0
  64. data/config/initializers/assets.rb +11 -0
  65. data/config/routes.rb +11 -0
  66. data/db/migrate/20160812085505_create_conschedule_schedules.rb +27 -0
  67. data/lib/conschedule.rb +34 -0
  68. data/lib/conschedule/configuration.rb +25 -0
  69. data/lib/conschedule/engine.rb +5 -0
  70. data/lib/conschedule/gem_dependencies.rb +2 -0
  71. data/lib/conschedule/version.rb +3 -0
  72. data/lib/generators/conschedule/install_generator.rb +23 -0
  73. data/lib/generators/conschedule/views_generator.rb +45 -0
  74. data/lib/generators/templates/README +40 -0
  75. data/lib/generators/templates/initializer.rb +25 -0
  76. data/lib/tasks/conschedule_tasks.rake +4 -0
  77. metadata +182 -0
@@ -0,0 +1,1433 @@
1
+ (function (root) {/*global exports, Intl*/
2
+ /**
3
+ * This script gives you the zone info key representing your device's time zone setting.
4
+ *
5
+ * @name jsTimezoneDetect
6
+ * @version 1.0.6
7
+ * @author Jon Nylander
8
+ * @license MIT License - https://bitbucket.org/pellepim/jstimezonedetect/src/default/LICENCE.txt
9
+ *
10
+ * For usage and examples, visit:
11
+ * http://pellepim.bitbucket.org/jstz/
12
+ *
13
+ * Copyright (c) Jon Nylander
14
+ */
15
+
16
+
17
+ /**
18
+ * Namespace to hold all the code for timezone detection.
19
+ */
20
+ var jstz = (function () {
21
+ 'use strict';
22
+ var HEMISPHERE_SOUTH = 's',
23
+
24
+ consts = {
25
+ DAY: 86400000,
26
+ HOUR: 3600000,
27
+ MINUTE: 60000,
28
+ SECOND: 1000,
29
+ BASELINE_YEAR: 2014,
30
+ MAX_SCORE: 864000000, // 10 days
31
+ AMBIGUITIES: {
32
+ 'America/Denver': ['America/Mazatlan'],
33
+ 'Europe/London': ['Africa/Casablanca'],
34
+ 'America/Chicago': ['America/Mexico_City'],
35
+ 'America/Asuncion': ['America/Campo_Grande', 'America/Santiago'],
36
+ 'America/Montevideo': ['America/Sao_Paulo', 'America/Santiago'],
37
+ // Europe/Minsk should not be in this list... but Windows.
38
+ 'Asia/Beirut': ['Asia/Amman', 'Asia/Jerusalem', 'Europe/Helsinki', 'Asia/Damascus', 'Africa/Cairo', 'Asia/Gaza', 'Europe/Minsk'],
39
+ 'Pacific/Auckland': ['Pacific/Fiji'],
40
+ 'America/Los_Angeles': ['America/Santa_Isabel'],
41
+ 'America/New_York': ['America/Havana'],
42
+ 'America/Halifax': ['America/Goose_Bay'],
43
+ 'America/Godthab': ['America/Miquelon'],
44
+ 'Asia/Dubai': ['Asia/Yerevan'],
45
+ 'Asia/Jakarta': ['Asia/Krasnoyarsk'],
46
+ 'Asia/Shanghai': ['Asia/Irkutsk', 'Australia/Perth'],
47
+ 'Australia/Sydney': ['Australia/Lord_Howe'],
48
+ 'Asia/Tokyo': ['Asia/Yakutsk'],
49
+ 'Asia/Dhaka': ['Asia/Omsk'],
50
+ // In the real world Yerevan is not ambigous for Baku... but Windows.
51
+ 'Asia/Baku': ['Asia/Yerevan'],
52
+ 'Australia/Brisbane': ['Asia/Vladivostok'],
53
+ 'Pacific/Noumea': ['Asia/Vladivostok'],
54
+ 'Pacific/Majuro': ['Asia/Kamchatka', 'Pacific/Fiji'],
55
+ 'Pacific/Tongatapu': ['Pacific/Apia'],
56
+ 'Asia/Baghdad': ['Europe/Minsk', 'Europe/Moscow'],
57
+ 'Asia/Karachi': ['Asia/Yekaterinburg'],
58
+ 'Africa/Johannesburg': ['Asia/Gaza', 'Africa/Cairo']
59
+ }
60
+ },
61
+
62
+ /**
63
+ * Gets the offset in minutes from UTC for a certain date.
64
+ * @param {Date} date
65
+ * @returns {Number}
66
+ */
67
+ get_date_offset = function get_date_offset(date) {
68
+ var offset = -date.getTimezoneOffset();
69
+ return (offset !== null ? offset : 0);
70
+ },
71
+
72
+ /**
73
+ * This function does some basic calculations to create information about
74
+ * the user's timezone. It uses REFERENCE_YEAR as a solid year for which
75
+ * the script has been tested rather than depend on the year set by the
76
+ * client device.
77
+ *
78
+ * Returns a key that can be used to do lookups in jstz.olson.timezones.
79
+ * eg: "720,1,2".
80
+ *
81
+ * @returns {String}
82
+ */
83
+ lookup_key = function lookup_key() {
84
+ var january_offset = get_date_offset(new Date(consts.BASELINE_YEAR, 0, 2)),
85
+ june_offset = get_date_offset(new Date(consts.BASELINE_YEAR, 5, 2)),
86
+ diff = january_offset - june_offset;
87
+
88
+ if (diff < 0) {
89
+ return january_offset + ",1";
90
+ } else if (diff > 0) {
91
+ return june_offset + ",1," + HEMISPHERE_SOUTH;
92
+ }
93
+
94
+ return january_offset + ",0";
95
+ },
96
+
97
+
98
+ /**
99
+ * Tries to get the time zone key directly from the operating system for those
100
+ * environments that support the ECMAScript Internationalization API.
101
+ */
102
+ get_from_internationalization_api = function get_from_internationalization_api() {
103
+ var format, timezone;
104
+ if (typeof Intl === "undefined" || typeof Intl.DateTimeFormat === "undefined") {
105
+ return;
106
+ }
107
+
108
+ format = Intl.DateTimeFormat();
109
+
110
+ if (typeof format === "undefined" || typeof format.resolvedOptions === "undefined") {
111
+ return;
112
+ }
113
+
114
+ timezone = format.resolvedOptions().timeZone;
115
+
116
+ if (timezone && (timezone.indexOf("/") > -1 || timezone === 'UTC')) {
117
+ return timezone;
118
+ }
119
+
120
+ },
121
+
122
+ /**
123
+ * Starting point for getting all the DST rules for a specific year
124
+ * for the current timezone (as described by the client system).
125
+ *
126
+ * Returns an object with start and end attributes, or false if no
127
+ * DST rules were found for the year.
128
+ *
129
+ * @param year
130
+ * @returns {Object} || {Boolean}
131
+ */
132
+ dst_dates = function dst_dates(year) {
133
+ var yearstart = new Date(year, 0, 1, 0, 0, 1, 0).getTime();
134
+ var yearend = new Date(year, 12, 31, 23, 59, 59).getTime();
135
+ var current = yearstart;
136
+ var offset = (new Date(current)).getTimezoneOffset();
137
+ var dst_start = null;
138
+ var dst_end = null;
139
+
140
+ while (current < yearend - 86400000) {
141
+ var dateToCheck = new Date(current);
142
+ var dateToCheckOffset = dateToCheck.getTimezoneOffset();
143
+
144
+ if (dateToCheckOffset !== offset) {
145
+ if (dateToCheckOffset < offset) {
146
+ dst_start = dateToCheck;
147
+ }
148
+ if (dateToCheckOffset > offset) {
149
+ dst_end = dateToCheck;
150
+ }
151
+ offset = dateToCheckOffset;
152
+ }
153
+
154
+ current += 86400000;
155
+ }
156
+
157
+ if (dst_start && dst_end) {
158
+ return {
159
+ s: find_dst_fold(dst_start).getTime(),
160
+ e: find_dst_fold(dst_end).getTime()
161
+ };
162
+ }
163
+
164
+ return false;
165
+ },
166
+
167
+ /**
168
+ * Probably completely unnecessary function that recursively finds the
169
+ * exact (to the second) time when a DST rule was changed.
170
+ *
171
+ * @param a_date - The candidate Date.
172
+ * @param padding - integer specifying the padding to allow around the candidate
173
+ * date for finding the fold.
174
+ * @param iterator - integer specifying how many milliseconds to iterate while
175
+ * searching for the fold.
176
+ *
177
+ * @returns {Date}
178
+ */
179
+ find_dst_fold = function find_dst_fold(a_date, padding, iterator) {
180
+ if (typeof padding === 'undefined') {
181
+ padding = consts.DAY;
182
+ iterator = consts.HOUR;
183
+ }
184
+
185
+ var date_start = new Date(a_date.getTime() - padding).getTime();
186
+ var date_end = a_date.getTime() + padding;
187
+ var offset = new Date(date_start).getTimezoneOffset();
188
+
189
+ var current = date_start;
190
+
191
+ var dst_change = null;
192
+ while (current < date_end - iterator) {
193
+ var dateToCheck = new Date(current);
194
+ var dateToCheckOffset = dateToCheck.getTimezoneOffset();
195
+
196
+ if (dateToCheckOffset !== offset) {
197
+ dst_change = dateToCheck;
198
+ break;
199
+ }
200
+ current += iterator;
201
+ }
202
+
203
+ if (padding === consts.DAY) {
204
+ return find_dst_fold(dst_change, consts.HOUR, consts.MINUTE);
205
+ }
206
+
207
+ if (padding === consts.HOUR) {
208
+ return find_dst_fold(dst_change, consts.MINUTE, consts.SECOND);
209
+ }
210
+
211
+ return dst_change;
212
+ },
213
+
214
+ windows7_adaptations = function windows7_adaptions(rule_list, preliminary_timezone, score, sample) {
215
+ if (score !== 'N/A') {
216
+ return score;
217
+ }
218
+ if (preliminary_timezone === 'Asia/Beirut') {
219
+ if (sample.name === 'Africa/Cairo') {
220
+ if (rule_list[6].s === 1398376800000 && rule_list[6].e === 1411678800000) {
221
+ return 0;
222
+ }
223
+ }
224
+ if (sample.name === 'Asia/Jerusalem') {
225
+ if (rule_list[6].s === 1395964800000 && rule_list[6].e === 1411858800000) {
226
+ return 0;
227
+ }
228
+ }
229
+ } else if (preliminary_timezone === 'America/Santiago') {
230
+ if (sample.name === 'America/Asuncion') {
231
+ if (rule_list[6].s === 1412481600000 && rule_list[6].e === 1397358000000) {
232
+ return 0;
233
+ }
234
+ }
235
+ if (sample.name === 'America/Campo_Grande') {
236
+ if (rule_list[6].s === 1413691200000 && rule_list[6].e === 1392519600000) {
237
+ return 0;
238
+ }
239
+ }
240
+ } else if (preliminary_timezone === 'America/Montevideo') {
241
+ if (sample.name === 'America/Sao_Paulo') {
242
+ if (rule_list[6].s === 1413687600000 && rule_list[6].e === 1392516000000) {
243
+ return 0;
244
+ }
245
+ }
246
+ } else if (preliminary_timezone === 'Pacific/Auckland') {
247
+ if (sample.name === 'Pacific/Fiji') {
248
+ if (rule_list[6].s === 1414245600000 && rule_list[6].e === 1396101600000) {
249
+ return 0;
250
+ }
251
+ }
252
+ }
253
+
254
+ return score;
255
+ },
256
+
257
+ /**
258
+ * Takes the DST rules for the current timezone, and proceeds to find matches
259
+ * in the jstz.olson.dst_rules.zones array.
260
+ *
261
+ * Compares samples to the current timezone on a scoring basis.
262
+ *
263
+ * Candidates are ruled immediately if either the candidate or the current zone
264
+ * has a DST rule where the other does not.
265
+ *
266
+ * Candidates are ruled out immediately if the current zone has a rule that is
267
+ * outside the DST scope of the candidate.
268
+ *
269
+ * Candidates are included for scoring if the current zones rules fall within the
270
+ * span of the samples rules.
271
+ *
272
+ * Low score is best, the score is calculated by summing up the differences in DST
273
+ * rules and if the consts.MAX_SCORE is overreached the candidate is ruled out.
274
+ *
275
+ * Yah follow? :)
276
+ *
277
+ * @param rule_list
278
+ * @param preliminary_timezone
279
+ * @returns {*}
280
+ */
281
+ best_dst_match = function best_dst_match(rule_list, preliminary_timezone) {
282
+ var score_sample = function score_sample(sample) {
283
+ var score = 0;
284
+
285
+ for (var j = 0; j < rule_list.length; j++) {
286
+
287
+ // Both sample and current time zone report DST during the year.
288
+ if (!!sample.rules[j] && !!rule_list[j]) {
289
+
290
+ // The current time zone's DST rules are inside the sample's. Include.
291
+ if (rule_list[j].s >= sample.rules[j].s && rule_list[j].e <= sample.rules[j].e) {
292
+ score = 0;
293
+ score += Math.abs(rule_list[j].s - sample.rules[j].s);
294
+ score += Math.abs(sample.rules[j].e - rule_list[j].e);
295
+
296
+ // The current time zone's DST rules are outside the sample's. Discard.
297
+ } else {
298
+ score = 'N/A';
299
+ break;
300
+ }
301
+
302
+ // The max score has been reached. Discard.
303
+ if (score > consts.MAX_SCORE) {
304
+ score = 'N/A';
305
+ break;
306
+ }
307
+ }
308
+ }
309
+
310
+ score = windows7_adaptations(rule_list, preliminary_timezone, score, sample);
311
+
312
+ return score;
313
+ };
314
+ var scoreboard = {};
315
+ var dst_zones = jstz.olson.dst_rules.zones;
316
+ var dst_zones_length = dst_zones.length;
317
+ var ambiguities = consts.AMBIGUITIES[preliminary_timezone];
318
+
319
+ for (var i = 0; i < dst_zones_length; i++) {
320
+ var sample = dst_zones[i];
321
+ var score = score_sample(dst_zones[i]);
322
+
323
+ if (score !== 'N/A') {
324
+ scoreboard[sample.name] = score;
325
+ }
326
+ }
327
+
328
+ for (var tz in scoreboard) {
329
+ if (scoreboard.hasOwnProperty(tz)) {
330
+ for (var j = 0; j < ambiguities.length; j++) {
331
+ if (ambiguities[j] === tz) {
332
+ return tz;
333
+ }
334
+ }
335
+ }
336
+ }
337
+
338
+ return preliminary_timezone;
339
+ },
340
+
341
+ /**
342
+ * Takes the preliminary_timezone as detected by lookup_key().
343
+ *
344
+ * Builds up the current timezones DST rules for the years defined
345
+ * in the jstz.olson.dst_rules.years array.
346
+ *
347
+ * If there are no DST occurences for those years, immediately returns
348
+ * the preliminary timezone. Otherwise proceeds and tries to solve
349
+ * ambiguities.
350
+ *
351
+ * @param preliminary_timezone
352
+ * @returns {String} timezone_name
353
+ */
354
+ get_by_dst = function get_by_dst(preliminary_timezone) {
355
+ var get_rules = function get_rules() {
356
+ var rule_list = [];
357
+ for (var i = 0; i < jstz.olson.dst_rules.years.length; i++) {
358
+ var year_rules = dst_dates(jstz.olson.dst_rules.years[i]);
359
+ rule_list.push(year_rules);
360
+ }
361
+ return rule_list;
362
+ };
363
+ var check_has_dst = function check_has_dst(rules) {
364
+ for (var i = 0; i < rules.length; i++) {
365
+ if (rules[i] !== false) {
366
+ return true;
367
+ }
368
+ }
369
+ return false;
370
+ };
371
+ var rules = get_rules();
372
+ var has_dst = check_has_dst(rules);
373
+
374
+ if (has_dst) {
375
+ return best_dst_match(rules, preliminary_timezone);
376
+ }
377
+
378
+ return preliminary_timezone;
379
+ },
380
+
381
+ /**
382
+ * Uses get_timezone_info() to formulate a key to use in the olson.timezones dictionary.
383
+ *
384
+ * Returns an object with one function ".name()"
385
+ *
386
+ * @returns Object
387
+ */
388
+ determine = function determine() {
389
+ var preliminary_tz = get_from_internationalization_api();
390
+
391
+ if (!preliminary_tz) {
392
+ preliminary_tz = jstz.olson.timezones[lookup_key()];
393
+
394
+ if (typeof consts.AMBIGUITIES[preliminary_tz] !== 'undefined') {
395
+ preliminary_tz = get_by_dst(preliminary_tz);
396
+ }
397
+ }
398
+
399
+ return {
400
+ name: function () {
401
+ return preliminary_tz;
402
+ }
403
+ };
404
+ };
405
+
406
+ return {
407
+ determine: determine
408
+ };
409
+ }());
410
+
411
+
412
+ jstz.olson = jstz.olson || {};
413
+
414
+ /**
415
+ * The keys in this dictionary are comma separated as such:
416
+ *
417
+ * First the offset compared to UTC time in minutes.
418
+ *
419
+ * Then a flag which is 0 if the timezone does not take daylight savings into account and 1 if it
420
+ * does.
421
+ *
422
+ * Thirdly an optional 's' signifies that the timezone is in the southern hemisphere,
423
+ * only interesting for timezones with DST.
424
+ *
425
+ * The mapped arrays is used for constructing the jstz.TimeZone object from within
426
+ * jstz.determine();
427
+ */
428
+ jstz.olson.timezones = {
429
+ '-720,0': 'Etc/GMT+12',
430
+ '-660,0': 'Pacific/Pago_Pago',
431
+ '-660,1,s': 'Pacific/Apia', // Why? Because windows... cry!
432
+ '-600,1': 'America/Adak',
433
+ '-600,0': 'Pacific/Honolulu',
434
+ '-570,0': 'Pacific/Marquesas',
435
+ '-540,0': 'Pacific/Gambier',
436
+ '-540,1': 'America/Anchorage',
437
+ '-480,1': 'America/Los_Angeles',
438
+ '-480,0': 'Pacific/Pitcairn',
439
+ '-420,0': 'America/Phoenix',
440
+ '-420,1': 'America/Denver',
441
+ '-360,0': 'America/Guatemala',
442
+ '-360,1': 'America/Chicago',
443
+ '-360,1,s': 'Pacific/Easter',
444
+ '-300,0': 'America/Bogota',
445
+ '-300,1': 'America/New_York',
446
+ '-270,0': 'America/Caracas',
447
+ '-240,1': 'America/Halifax',
448
+ '-240,0': 'America/Santo_Domingo',
449
+ '-240,1,s': 'America/Asuncion',
450
+ '-210,1': 'America/St_Johns',
451
+ '-180,1': 'America/Godthab',
452
+ '-180,0': 'America/Argentina/Buenos_Aires',
453
+ '-180,1,s': 'America/Montevideo',
454
+ '-120,0': 'America/Noronha',
455
+ '-120,1': 'America/Noronha',
456
+ '-60,1': 'Atlantic/Azores',
457
+ '-60,0': 'Atlantic/Cape_Verde',
458
+ '0,0': 'UTC',
459
+ '0,1': 'Europe/London',
460
+ '60,1': 'Europe/Berlin',
461
+ '60,0': 'Africa/Lagos',
462
+ '60,1,s': 'Africa/Windhoek',
463
+ '120,1': 'Asia/Beirut',
464
+ '120,0': 'Africa/Johannesburg',
465
+ '180,0': 'Asia/Baghdad',
466
+ '180,1': 'Europe/Moscow',
467
+ '210,1': 'Asia/Tehran',
468
+ '240,0': 'Asia/Dubai',
469
+ '240,1': 'Asia/Baku',
470
+ '270,0': 'Asia/Kabul',
471
+ '300,1': 'Asia/Yekaterinburg',
472
+ '300,0': 'Asia/Karachi',
473
+ '330,0': 'Asia/Kolkata',
474
+ '345,0': 'Asia/Kathmandu',
475
+ '360,0': 'Asia/Dhaka',
476
+ '360,1': 'Asia/Omsk',
477
+ '390,0': 'Asia/Rangoon',
478
+ '420,1': 'Asia/Krasnoyarsk',
479
+ '420,0': 'Asia/Jakarta',
480
+ '480,0': 'Asia/Shanghai',
481
+ '480,1': 'Asia/Irkutsk',
482
+ '525,0': 'Australia/Eucla',
483
+ '525,1,s': 'Australia/Eucla',
484
+ '540,1': 'Asia/Yakutsk',
485
+ '540,0': 'Asia/Tokyo',
486
+ '570,0': 'Australia/Darwin',
487
+ '570,1,s': 'Australia/Adelaide',
488
+ '600,0': 'Australia/Brisbane',
489
+ '600,1': 'Asia/Vladivostok',
490
+ '600,1,s': 'Australia/Sydney',
491
+ '630,1,s': 'Australia/Lord_Howe',
492
+ '660,1': 'Asia/Kamchatka',
493
+ '660,0': 'Pacific/Noumea',
494
+ '690,0': 'Pacific/Norfolk',
495
+ '720,1,s': 'Pacific/Auckland',
496
+ '720,0': 'Pacific/Majuro',
497
+ '765,1,s': 'Pacific/Chatham',
498
+ '780,0': 'Pacific/Tongatapu',
499
+ '780,1,s': 'Pacific/Apia',
500
+ '840,0': 'Pacific/Kiritimati'
501
+ };
502
+
503
+ /* Build time: 2015-11-02 13:01:00Z Build by invoking python utilities/dst.py generate */
504
+ jstz.olson.dst_rules = {
505
+ "years": [
506
+ 2008,
507
+ 2009,
508
+ 2010,
509
+ 2011,
510
+ 2012,
511
+ 2013,
512
+ 2014
513
+ ],
514
+ "zones": [
515
+ {
516
+ "name": "Africa/Cairo",
517
+ "rules": [
518
+ {
519
+ "e": 1219957200000,
520
+ "s": 1209074400000
521
+ },
522
+ {
523
+ "e": 1250802000000,
524
+ "s": 1240524000000
525
+ },
526
+ {
527
+ "e": 1285880400000,
528
+ "s": 1284069600000
529
+ },
530
+ false,
531
+ false,
532
+ false,
533
+ {
534
+ "e": 1411678800000,
535
+ "s": 1406844000000
536
+ }
537
+ ]
538
+ },
539
+ {
540
+ "name": "Africa/Casablanca",
541
+ "rules": [
542
+ {
543
+ "e": 1220223600000,
544
+ "s": 1212278400000
545
+ },
546
+ {
547
+ "e": 1250809200000,
548
+ "s": 1243814400000
549
+ },
550
+ {
551
+ "e": 1281222000000,
552
+ "s": 1272758400000
553
+ },
554
+ {
555
+ "e": 1312066800000,
556
+ "s": 1301788800000
557
+ },
558
+ {
559
+ "e": 1348970400000,
560
+ "s": 1345428000000
561
+ },
562
+ {
563
+ "e": 1382839200000,
564
+ "s": 1376100000000
565
+ },
566
+ {
567
+ "e": 1414288800000,
568
+ "s": 1406944800000
569
+ }
570
+ ]
571
+ },
572
+ {
573
+ "name": "America/Asuncion",
574
+ "rules": [
575
+ {
576
+ "e": 1205031600000,
577
+ "s": 1224388800000
578
+ },
579
+ {
580
+ "e": 1236481200000,
581
+ "s": 1255838400000
582
+ },
583
+ {
584
+ "e": 1270954800000,
585
+ "s": 1286078400000
586
+ },
587
+ {
588
+ "e": 1302404400000,
589
+ "s": 1317528000000
590
+ },
591
+ {
592
+ "e": 1333854000000,
593
+ "s": 1349582400000
594
+ },
595
+ {
596
+ "e": 1364094000000,
597
+ "s": 1381032000000
598
+ },
599
+ {
600
+ "e": 1395543600000,
601
+ "s": 1412481600000
602
+ }
603
+ ]
604
+ },
605
+ {
606
+ "name": "America/Campo_Grande",
607
+ "rules": [
608
+ {
609
+ "e": 1203217200000,
610
+ "s": 1224388800000
611
+ },
612
+ {
613
+ "e": 1234666800000,
614
+ "s": 1255838400000
615
+ },
616
+ {
617
+ "e": 1266721200000,
618
+ "s": 1287288000000
619
+ },
620
+ {
621
+ "e": 1298170800000,
622
+ "s": 1318737600000
623
+ },
624
+ {
625
+ "e": 1330225200000,
626
+ "s": 1350792000000
627
+ },
628
+ {
629
+ "e": 1361070000000,
630
+ "s": 1382241600000
631
+ },
632
+ {
633
+ "e": 1392519600000,
634
+ "s": 1413691200000
635
+ }
636
+ ]
637
+ },
638
+ {
639
+ "name": "America/Goose_Bay",
640
+ "rules": [
641
+ {
642
+ "e": 1225594860000,
643
+ "s": 1205035260000
644
+ },
645
+ {
646
+ "e": 1257044460000,
647
+ "s": 1236484860000
648
+ },
649
+ {
650
+ "e": 1289098860000,
651
+ "s": 1268539260000
652
+ },
653
+ {
654
+ "e": 1320555600000,
655
+ "s": 1299988860000
656
+ },
657
+ {
658
+ "e": 1352005200000,
659
+ "s": 1331445600000
660
+ },
661
+ {
662
+ "e": 1383454800000,
663
+ "s": 1362895200000
664
+ },
665
+ {
666
+ "e": 1414904400000,
667
+ "s": 1394344800000
668
+ }
669
+ ]
670
+ },
671
+ {
672
+ "name": "America/Havana",
673
+ "rules": [
674
+ {
675
+ "e": 1224997200000,
676
+ "s": 1205643600000
677
+ },
678
+ {
679
+ "e": 1256446800000,
680
+ "s": 1236488400000
681
+ },
682
+ {
683
+ "e": 1288501200000,
684
+ "s": 1268542800000
685
+ },
686
+ {
687
+ "e": 1321160400000,
688
+ "s": 1300597200000
689
+ },
690
+ {
691
+ "e": 1352005200000,
692
+ "s": 1333256400000
693
+ },
694
+ {
695
+ "e": 1383454800000,
696
+ "s": 1362891600000
697
+ },
698
+ {
699
+ "e": 1414904400000,
700
+ "s": 1394341200000
701
+ }
702
+ ]
703
+ },
704
+ {
705
+ "name": "America/Mazatlan",
706
+ "rules": [
707
+ {
708
+ "e": 1225008000000,
709
+ "s": 1207472400000
710
+ },
711
+ {
712
+ "e": 1256457600000,
713
+ "s": 1238922000000
714
+ },
715
+ {
716
+ "e": 1288512000000,
717
+ "s": 1270371600000
718
+ },
719
+ {
720
+ "e": 1319961600000,
721
+ "s": 1301821200000
722
+ },
723
+ {
724
+ "e": 1351411200000,
725
+ "s": 1333270800000
726
+ },
727
+ {
728
+ "e": 1382860800000,
729
+ "s": 1365325200000
730
+ },
731
+ {
732
+ "e": 1414310400000,
733
+ "s": 1396774800000
734
+ }
735
+ ]
736
+ },
737
+ {
738
+ "name": "America/Mexico_City",
739
+ "rules": [
740
+ {
741
+ "e": 1225004400000,
742
+ "s": 1207468800000
743
+ },
744
+ {
745
+ "e": 1256454000000,
746
+ "s": 1238918400000
747
+ },
748
+ {
749
+ "e": 1288508400000,
750
+ "s": 1270368000000
751
+ },
752
+ {
753
+ "e": 1319958000000,
754
+ "s": 1301817600000
755
+ },
756
+ {
757
+ "e": 1351407600000,
758
+ "s": 1333267200000
759
+ },
760
+ {
761
+ "e": 1382857200000,
762
+ "s": 1365321600000
763
+ },
764
+ {
765
+ "e": 1414306800000,
766
+ "s": 1396771200000
767
+ }
768
+ ]
769
+ },
770
+ {
771
+ "name": "America/Miquelon",
772
+ "rules": [
773
+ {
774
+ "e": 1225598400000,
775
+ "s": 1205038800000
776
+ },
777
+ {
778
+ "e": 1257048000000,
779
+ "s": 1236488400000
780
+ },
781
+ {
782
+ "e": 1289102400000,
783
+ "s": 1268542800000
784
+ },
785
+ {
786
+ "e": 1320552000000,
787
+ "s": 1299992400000
788
+ },
789
+ {
790
+ "e": 1352001600000,
791
+ "s": 1331442000000
792
+ },
793
+ {
794
+ "e": 1383451200000,
795
+ "s": 1362891600000
796
+ },
797
+ {
798
+ "e": 1414900800000,
799
+ "s": 1394341200000
800
+ }
801
+ ]
802
+ },
803
+ {
804
+ "name": "America/Santa_Isabel",
805
+ "rules": [
806
+ {
807
+ "e": 1225011600000,
808
+ "s": 1207476000000
809
+ },
810
+ {
811
+ "e": 1256461200000,
812
+ "s": 1238925600000
813
+ },
814
+ {
815
+ "e": 1288515600000,
816
+ "s": 1270375200000
817
+ },
818
+ {
819
+ "e": 1319965200000,
820
+ "s": 1301824800000
821
+ },
822
+ {
823
+ "e": 1351414800000,
824
+ "s": 1333274400000
825
+ },
826
+ {
827
+ "e": 1382864400000,
828
+ "s": 1365328800000
829
+ },
830
+ {
831
+ "e": 1414314000000,
832
+ "s": 1396778400000
833
+ }
834
+ ]
835
+ },
836
+ {
837
+ "name": "America/Santiago",
838
+ "rules": [
839
+ {
840
+ "e": 1206846000000,
841
+ "s": 1223784000000
842
+ },
843
+ {
844
+ "e": 1237086000000,
845
+ "s": 1255233600000
846
+ },
847
+ {
848
+ "e": 1270350000000,
849
+ "s": 1286683200000
850
+ },
851
+ {
852
+ "e": 1304823600000,
853
+ "s": 1313899200000
854
+ },
855
+ {
856
+ "e": 1335668400000,
857
+ "s": 1346558400000
858
+ },
859
+ {
860
+ "e": 1367118000000,
861
+ "s": 1378612800000
862
+ },
863
+ {
864
+ "e": 1398567600000,
865
+ "s": 1410062400000
866
+ }
867
+ ]
868
+ },
869
+ {
870
+ "name": "America/Sao_Paulo",
871
+ "rules": [
872
+ {
873
+ "e": 1203213600000,
874
+ "s": 1224385200000
875
+ },
876
+ {
877
+ "e": 1234663200000,
878
+ "s": 1255834800000
879
+ },
880
+ {
881
+ "e": 1266717600000,
882
+ "s": 1287284400000
883
+ },
884
+ {
885
+ "e": 1298167200000,
886
+ "s": 1318734000000
887
+ },
888
+ {
889
+ "e": 1330221600000,
890
+ "s": 1350788400000
891
+ },
892
+ {
893
+ "e": 1361066400000,
894
+ "s": 1382238000000
895
+ },
896
+ {
897
+ "e": 1392516000000,
898
+ "s": 1413687600000
899
+ }
900
+ ]
901
+ },
902
+ {
903
+ "name": "Asia/Amman",
904
+ "rules": [
905
+ {
906
+ "e": 1225404000000,
907
+ "s": 1206655200000
908
+ },
909
+ {
910
+ "e": 1256853600000,
911
+ "s": 1238104800000
912
+ },
913
+ {
914
+ "e": 1288303200000,
915
+ "s": 1269554400000
916
+ },
917
+ {
918
+ "e": 1319752800000,
919
+ "s": 1301608800000
920
+ },
921
+ false,
922
+ false,
923
+ {
924
+ "e": 1414706400000,
925
+ "s": 1395957600000
926
+ }
927
+ ]
928
+ },
929
+ {
930
+ "name": "Asia/Damascus",
931
+ "rules": [
932
+ {
933
+ "e": 1225486800000,
934
+ "s": 1207260000000
935
+ },
936
+ {
937
+ "e": 1256850000000,
938
+ "s": 1238104800000
939
+ },
940
+ {
941
+ "e": 1288299600000,
942
+ "s": 1270159200000
943
+ },
944
+ {
945
+ "e": 1319749200000,
946
+ "s": 1301608800000
947
+ },
948
+ {
949
+ "e": 1351198800000,
950
+ "s": 1333058400000
951
+ },
952
+ {
953
+ "e": 1382648400000,
954
+ "s": 1364508000000
955
+ },
956
+ {
957
+ "e": 1414702800000,
958
+ "s": 1395957600000
959
+ }
960
+ ]
961
+ },
962
+ {
963
+ "name": "Asia/Dubai",
964
+ "rules": [
965
+ false,
966
+ false,
967
+ false,
968
+ false,
969
+ false,
970
+ false,
971
+ false
972
+ ]
973
+ },
974
+ {
975
+ "name": "Asia/Gaza",
976
+ "rules": [
977
+ {
978
+ "e": 1219957200000,
979
+ "s": 1206655200000
980
+ },
981
+ {
982
+ "e": 1252015200000,
983
+ "s": 1238104800000
984
+ },
985
+ {
986
+ "e": 1281474000000,
987
+ "s": 1269640860000
988
+ },
989
+ {
990
+ "e": 1312146000000,
991
+ "s": 1301608860000
992
+ },
993
+ {
994
+ "e": 1348178400000,
995
+ "s": 1333058400000
996
+ },
997
+ {
998
+ "e": 1380229200000,
999
+ "s": 1364508000000
1000
+ },
1001
+ {
1002
+ "e": 1414098000000,
1003
+ "s": 1395957600000
1004
+ }
1005
+ ]
1006
+ },
1007
+ {
1008
+ "name": "Asia/Irkutsk",
1009
+ "rules": [
1010
+ {
1011
+ "e": 1224957600000,
1012
+ "s": 1206813600000
1013
+ },
1014
+ {
1015
+ "e": 1256407200000,
1016
+ "s": 1238263200000
1017
+ },
1018
+ {
1019
+ "e": 1288461600000,
1020
+ "s": 1269712800000
1021
+ },
1022
+ false,
1023
+ false,
1024
+ false,
1025
+ false
1026
+ ]
1027
+ },
1028
+ {
1029
+ "name": "Asia/Jerusalem",
1030
+ "rules": [
1031
+ {
1032
+ "e": 1223161200000,
1033
+ "s": 1206662400000
1034
+ },
1035
+ {
1036
+ "e": 1254006000000,
1037
+ "s": 1238112000000
1038
+ },
1039
+ {
1040
+ "e": 1284246000000,
1041
+ "s": 1269561600000
1042
+ },
1043
+ {
1044
+ "e": 1317510000000,
1045
+ "s": 1301616000000
1046
+ },
1047
+ {
1048
+ "e": 1348354800000,
1049
+ "s": 1333065600000
1050
+ },
1051
+ {
1052
+ "e": 1382828400000,
1053
+ "s": 1364515200000
1054
+ },
1055
+ {
1056
+ "e": 1414278000000,
1057
+ "s": 1395964800000
1058
+ }
1059
+ ]
1060
+ },
1061
+ {
1062
+ "name": "Asia/Kamchatka",
1063
+ "rules": [
1064
+ {
1065
+ "e": 1224943200000,
1066
+ "s": 1206799200000
1067
+ },
1068
+ {
1069
+ "e": 1256392800000,
1070
+ "s": 1238248800000
1071
+ },
1072
+ {
1073
+ "e": 1288450800000,
1074
+ "s": 1269698400000
1075
+ },
1076
+ false,
1077
+ false,
1078
+ false,
1079
+ false
1080
+ ]
1081
+ },
1082
+ {
1083
+ "name": "Asia/Krasnoyarsk",
1084
+ "rules": [
1085
+ {
1086
+ "e": 1224961200000,
1087
+ "s": 1206817200000
1088
+ },
1089
+ {
1090
+ "e": 1256410800000,
1091
+ "s": 1238266800000
1092
+ },
1093
+ {
1094
+ "e": 1288465200000,
1095
+ "s": 1269716400000
1096
+ },
1097
+ false,
1098
+ false,
1099
+ false,
1100
+ false
1101
+ ]
1102
+ },
1103
+ {
1104
+ "name": "Asia/Omsk",
1105
+ "rules": [
1106
+ {
1107
+ "e": 1224964800000,
1108
+ "s": 1206820800000
1109
+ },
1110
+ {
1111
+ "e": 1256414400000,
1112
+ "s": 1238270400000
1113
+ },
1114
+ {
1115
+ "e": 1288468800000,
1116
+ "s": 1269720000000
1117
+ },
1118
+ false,
1119
+ false,
1120
+ false,
1121
+ false
1122
+ ]
1123
+ },
1124
+ {
1125
+ "name": "Asia/Vladivostok",
1126
+ "rules": [
1127
+ {
1128
+ "e": 1224950400000,
1129
+ "s": 1206806400000
1130
+ },
1131
+ {
1132
+ "e": 1256400000000,
1133
+ "s": 1238256000000
1134
+ },
1135
+ {
1136
+ "e": 1288454400000,
1137
+ "s": 1269705600000
1138
+ },
1139
+ false,
1140
+ false,
1141
+ false,
1142
+ false
1143
+ ]
1144
+ },
1145
+ {
1146
+ "name": "Asia/Yakutsk",
1147
+ "rules": [
1148
+ {
1149
+ "e": 1224954000000,
1150
+ "s": 1206810000000
1151
+ },
1152
+ {
1153
+ "e": 1256403600000,
1154
+ "s": 1238259600000
1155
+ },
1156
+ {
1157
+ "e": 1288458000000,
1158
+ "s": 1269709200000
1159
+ },
1160
+ false,
1161
+ false,
1162
+ false,
1163
+ false
1164
+ ]
1165
+ },
1166
+ {
1167
+ "name": "Asia/Yekaterinburg",
1168
+ "rules": [
1169
+ {
1170
+ "e": 1224968400000,
1171
+ "s": 1206824400000
1172
+ },
1173
+ {
1174
+ "e": 1256418000000,
1175
+ "s": 1238274000000
1176
+ },
1177
+ {
1178
+ "e": 1288472400000,
1179
+ "s": 1269723600000
1180
+ },
1181
+ false,
1182
+ false,
1183
+ false,
1184
+ false
1185
+ ]
1186
+ },
1187
+ {
1188
+ "name": "Asia/Yerevan",
1189
+ "rules": [
1190
+ {
1191
+ "e": 1224972000000,
1192
+ "s": 1206828000000
1193
+ },
1194
+ {
1195
+ "e": 1256421600000,
1196
+ "s": 1238277600000
1197
+ },
1198
+ {
1199
+ "e": 1288476000000,
1200
+ "s": 1269727200000
1201
+ },
1202
+ {
1203
+ "e": 1319925600000,
1204
+ "s": 1301176800000
1205
+ },
1206
+ false,
1207
+ false,
1208
+ false
1209
+ ]
1210
+ },
1211
+ {
1212
+ "name": "Australia/Lord_Howe",
1213
+ "rules": [
1214
+ {
1215
+ "e": 1207407600000,
1216
+ "s": 1223134200000
1217
+ },
1218
+ {
1219
+ "e": 1238857200000,
1220
+ "s": 1254583800000
1221
+ },
1222
+ {
1223
+ "e": 1270306800000,
1224
+ "s": 1286033400000
1225
+ },
1226
+ {
1227
+ "e": 1301756400000,
1228
+ "s": 1317483000000
1229
+ },
1230
+ {
1231
+ "e": 1333206000000,
1232
+ "s": 1349537400000
1233
+ },
1234
+ {
1235
+ "e": 1365260400000,
1236
+ "s": 1380987000000
1237
+ },
1238
+ {
1239
+ "e": 1396710000000,
1240
+ "s": 1412436600000
1241
+ }
1242
+ ]
1243
+ },
1244
+ {
1245
+ "name": "Australia/Perth",
1246
+ "rules": [
1247
+ {
1248
+ "e": 1206813600000,
1249
+ "s": 1224957600000
1250
+ },
1251
+ false,
1252
+ false,
1253
+ false,
1254
+ false,
1255
+ false,
1256
+ false
1257
+ ]
1258
+ },
1259
+ {
1260
+ "name": "Europe/Helsinki",
1261
+ "rules": [
1262
+ {
1263
+ "e": 1224982800000,
1264
+ "s": 1206838800000
1265
+ },
1266
+ {
1267
+ "e": 1256432400000,
1268
+ "s": 1238288400000
1269
+ },
1270
+ {
1271
+ "e": 1288486800000,
1272
+ "s": 1269738000000
1273
+ },
1274
+ {
1275
+ "e": 1319936400000,
1276
+ "s": 1301187600000
1277
+ },
1278
+ {
1279
+ "e": 1351386000000,
1280
+ "s": 1332637200000
1281
+ },
1282
+ {
1283
+ "e": 1382835600000,
1284
+ "s": 1364691600000
1285
+ },
1286
+ {
1287
+ "e": 1414285200000,
1288
+ "s": 1396141200000
1289
+ }
1290
+ ]
1291
+ },
1292
+ {
1293
+ "name": "Europe/Minsk",
1294
+ "rules": [
1295
+ {
1296
+ "e": 1224979200000,
1297
+ "s": 1206835200000
1298
+ },
1299
+ {
1300
+ "e": 1256428800000,
1301
+ "s": 1238284800000
1302
+ },
1303
+ {
1304
+ "e": 1288483200000,
1305
+ "s": 1269734400000
1306
+ },
1307
+ false,
1308
+ false,
1309
+ false,
1310
+ false
1311
+ ]
1312
+ },
1313
+ {
1314
+ "name": "Europe/Moscow",
1315
+ "rules": [
1316
+ {
1317
+ "e": 1224975600000,
1318
+ "s": 1206831600000
1319
+ },
1320
+ {
1321
+ "e": 1256425200000,
1322
+ "s": 1238281200000
1323
+ },
1324
+ {
1325
+ "e": 1288479600000,
1326
+ "s": 1269730800000
1327
+ },
1328
+ false,
1329
+ false,
1330
+ false,
1331
+ false
1332
+ ]
1333
+ },
1334
+ {
1335
+ "name": "Pacific/Apia",
1336
+ "rules": [
1337
+ false,
1338
+ false,
1339
+ false,
1340
+ {
1341
+ "e": 1301752800000,
1342
+ "s": 1316872800000
1343
+ },
1344
+ {
1345
+ "e": 1333202400000,
1346
+ "s": 1348927200000
1347
+ },
1348
+ {
1349
+ "e": 1365256800000,
1350
+ "s": 1380376800000
1351
+ },
1352
+ {
1353
+ "e": 1396706400000,
1354
+ "s": 1411826400000
1355
+ }
1356
+ ]
1357
+ },
1358
+ {
1359
+ "name": "Pacific/Fiji",
1360
+ "rules": [
1361
+ false,
1362
+ false,
1363
+ {
1364
+ "e": 1269698400000,
1365
+ "s": 1287842400000
1366
+ },
1367
+ {
1368
+ "e": 1327154400000,
1369
+ "s": 1319292000000
1370
+ },
1371
+ {
1372
+ "e": 1358604000000,
1373
+ "s": 1350741600000
1374
+ },
1375
+ {
1376
+ "e": 1390050000000,
1377
+ "s": 1382796000000
1378
+ },
1379
+ {
1380
+ "e": 1421503200000,
1381
+ "s": 1414850400000
1382
+ }
1383
+ ]
1384
+ },
1385
+ {
1386
+ "name": "Europe/London",
1387
+ "rules": [
1388
+ {
1389
+ "e": 1224982800000,
1390
+ "s": 1206838800000
1391
+ },
1392
+ {
1393
+ "e": 1256432400000,
1394
+ "s": 1238288400000
1395
+ },
1396
+ {
1397
+ "e": 1288486800000,
1398
+ "s": 1269738000000
1399
+ },
1400
+ {
1401
+ "e": 1319936400000,
1402
+ "s": 1301187600000
1403
+ },
1404
+ {
1405
+ "e": 1351386000000,
1406
+ "s": 1332637200000
1407
+ },
1408
+ {
1409
+ "e": 1382835600000,
1410
+ "s": 1364691600000
1411
+ },
1412
+ {
1413
+ "e": 1414285200000,
1414
+ "s": 1396141200000
1415
+ }
1416
+ ]
1417
+ }
1418
+ ]
1419
+ };
1420
+ if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {
1421
+ module.exports = jstz;
1422
+ } else if ((typeof define !== 'undefined' && define !== null) && (define.amd != null)) {
1423
+ define([], function() {
1424
+ return jstz;
1425
+ });
1426
+ } else {
1427
+ if (typeof root === 'undefined') {
1428
+ window.jstz = jstz;
1429
+ } else {
1430
+ root.jstz = jstz;
1431
+ }
1432
+ }
1433
+ }());