diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000..5930a91
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,6 @@
+language: node_js
+node_js:
+ - "4"
+before_script:
+ - export DISPLAY=:99.0
+ - sh -e /etc/init.d/xvfb start
diff --git a/README.md b/README.md
index 7d8f88d..a4fd6f2 100644
--- a/README.md
+++ b/README.md
@@ -1,2 +1,19 @@
# world-calendars
Node module for converting between various calendars
+
+This project takes [kbwood/calendars](https://github.com/kbwood/calendars) and transforms them from a jQuery plugin to a node module. Many thanks to Keith Wood and all of the contributors to the original project!
+
+kbwood/calendars was originally pulled at version 2.0.2 in October 2016.
+
+The initial implementation converts all built-in calendars and localizations, including the `plus` module, but not the `validation` or `picker` functionality. Also includes basic test functionality.
+
+Typical usage for converting from one date system to another goes through Julian days:
+```
+var calendars = require('world-calendars');
+
+var gregorian = calendars.instance();
+var nepali = calendars.instance('nepali');
+
+// gives nepali date 2073-07-15
+var nepaliHalloween = nepali.fromJD(gregorian.newDate(2016, 10, 31).toJD());
+```
diff --git a/bin/build.js b/bin/build.js
new file mode 100644
index 0000000..ece4bec
--- /dev/null
+++ b/bin/build.js
@@ -0,0 +1,242 @@
+var fs = require('fs');
+
+function toRegExp(s) { return new RegExp(s); }
+
+/*
+ * Config options
+ */
+var config = JSON.parse(fs.readFileSync('./config.json', 'utf8')),
+
+ // string: dir of source files, relative to 'bin'
+ srcDir = config.srcDir,
+
+ // string: dir to put built files into, relative to 'bin'
+ distDir = config.distDir,
+
+ // array[string]: subdirectories to create in dist
+ subdirectories = config.subdirectories,
+
+ // newline character to use in build
+ newLine = config.newLine,
+
+ /*
+ * array[{
+ * from: string in source file
+ * to: string in built file
+ * setup: array[string]: setup lines in built file, if `from` is found
+ * include: string(regexp) files to include in this translation item
+ * exclude: string(regexp) files to exclude from this translation item
+ * }]
+ */
+ translate = config.translate,
+
+ // name of index file, within dist directory
+ indexFile = config.indexFile,
+
+ // array[string(regexp)]: files in source directory to include
+ include = config.include.map(toRegExp),
+
+ // array[string(regexp)]: files in source directory to exclude
+ exclude = config.exclude.map(toRegExp),
+
+ /*
+ * special translation to remove jQuery IIFE: {
+ * start: string(regexp): beginning of IIFE
+ * end: string(regexp): end of IIFE
+ * }
+ * will de-indent all text inside the IIFE, and error if any code is found outside the IIFE
+ * but comments outside the IIFE will be included in the built files.
+ */
+ unwrap = {
+ start: toRegExp(config.unwrap.start),
+ end: toRegExp(config.unwrap.end)
+ },
+
+ /*
+ * array giving the order to process files and how to translate their names
+ * [{
+ * match: string(regexp): pattern for this group of files. Within one group
+ * we order lexicographically after removing the .js extension
+ * out: regexp substitution expression to give the output file name
+ * export: optional bool: whether this is the module.exports.
+ * }]
+ */
+ outputOrder = config.outputOrder;
+
+
+var indexOrder = [];
+
+translate.forEach(function(ti) {
+ if(ti.include) ti.include = toRegExp(ti.include);
+ if(ti.exclude) ti.exclude = toRegExp(ti.exclude);
+});
+
+outputOrder.forEach(function(v) {
+ v.match = toRegExp(v.match);
+ indexOrder.push(v.match);
+});
+
+
+
+function unwrapped(lines, fn) {
+ // take off the IIFE wrap around everything
+ var unwrapStart,
+ unwrapEnd;
+
+ for(i = 0; i < lines.length; i++) {
+ if(lines[i].match(unwrap.start)) {
+ if(unwrapStart !== undefined) {
+ throw new Error('multiple unwrap starts found in ' + fn);
+ }
+ unwrapStart = i;
+ }
+ if(lines[i].match(unwrap.end)) {
+ if(unwrapEnd !== undefined) {
+ throw new Error('multiple unwrap ends found in ' + fn);
+ }
+ unwrapEnd = i;
+ }
+ }
+ if(unwrapEnd <= unwrapStart) {
+ throw new Error('unwrap end found before start in ' + fn);
+ }
+ if(unwrapStart === undefined || unwrapEnd === undefined) {
+ throw new Error('wrapping not found in ' + fn);
+ }
+
+ var header = lines.slice(0, unwrapStart),
+ body = lines.slice(unwrapStart + 1, unwrapEnd).map(function(v, i) {
+ if(v && v.substr(0, 4) !== ' ') {
+ throw new Error('IIFE body is not all indented in ' + fn + ' body line ' + String(i));
+ }
+ return v.substr(4);
+ }),
+ footer = lines.slice(unwrapEnd + 1);
+ if(notJustComments(header) || notJustComments(footer)) {
+ throw new Error('code found in header or footer in ' + fn);
+ }
+
+ return {header: header, body: body, footer: footer};
+}
+
+function notJustComments(lines) {
+ var linestr = lines
+ // take out single-line comments
+ .filter(function(line) { return !line.match(/^\s\/\//); })
+ .join('');
+
+ // take out /* ... */ comments
+ var nonComment = linestr.replace(/\/\*([^\*]|[\*]+[^\/])+\*\//g, '');
+
+ return (nonComment.trim() !== '');
+}
+
+function translateBody(body, fnOut) {
+ var setup = [];
+
+ for(var i = 0; i < translate.length; i++) {
+ var ti = translate[i];
+
+ if(ti.include && !fnOut.match(ti.include)) continue;
+ if(ti.exclude && fnOut.match(ti.exclude)) continue;
+
+ if(body.indexOf(ti.to) !== -1) {
+ throw new Error('to text "' + ti.to + '" found in file ' + fnOut);
+ }
+
+ var bodySplit = body.split(ti.from),
+ found = bodySplit.length > 1;
+
+ if(found) {
+ body = bodySplit.join(ti.to);
+ for(var j = 0; j < ti.setup.length; j++) {
+ if(setup.indexOf(ti.setup[j]) === -1) {
+ setup.push(ti.setup[j]);
+ }
+ }
+ }
+ }
+
+ if(body.indexOf('$') !== -1) {
+ console.log('"$" is still present in ' + fnOut);
+ }
+
+ return setup.join(newLine) + newLine + newLine + body;
+}
+
+function srcSort(fn1, fn2) {
+ var o1 = srcOrder(fn1),
+ o2 = srcOrder(fn2),
+ n1 = fn1.replace(/[\.]js$/, ''),
+ n2 = fn2.replace(/[\.]js$/, '');
+
+ if(o1 < o2) return -1;
+ else if(o1 > o2) return 1;
+ // within a category: order lexicographically after stripping extension
+ else return (n1 < n2) ? -1 : 1;
+}
+
+function srcOrder(fn) {
+ for(var i = 0; i < indexOrder.length; i++) {
+ if(fn.match(indexOrder[i])) return i;
+ }
+ throw new Error('no sort order found for file ' + fn);
+}
+
+function srcInclude(fn) {
+ var i,
+ match = false;
+ for(i = 0; i < include.length; i++) {
+ if(fn.match(include[i])) {
+ match = true;
+ break;
+ }
+ }
+ if(!match) return false;
+ for(i = 0; i < exclude.length; i++) {
+ if(fn.match(exclude[i])) {
+ return false;
+ }
+ }
+ return true;
+}
+
+subdirectories.forEach(function(subdir) {
+ fs.mkdirSync(distDir + subdir);
+});
+
+var srcFiles = fs.readdirSync(srcDir).filter(srcInclude).sort(srcSort);
+
+var headComment = fs.readFileSync('./head-comment.js', 'utf8');
+
+var indexLines = [];
+
+srcFiles.forEach(function(fn) {
+ var fstr = fs.readFileSync(srcDir + fn, 'utf8');
+
+ var fnMap = outputOrder[srcOrder(fn)],
+ fnOut = fn.replace(fnMap.match, fnMap.out);
+
+ // tabs to spaces
+ fstr = fstr.replace(/\t/g, ' ');
+ var lines = fstr.split(/\r?\n/);
+
+ // generate the built source file
+ var parts = unwrapped(lines, fn),
+ header = parts.header.join(newLine),
+ body = translateBody(parts.body.join(newLine), fnOut),
+ footer = parts.footer.join(newLine),
+ outStr = [headComment, header, body, footer].join(newLine);
+
+ // write this file and include it in the index in the right place
+ fs.writeFileSync(distDir + fnOut + '.js', outStr);
+
+ if(fnMap.export) {
+ indexLines.push("module.exports = require('./" + fnOut + "');");
+ }
+ else {
+ indexLines.push("require('./" + fnOut + "');")
+ }
+});
+
+fs.writeFileSync(distDir + indexFile, headComment + newLine + indexLines.join(newLine));
diff --git a/bin/config.json b/bin/config.json
new file mode 100644
index 0000000..60e41f6
--- /dev/null
+++ b/bin/config.json
@@ -0,0 +1,88 @@
+{
+ "srcDir": "../jquery-src/",
+ "distDir": "../dist/",
+ "indexFile": "index.js",
+ "include": ["^jquery[\\.]calendars.*[\\.]js$"],
+ "exclude": [
+ "[\\.]min[\\.]js$",
+ "picker",
+ "validation",
+ "plugin",
+ "[\\.]all[\\.]js$",
+ "[\\.]lang[\\.]js$"
+ ],
+ "subdirectories": ["calendars", "regional"],
+ "outputOrder": [
+ {
+ "match": "^(jquery[\\.]calendars[\\.]js)$",
+ "out": "main",
+ "export": true
+ },
+ {
+ "match": "^(jquery[\\.]calendars[\\.]plus[\\.]js)$",
+ "out": "plus"
+ },
+ {
+ "match": "^(jquery[\\.]calendars[\\.]([^\\.]+)[\\.]js)$",
+ "out": "calendars/$2"
+ },
+ {
+ "match": "^(jquery[\\.]calendars-([^\\.]+)[\\.]js)$",
+ "out": "regional/$2"
+ }
+ ],
+ "unwrap": {
+ "start": "^\\s*\\(\\s*function\\s*\\(\\s*\\$\\s*\\)\\s*\\{\\s*(\\/\\/.*)?$",
+ "end": "^\\s*}\\s*\\)\\s*\\(\\s*jQuery\\s*\\);\\s*(\\/\\/.*)?$"
+ },
+ "newLine": "\n",
+ "translate": [
+ {
+ "from": "$.calendars.calendars.gregorian",
+ "to": "_gregorian",
+ "setup": [
+ "var main = require('../main');",
+ "var _gregorian = main.calendars.gregorian;"
+ ],
+ "exclude": "^(main|plus)$"
+ },
+ {
+ "from": "$.calendars.calendars.julian",
+ "to": "_julian",
+ "setup": [
+ "var main = require('../main');",
+ "var _julian = main.calendars.julian;"
+ ],
+ "exclude": "^(main|plus|calendars\\/julian)$"
+ },
+ {
+ "from": "$.calendars",
+ "to": "main",
+ "setup": ["var main = require('../main');"],
+ "exclude": "^(main|plus)$"
+ },
+ {
+ "from": "$.calendars",
+ "to": "_exports",
+ "setup": [],
+ "include": "^main$"
+ },
+ {
+ "from": "_exports = ",
+ "to": "var _exports = module.exports = ",
+ "setup": [],
+ "include": "^main$"
+ },
+ {
+ "from": "$.extend",
+ "to": "assign",
+ "setup": ["var assign = require('object-assign');"]
+ },
+ {
+ "from": "$.calendars",
+ "to": "main",
+ "setup": ["var main = require('./main');"],
+ "include": "^plus$"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/bin/head-comment.js b/bin/head-comment.js
new file mode 100644
index 0000000..42731c6
--- /dev/null
+++ b/bin/head-comment.js
@@ -0,0 +1,10 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
diff --git a/dist/calendars/coptic.js b/dist/calendars/coptic.js
new file mode 100644
index 0000000..84a96ec
--- /dev/null
+++ b/dist/calendars/coptic.js
@@ -0,0 +1,182 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Coptic calendar for jQuery v2.0.2.
+ Written by Keith Wood (wood.keith{at}optusnet.com.au) February 2010.
+ Available under the MIT (http://keith-wood.name/licence.html) license.
+ Please attribute the author if you use it. */
+
+var main = require('../main');
+var assign = require('object-assign');
+
+
+/** Implementation of the Coptic calendar.
+ See http://en.wikipedia.org/wiki/Coptic_calendar.
+ See also Calendrical Calculations: The Millennium Edition
+ (http://emr.cs.iit.edu/home/reingold/calendar-book/index.shtml).
+ @class CopticCalendar
+ @param [language=''] {string} The language code (default English) for localisation. */
+function CopticCalendar(language) {
+ this.local = this.regionalOptions[language || ''] || this.regionalOptions[''];
+}
+
+CopticCalendar.prototype = new main.baseCalendar;
+
+assign(CopticCalendar.prototype, {
+ /** The calendar name.
+ @memberof CopticCalendar */
+ name: 'Coptic',
+ /** Julian date of start of Coptic epoch: 29 August 284 CE (Gregorian).
+ @memberof CopticCalendar */
+ jdEpoch: 1825029.5,
+ /** Days per month in a common year.
+ @memberof CopticCalendar */
+ daysPerMonth: [30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 5],
+ /** true if has a year zero, false if not.
+ @memberof CopticCalendar */
+ hasYearZero: false,
+ /** The minimum month number.
+ @memberof CopticCalendar */
+ minMonth: 1,
+ /** The first month in the year.
+ @memberof CopticCalendar */
+ firstMonth: 1,
+ /** The minimum day number.
+ @memberof CopticCalendar */
+ minDay: 1,
+
+ /** Localisations for the plugin.
+ Entries are objects indexed by the language code ('' being the default US/English).
+ Each object has the following attributes.
+ @memberof CopticCalendar
+ @property name {string} The calendar name.
+ @property epochs {string[]} The epoch names.
+ @property monthNames {string[]} The long names of the months of the year.
+ @property monthNamesShort {string[]} The short names of the months of the year.
+ @property dayNames {string[]} The long names of the days of the week.
+ @property dayNamesShort {string[]} The short names of the days of the week.
+ @property dayNamesMin {string[]} The minimal names of the days of the week.
+ @property dateFormat {string} The date format for this calendar.
+ See the options on formatDate for details.
+ @property firstDay {number} The number of the first day of the week, starting at 0.
+ @property isRTL {number} true if this localisation reads right-to-left. */
+ regionalOptions: { // Localisations
+ '': {
+ name: 'Coptic',
+ epochs: ['BAM', 'AM'],
+ monthNames: ['Thout', 'Paopi', 'Hathor', 'Koiak', 'Tobi', 'Meshir',
+ 'Paremhat', 'Paremoude', 'Pashons', 'Paoni', 'Epip', 'Mesori', 'Pi Kogi Enavot'],
+ monthNamesShort: ['Tho', 'Pao', 'Hath', 'Koi', 'Tob', 'Mesh',
+ 'Pat', 'Pad', 'Pash', 'Pao', 'Epi', 'Meso', 'PiK'],
+ dayNames: ['Tkyriaka', 'Pesnau', 'Pshoment', 'Peftoou', 'Ptiou', 'Psoou', 'Psabbaton'],
+ dayNamesShort: ['Tky', 'Pes', 'Psh', 'Pef', 'Pti', 'Pso', 'Psa'],
+ dayNamesMin: ['Tk', 'Pes', 'Psh', 'Pef', 'Pt', 'Pso', 'Psa'],
+ digits: null,
+ dateFormat: 'dd/mm/yyyy',
+ firstDay: 0,
+ isRTL: false
+ }
+ },
+
+ /** Determine whether this date is in a leap year.
+ @memberof CopticCalendar
+ @param year {CDate|number} The date to examine or the year to examine.
+ @return {boolean} true if this is a leap year, false if not.
+ @throws Error if an invalid year or a different calendar used. */
+ leapYear: function(year) {
+ var date = this._validate(year, this.minMonth, this.minDay, main.local.invalidYear);
+ var year = date.year() + (date.year() < 0 ? 1 : 0); // No year zero
+ return year % 4 === 3 || year % 4 === -1;
+ },
+
+ /** Retrieve the number of months in a year.
+ @memberof CopticCalendar
+ @param year {CDate|number} The date to examine or the year to examine.
+ @return {number} The number of months.
+ @throws Error if an invalid year or a different calendar used. */
+ monthsInYear: function(year) {
+ this._validate(year, this.minMonth, this.minDay,
+ main.local.invalidYear || main.regionalOptions[''].invalidYear);
+ return 13;
+ },
+
+ /** Determine the week of the year for a date.
+ @memberof CopticCalendar
+ @param year {CDate|number} The date to examine or the year to examine.
+ @param [month] {number) the month to examine.
+ @param [day] {number} The day to examine.
+ @return {number} The week of the year.
+ @throws Error if an invalid date or a different calendar used. */
+ weekOfYear: function(year, month, day) {
+ // Find Sunday of this week starting on Sunday
+ var checkDate = this.newDate(year, month, day);
+ checkDate.add(-checkDate.dayOfWeek(), 'd');
+ return Math.floor((checkDate.dayOfYear() - 1) / 7) + 1;
+ },
+
+ /** Retrieve the number of days in a month.
+ @memberof CopticCalendar
+ @param year {CDate|number} The date to examine or the year of the month.
+ @param [month] {number} The month.
+ @return {number} The number of days in this month.
+ @throws Error if an invalid month/year or a different calendar used. */
+ daysInMonth: function(year, month) {
+ var date = this._validate(year, month, this.minDay, main.local.invalidMonth);
+ return this.daysPerMonth[date.month() - 1] +
+ (date.month() === 13 && this.leapYear(date.year()) ? 1 : 0);
+ },
+
+ /** Determine whether this date is a week day.
+ @memberof CopticCalendar
+ @param year {CDate|number} The date to examine or the year to examine.
+ @param month {number} The month to examine.
+ @param day {number} The day to examine.
+ @return {boolean} true if a week day, false if not.
+ @throws Error if an invalid date or a different calendar used. */
+ weekDay: function(year, month, day) {
+ return (this.dayOfWeek(year, month, day) || 7) < 6;
+ },
+
+ /** Retrieve the Julian date equivalent for this date,
+ i.e. days since January 1, 4713 BCE Greenwich noon.
+ @memberof CopticCalendar
+ @param year {CDate|number} The date to convert or the year to convert.
+ @param [month] {number) the month to convert.
+ @param [day] {number} The day to convert.
+ @return {number} The equivalent Julian date.
+ @throws Error if an invalid date or a different calendar used. */
+ toJD: function(year, month, day) {
+ var date = this._validate(year, month, day, main.local.invalidDate);
+ year = date.year();
+ if (year < 0) { year++; } // No year zero
+ return date.day() + (date.month() - 1) * 30 +
+ (year - 1) * 365 + Math.floor(year / 4) + this.jdEpoch - 1;
+ },
+
+ /** Create a new date from a Julian date.
+ @memberof CopticCalendar
+ @param jd {number} The Julian date to convert.
+ @return {CDate} The equivalent date. */
+ fromJD: function(jd) {
+ var c = Math.floor(jd) + 0.5 - this.jdEpoch;
+ var year = Math.floor((c - Math.floor((c + 366) / 1461)) / 365) + 1;
+ if (year <= 0) { year--; } // No year zero
+ c = Math.floor(jd) + 0.5 - this.newDate(year, 1, 1).toJD();
+ var month = Math.floor(c / 30) + 1;
+ var day = c - (month - 1) * 30 + 1;
+ return this.newDate(year, month, day);
+ }
+});
+
+// Coptic calendar implementation
+main.calendars.coptic = CopticCalendar;
+
diff --git a/dist/calendars/discworld.js b/dist/calendars/discworld.js
new file mode 100644
index 0000000..a936e12
--- /dev/null
+++ b/dist/calendars/discworld.js
@@ -0,0 +1,226 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Discworld calendar for jQuery v2.0.2.
+ Written by Keith Wood (wood.keith{at}optusnet.com.au) January 2016.
+ Available under the MIT (http://keith-wood.name/licence.html) license.
+ Please attribute the author if you use it. */
+
+var main = require('../main');
+var assign = require('object-assign');
+
+
+/** Implementation of the Discworld calendar - Unseen University version.
+ See also http://wiki.lspace.org/mediawiki/Discworld_calendar
+ and http://discworld.wikia.com/wiki/Discworld_calendar.
+ @class DiscworldCalendar
+ @param [language=''] {string} The language code (default English) for localisation. */
+function DiscworldCalendar(language) {
+ this.local = this.regionalOptions[language || ''] || this.regionalOptions[''];
+}
+
+DiscworldCalendar.prototype = new main.baseCalendar;
+
+assign(DiscworldCalendar.prototype, {
+ /** The calendar name.
+ @memberof DiscworldCalendar */
+ name: 'Discworld',
+ /** Julian date of start of Discworld epoch: 1 January 0001 CE.
+ @memberof DiscworldCalendar */
+ jdEpoch: 1721425.5,
+ /** Days per month in a common year.
+ @memberof DiscworldCalendar */
+ daysPerMonth: [16, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32],
+ /** true if has a year zero, false if not.
+ @memberof DiscworldCalendar */
+ hasYearZero: false,
+ /** The minimum month number.
+ @memberof DiscworldCalendar */
+ minMonth: 1,
+ /** The first month in the year.
+ @memberof DiscworldCalendar */
+ firstMonth: 1,
+ /** The minimum day number.
+ @memberof DiscworldCalendar */
+ minDay: 1,
+
+ /** Localisations for the plugin.
+ Entries are objects indexed by the language code ('' being the default US/English).
+ Each object has the following attributes.
+ @memberof DiscworldCalendar
+ @property name {string} The calendar name.
+ @property epochs {string[]} The epoch names.
+ @property monthNames {string[]} The long names of the months of the year.
+ @property monthNamesShort {string[]} The short names of the months of the year.
+ @property dayNames {string[]} The long names of the days of the week.
+ @property dayNamesShort {string[]} The short names of the days of the week.
+ @property dayNamesMin {string[]} The minimal names of the days of the week.
+ @property dateFormat {string} The date format for this calendar.
+ See the options on formatDate for details.
+ @property firstDay {number} The number of the first day of the week, starting at 0.
+ @property isRTL {number} true if this localisation reads right-to-left. */
+ regionalOptions: { // Localisations
+ '': {
+ name: 'Discworld',
+ epochs: ['BUC', 'UC'],
+ monthNames: ['Ick', 'Offle', 'February', 'March', 'April', 'May', 'June',
+ 'Grune', 'August', 'Spune', 'Sektober', 'Ember', 'December'],
+ monthNamesShort: ['Ick', 'Off', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Gru', 'Aug', 'Spu', 'Sek', 'Emb', 'Dec'],
+ dayNames: ['Sunday', 'Octeday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
+ dayNamesShort: ['Sun', 'Oct', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
+ dayNamesMin: ['Su', 'Oc', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],
+ digits: null,
+ dateFormat: 'yyyy/mm/dd',
+ firstDay: 2,
+ isRTL: false
+ }
+ },
+
+ /** Determine whether this date is in a leap year.
+ @memberof DiscworldCalendar
+ @param year {CDate|number} The date to examine or the year to examine.
+ @return {boolean} true if this is a leap year, false if not.
+ @throws Error if an invalid year or a different calendar used. */
+ leapYear: function(year) {
+ this._validate(year, this.minMonth, this.minDay, main.local.invalidYear);
+ return false;
+ },
+
+ /** Retrieve the number of months in a year.
+ @memberof DiscworldCalendar
+ @param year {CDate|number} The date to examine or the year to examine.
+ @return {number} The number of months.
+ @throws Error if an invalid year or a different calendar used. */
+ monthsInYear: function(year) {
+ this._validate(year, this.minMonth, this.minDay, main.local.invalidYear);
+ return 13;
+ },
+
+ /** Retrieve the number of days in a year.
+ @memberof DiscworldCalendar
+ @param year {CDate|number} The date to examine or the year to examine.
+ @return {number} The number of days.
+ @throws Error if an invalid year or a different calendar used. */
+ daysInYear: function(year) {
+ this._validate(year, this.minMonth, this.minDay, main.local.invalidYear);
+ return 400;
+ },
+
+ /** Determine the week of the year for a date.
+ @memberof DiscworldCalendar
+ @param year {CDate|number} The date to examine or the year to examine.
+ @param [month] {number} The month to examine.
+ @param [day] {number} The day to examine.
+ @return {number} The week of the year.
+ @throws Error if an invalid date or a different calendar used. */
+ weekOfYear: function(year, month, day) {
+ // Find Sunday of this week starting on Sunday
+ var checkDate = this.newDate(year, month, day);
+ checkDate.add(-checkDate.dayOfWeek(), 'd');
+ return Math.floor((checkDate.dayOfYear() - 1) / 8) + 1;
+ },
+
+ /** Retrieve the number of days in a month.
+ @memberof DiscworldCalendar
+ @param year {CDate|number} The date to examine or the year of the month.
+ @param [month] {number} The month.
+ @return {number} The number of days in this month.
+ @throws Error if an invalid month/year or a different calendar used. */
+ daysInMonth: function(year, month) {
+ var date = this._validate(year, month, this.minDay, main.local.invalidMonth);
+ return this.daysPerMonth[date.month() - 1];
+ },
+
+ /** Retrieve the number of days in a week.
+ @memberof DiscworldCalendar
+ @return {number} The number of days. */
+ daysInWeek: function() {
+ return 8;
+ },
+
+ /** Retrieve the day of the week for a date.
+ @memberof DiscworldCalendar
+ @param year {CDate|number} The date to examine or the year to examine.
+ @param [month] {number} The month to examine.
+ @param [day] {number} The day to examine.
+ @return {number} The day of the week: 0 to number of days - 1.
+ @throws Error if an invalid date or a different calendar used. */
+ dayOfWeek: function(year, month, day) {
+ var date = this._validate(year, month, day, main.local.invalidDate);
+ return (date.day() + 1) % 8;
+ },
+
+ /** Determine whether this date is a week day.
+ @memberof DiscworldCalendar
+ @param year {CDate|number} The date to examine or the year to examine.
+ @param [month] {number} The month to examine.
+ @param [day] {number} The day to examine.
+ @return {boolean} true if a week day, false if not.
+ @throws Error if an invalid date or a different calendar used. */
+ weekDay: function(year, month, day) {
+ var dow = this.dayOfWeek(year, month, day);
+ return (dow >= 2 && dow <= 6);
+ },
+
+ /** Retrieve additional information about a date.
+ @memberof DiscworldCalendar
+ @param year {CDate|number} The date to examine or the year to examine.
+ @param [month] {number} The month to examine.
+ @param [day] {number} The day to examine.
+ @return {object} Additional information - contents depends on calendar.
+ @throws Error if an invalid date or a different calendar used. */
+ extraInfo: function(year, month, day) {
+ var date = this._validate(year, month, day, main.local.invalidDate);
+ return {century: centuries[Math.floor((date.year() - 1) / 100) + 1] || ''};
+ },
+
+ /** Retrieve the Julian date equivalent for this date,
+ i.e. days since January 1, 4713 BCE Greenwich noon.
+ @memberof DiscworldCalendar
+ @param year {CDate|number} The date to convert or the year to convert.
+ @param [month] {number} The month to convert.
+ @param [day] {number} The day to convert.
+ @return {number} The equivalent Julian date.
+ @throws Error if an invalid date or a different calendar used. */
+ toJD: function(year, month, day) {
+ var date = this._validate(year, month, day, main.local.invalidDate);
+ year = date.year() + (date.year() < 0 ? 1 : 0);
+ month = date.month();
+ day = date.day();
+ return day + (month > 1 ? 16 : 0) + (month > 2 ? (month - 2) * 32 : 0) +
+ (year - 1) * 400 + this.jdEpoch - 1;
+ },
+
+ /** Create a new date from a Julian date.
+ @memberof DiscworldCalendar
+ @param jd {number} The Julian date to convert.
+ @return {CDate} The equivalent date. */
+ fromJD: function(jd) {
+ jd = Math.floor(jd + 0.5) - Math.floor(this.jdEpoch) - 1;
+ var year = Math.floor(jd / 400) + 1;
+ jd -= (year - 1) * 400;
+ jd += (jd > 15 ? 16 : 0);
+ var month = Math.floor(jd / 32) + 1;
+ var day = jd - (month - 1) * 32 + 1;
+ return this.newDate(year <= 0 ? year - 1 : year, month, day);
+ }
+});
+
+// Names of the centuries
+var centuries = {
+ 20: 'Fruitbat',
+ 21: 'Anchovy'
+};
+
+// Discworld calendar implementation
+main.calendars.discworld = DiscworldCalendar;
+
diff --git a/dist/calendars/ethiopian-am.js b/dist/calendars/ethiopian-am.js
new file mode 100644
index 0000000..6fd981e
--- /dev/null
+++ b/dist/calendars/ethiopian-am.js
@@ -0,0 +1,31 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Amharic localisation for Ethiopian calendar for jQuery v2.0.2.
+ Written by Tewodros Zena February 2010. */
+var main = require('../main');
+
+main.calendars.ethiopian.prototype.regionalOptions['am'] = {
+ name: 'የኢትዮጵያ ዘመን አቆጣጠር',
+ epochs: ['BEE', 'EE'],
+ monthNames: ['መስከረም', 'ጥቅምት', 'ኅዳር', 'ታህሣሥ', 'ጥር', 'የካቲት',
+ 'መጋቢት', 'ሚያዝያ', 'ግንቦት', 'ሰኔ', 'ሐምሌ', 'ነሐሴ', 'ጳጉሜ'],
+ monthNamesShort: ['መስከ', 'ጥቅም', 'ኅዳር', 'ታህሣ', 'ጥር', 'የካቲ',
+ 'መጋቢ', 'ሚያዝ', 'ግንቦ', 'ሰኔ', 'ሐምሌ', 'ነሐሴ', 'ጳጉሜ'],
+ dayNames: ['እሑድ', 'ሰኞ', 'ማክሰኞ', 'ረቡዕ', 'ሓሙስ', 'ዓርብ', 'ቅዳሜ'],
+ dayNamesShort: ['እሑድ', 'ሰኞ', 'ማክሰ', 'ረቡዕ', 'ሓሙስ', 'ዓርብ', 'ቅዳሜ'],
+ dayNamesMin: ['እሑ', 'ሰኞ', 'ማክ', 'ረቡ', 'ሐሙ', 'ዓር', 'ቅዳ'],
+ digits: null,
+ dateFormat: 'dd/mm/yyyy',
+ firstDay: 0,
+ isRTL: false
+};
diff --git a/dist/calendars/ethiopian.js b/dist/calendars/ethiopian.js
new file mode 100644
index 0000000..750f8fc
--- /dev/null
+++ b/dist/calendars/ethiopian.js
@@ -0,0 +1,182 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Ethiopian calendar for jQuery v2.0.2.
+ Written by Keith Wood (wood.keith{at}optusnet.com.au) February 2010.
+ Available under the MIT (http://keith-wood.name/licence.html) license.
+ Please attribute the author if you use it. */
+
+var main = require('../main');
+var assign = require('object-assign');
+
+
+/** Implementation of the Ethiopian calendar.
+ See http://en.wikipedia.org/wiki/Ethiopian_calendar.
+ See also Calendrical Calculations: The Millennium Edition
+ (http://emr.cs.iit.edu/home/reingold/calendar-book/index.shtml).
+ @class EthiopianCalendar
+ @param [language=''] {string} The language code (default English) for localisation. */
+function EthiopianCalendar(language) {
+ this.local = this.regionalOptions[language || ''] || this.regionalOptions[''];
+}
+
+EthiopianCalendar.prototype = new main.baseCalendar;
+
+assign(EthiopianCalendar.prototype, {
+ /** The calendar name.
+ @memberof EthiopianCalendar */
+ name: 'Ethiopian',
+ /** Julian date of start of Ethiopian epoch: 27 August 8 CE (Gregorian).
+ @memberof EthiopianCalendar */
+ jdEpoch: 1724220.5,
+ /** Days per month in a common year.
+ @memberof EthiopianCalendar */
+ daysPerMonth: [30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 5],
+ /** true if has a year zero, false if not.
+ @memberof EthiopianCalendar */
+ hasYearZero: false,
+ /** The minimum month number.
+ @memberof EthiopianCalendar */
+ minMonth: 1,
+ /** The first month in the year.
+ @memberof EthiopianCalendar */
+ firstMonth: 1,
+ /** The minimum day number.
+ @memberof EthiopianCalendar */
+ minDay: 1,
+
+ /** Localisations for the plugin.
+ Entries are objects indexed by the language code ('' being the default US/English).
+ Each object has the following attributes.
+ @memberof EthiopianCalendar
+ @property name {string} The calendar name.
+ @property epochs {string[]} The epoch names.
+ @property monthNames {string[]} The long names of the months of the year.
+ @property monthNamesShort {string[]} The short names of the months of the year.
+ @property dayNames {string[]} The long names of the days of the week.
+ @property dayNamesShort {string[]} The short names of the days of the week.
+ @property dayNamesMin {string[]} The minimal names of the days of the week.
+ @property dateFormat {string} The date format for this calendar.
+ See the options on formatDate for details.
+ @property firstDay {number} The number of the first day of the week, starting at 0.
+ @property isRTL {number} true if this localisation reads right-to-left. */
+ regionalOptions: { // Localisations
+ '': {
+ name: 'Ethiopian',
+ epochs: ['BEE', 'EE'],
+ monthNames: ['Meskerem', 'Tikemet', 'Hidar', 'Tahesas', 'Tir', 'Yekatit',
+ 'Megabit', 'Miazia', 'Genbot', 'Sene', 'Hamle', 'Nehase', 'Pagume'],
+ monthNamesShort: ['Mes', 'Tik', 'Hid', 'Tah', 'Tir', 'Yek',
+ 'Meg', 'Mia', 'Gen', 'Sen', 'Ham', 'Neh', 'Pag'],
+ dayNames: ['Ehud', 'Segno', 'Maksegno', 'Irob', 'Hamus', 'Arb', 'Kidame'],
+ dayNamesShort: ['Ehu', 'Seg', 'Mak', 'Iro', 'Ham', 'Arb', 'Kid'],
+ dayNamesMin: ['Eh', 'Se', 'Ma', 'Ir', 'Ha', 'Ar', 'Ki'],
+ digits: null,
+ dateFormat: 'dd/mm/yyyy',
+ firstDay: 0,
+ isRTL: false
+ }
+ },
+
+ /** Determine whether this date is in a leap year.
+ @memberof EthiopianCalendar
+ @param year {CDate|number} The date to examine or the year to examine.
+ @return {boolean} true if this is a leap year, false if not.
+ @throws Error if an invalid year or a different calendar used. */
+ leapYear: function(year) {
+ var date = this._validate(year, this.minMonth, this.minDay, main.local.invalidYear);
+ var year = date.year() + (date.year() < 0 ? 1 : 0); // No year zero
+ return year % 4 === 3 || year % 4 === -1;
+ },
+
+ /** Retrieve the number of months in a year.
+ @memberof EthiopianCalendar
+ @param year {CDate|number} The date to examine or the year to examine.
+ @return {number} The number of months.
+ @throws Error if an invalid year or a different calendar used. */
+ monthsInYear: function(year) {
+ this._validate(year, this.minMonth, this.minDay,
+ main.local.invalidYear || main.regionalOptions[''].invalidYear);
+ return 13;
+ },
+
+ /** Determine the week of the year for a date.
+ @memberof EthiopianCalendar
+ @param year {CDate|number} The date to examine or the year to examine.
+ @param [month] {number} The month to examine.
+ @param [day] {number} The day to examine.
+ @return {number} The week of the year.
+ @throws Error if an invalid date or a different calendar used. */
+ weekOfYear: function(year, month, day) {
+ // Find Sunday of this week starting on Sunday
+ var checkDate = this.newDate(year, month, day);
+ checkDate.add(-checkDate.dayOfWeek(), 'd');
+ return Math.floor((checkDate.dayOfYear() - 1) / 7) + 1;
+ },
+
+ /** Retrieve the number of days in a month.
+ @memberof EthiopianCalendar
+ @param year {CDate|number} The date to examine or the year of the month.
+ @param [month] {number} The month.
+ @return {number} The number of days in this month.
+ @throws Error if an invalid month/year or a different calendar used. */
+ daysInMonth: function(year, month) {
+ var date = this._validate(year, month, this.minDay, main.local.invalidMonth);
+ return this.daysPerMonth[date.month() - 1] +
+ (date.month() === 13 && this.leapYear(date.year()) ? 1 : 0);
+ },
+
+ /** Determine whether this date is a week day.
+ @memberof EthiopianCalendar
+ @param year {CDate|number} The date to examine or the year to examine.
+ @param [month] {number} The month to examine.
+ @param [day] {number} The day to examine.
+ @return {boolean} true if a week day, false if not.
+ @throws Error if an invalid date or a different calendar used. */
+ weekDay: function(year, month, day) {
+ return (this.dayOfWeek(year, month, day) || 7) < 6;
+ },
+
+ /** Retrieve the Julian date equivalent for this date,
+ i.e. days since January 1, 4713 BCE Greenwich noon.
+ @memberof EthiopianCalendar
+ @param year {CDate|number} The date to convert or the year to convert.
+ @param [month] {number} The month to convert.
+ @param [day] {number} The day to convert.
+ @return {number} The equivalent Julian date.
+ @throws Error if an invalid date or a different calendar used. */
+ toJD: function(year, month, day) {
+ var date = this._validate(year, month, day, main.local.invalidDate);
+ year = date.year();
+ if (year < 0) { year++; } // No year zero
+ return date.day() + (date.month() - 1) * 30 +
+ (year - 1) * 365 + Math.floor(year / 4) + this.jdEpoch - 1;
+ },
+
+ /** Create a new date from a Julian date.
+ @memberof EthiopianCalendar
+ @param jd {number} the Julian date to convert.
+ @return {CDate} the equivalent date. */
+ fromJD: function(jd) {
+ var c = Math.floor(jd) + 0.5 - this.jdEpoch;
+ var year = Math.floor((c - Math.floor((c + 366) / 1461)) / 365) + 1;
+ if (year <= 0) { year--; } // No year zero
+ c = Math.floor(jd) + 0.5 - this.newDate(year, 1, 1).toJD();
+ var month = Math.floor(c / 30) + 1;
+ var day = c - (month - 1) * 30 + 1;
+ return this.newDate(year, month, day);
+ }
+});
+
+// Ethiopian calendar implementation
+main.calendars.ethiopian = EthiopianCalendar;
+
diff --git a/dist/calendars/hebrew-he.js b/dist/calendars/hebrew-he.js
new file mode 100644
index 0000000..34aae28
--- /dev/null
+++ b/dist/calendars/hebrew-he.js
@@ -0,0 +1,31 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Hebrew localisation for Hebrew calendar for jQuery v2.0.2.
+ Amir Hardon (ahardon at gmail dot com). */
+var main = require('../main');
+
+main.calendars.hebrew.prototype.regionalOptions['he'] = {
+ name: 'הלוח העברי',
+ epochs: ['BAM', 'AM'],
+ monthNames: ['ינואר','פברואר','מרץ','אפריל','מאי','יוני',
+ 'יולי','אוגוסט','ספטמבר','אוקטובר','נובמבר','דצמבר'],
+ monthNamesShort: ['1','2','3','4','5','6',
+ '7','8','9','10','11','12'],
+ dayNames: ['ראשון','שני','שלישי','רביעי','חמישי','שישי','שבת'],
+ dayNamesShort: ['א\'','ב\'','ג\'','ד\'','ה\'','ו\'','שבת'],
+ dayNamesMin: ['א\'','ב\'','ג\'','ד\'','ה\'','ו\'','שבת'],
+ digits: null,
+ dateFormat: 'dd/mm/yyyy',
+ firstDay: 0,
+ isRTL: true
+};
diff --git a/dist/calendars/hebrew.js b/dist/calendars/hebrew.js
new file mode 100644
index 0000000..e1f7d1c
--- /dev/null
+++ b/dist/calendars/hebrew.js
@@ -0,0 +1,272 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Hebrew calendar for jQuery v2.0.2.
+ Written by Keith Wood (wood.keith{at}optusnet.com.au) August 2009.
+ Available under the MIT (http://keith-wood.name/licence.html) license.
+ Please attribute the author if you use it. */
+
+var main = require('../main');
+var assign = require('object-assign');
+
+
+/** Implementation of the Hebrew civil calendar.
+ Based on code from http://www.fourmilab.ch/documents/calendar/.
+ See also http://en.wikipedia.org/wiki/Hebrew_calendar.
+ @class HebrewCalendar
+ @param [language=''] {string} The language code (default English) for localisation. */
+function HebrewCalendar(language) {
+ this.local = this.regionalOptions[language || ''] || this.regionalOptions[''];
+}
+
+HebrewCalendar.prototype = new main.baseCalendar;
+
+assign(HebrewCalendar.prototype, {
+ /** The calendar name.
+ @memberof HebrewCalendar */
+ name: 'Hebrew',
+ /** Julian date of start of Hebrew epoch: 7 October 3761 BCE.
+ @memberof HebrewCalendar */
+ jdEpoch: 347995.5,
+ /** Days per month in a common year.
+ @memberof HebrewCalendar */
+ daysPerMonth: [30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 29],
+ /** true if has a year zero, false if not.
+ @memberof HebrewCalendar */
+ hasYearZero: false,
+ /** The minimum month number.
+ @memberof HebrewCalendar */
+ minMonth: 1,
+ /** The first month in the year.
+ @memberof HebrewCalendar */
+ firstMonth: 7,
+ /** The minimum day number.
+ @memberof HebrewCalendar */
+ minDay: 1,
+
+ /** Localisations for the plugin.
+ Entries are objects indexed by the language code ('' being the default US/English).
+ Each object has the following attributes.
+ @memberof HebrewCalendar
+ @property name {string} The calendar name.
+ @property epochs {string[]} The epoch names.
+ @property monthNames {string[]} The long names of the months of the year.
+ @property monthNamesShort {string[]} The short names of the months of the year.
+ @property dayNames {string[]} The long names of the days of the week.
+ @property dayNamesShort {string[]} The short names of the days of the week.
+ @property dayNamesMin {string[]} The minimal names of the days of the week.
+ @property dateFormat {string} The date format for this calendar.
+ See the options on formatDate for details.
+ @property firstDay {number} The number of the first day of the week, starting at 0.
+ @property isRTL {number} true if this localisation reads right-to-left. */
+ regionalOptions: { // Localisations
+ '': {
+ name: 'Hebrew',
+ epochs: ['BAM', 'AM'],
+ monthNames: ['Nisan', 'Iyar', 'Sivan', 'Tammuz', 'Av', 'Elul',
+ 'Tishrei', 'Cheshvan', 'Kislev', 'Tevet', 'Shevat', 'Adar', 'Adar II'],
+ monthNamesShort: ['Nis', 'Iya', 'Siv', 'Tam', 'Av', 'Elu', 'Tis', 'Che', 'Kis', 'Tev', 'She', 'Ada', 'Ad2'],
+ dayNames: ['Yom Rishon', 'Yom Sheni', 'Yom Shlishi', 'Yom Revi\'i', 'Yom Chamishi', 'Yom Shishi', 'Yom Shabbat'],
+ dayNamesShort: ['Ris', 'She', 'Shl', 'Rev', 'Cha', 'Shi', 'Sha'],
+ dayNamesMin: ['Ri','She','Shl','Re','Ch','Shi','Sha'],
+ digits: null,
+ dateFormat: 'dd/mm/yyyy',
+ firstDay: 0,
+ isRTL: false
+ }
+ },
+
+ /** Determine whether this date is in a leap year.
+ @memberof HebrewCalendar
+ @param year {CDate|number} The date to examine or the year to examine.
+ @return {boolean} true if this is a leap year, false if not.
+ @throws Error if an invalid year or a different calendar used. */
+ leapYear: function(year) {
+ var date = this._validate(year, this.minMonth, this.minDay, main.local.invalidYear);
+ return this._leapYear(date.year());
+ },
+
+ /** Determine whether this date is in a leap year.
+ @memberof HebrewCalendar
+ @private
+ @param year {number} The year to examine.
+ @return {boolean} true if this is a leap year, false if not.
+ @throws Error if an invalid year or a different calendar used. */
+ _leapYear: function(year) {
+ year = (year < 0 ? year + 1 : year);
+ return mod(year * 7 + 1, 19) < 7;
+ },
+
+ /** Retrieve the number of months in a year.
+ @memberof HebrewCalendar
+ @param year {CDate|number} The date to examine or the year to examine.
+ @return {number} The number of months.
+ @throws Error if an invalid year or a different calendar used. */
+ monthsInYear: function(year) {
+ this._validate(year, this.minMonth, this.minDay, main.local.invalidYear);
+ return this._leapYear(year.year ? year.year() : year) ? 13 : 12;
+ },
+
+ /** Determine the week of the year for a date.
+ @memberof HebrewCalendar
+ @param year {CDate|number} The date to examine or the year to examine.
+ @param [month] {number} The month to examine.
+ @param [day] {number} The day to examine.
+ @return {number} The week of the year.
+ @throws Error if an invalid date or a different calendar used. */
+ weekOfYear: function(year, month, day) {
+ // Find Sunday of this week starting on Sunday
+ var checkDate = this.newDate(year, month, day);
+ checkDate.add(-checkDate.dayOfWeek(), 'd');
+ return Math.floor((checkDate.dayOfYear() - 1) / 7) + 1;
+ },
+
+ /** Retrieve the number of days in a year.
+ @memberof HebrewCalendar
+ @param year {CDate|number} The date to examine or the year to examine.
+ @return {number} The number of days.
+ @throws Error if an invalid year or a different calendar used. */
+ daysInYear: function(year) {
+ var date = this._validate(year, this.minMonth, this.minDay, main.local.invalidYear);
+ year = date.year();
+ return this.toJD((year === -1 ? +1 : year + 1), 7, 1) - this.toJD(year, 7, 1);
+ },
+
+ /** Retrieve the number of days in a month.
+ @memberof HebrewCalendar
+ @param year {CDate|number} The date to examine or the year of the month.
+ @param [month] {number} The month.
+ @return {number} The number of days in this month.
+ @throws Error if an invalid month/year or a different calendar used. */
+ daysInMonth: function(year, month) {
+ if (year.year) {
+ month = year.month();
+ year = year.year();
+ }
+ this._validate(year, month, this.minDay, main.local.invalidMonth);
+ return (month === 12 && this.leapYear(year) ? 30 : // Adar I
+ (month === 8 && mod(this.daysInYear(year), 10) === 5 ? 30 : // Cheshvan in shlemah year
+ (month === 9 && mod(this.daysInYear(year), 10) === 3 ? 29 : // Kislev in chaserah year
+ this.daysPerMonth[month - 1])));
+ },
+
+ /** Determine whether this date is a week day.
+ @memberof HebrewCalendar
+ @param year {CDate|number} The date to examine or the year to examine.
+ @param [month] {number} The month to examine.
+ @param [day] {number} The day to examine.
+ @return {boolean} true if a week day, false if not.
+ @throws Error if an invalid date or a different calendar used. */
+ weekDay: function(year, month, day) {
+ return this.dayOfWeek(year, month, day) !== 6;
+ },
+
+ /** Retrieve additional information about a date - year type.
+ @memberof HebrewCalendar
+ @param year {CDate|number} The date to examine or the year to examine.
+ @param [month] {number} The month to examine.
+ @param [day] {number} The day to examine.
+ @return {object} Additional information - contents depends on calendar.
+ @throws Error if an invalid date or a different calendar used. */
+ extraInfo: function(year, month, day) {
+ var date = this._validate(year, month, day, main.local.invalidDate);
+ return {yearType: (this.leapYear(date) ? 'embolismic' : 'common') + ' ' +
+ ['deficient', 'regular', 'complete'][this.daysInYear(date) % 10 - 3]};
+ },
+
+ /** Retrieve the Julian date equivalent for this date,
+ i.e. days since January 1, 4713 BCE Greenwich noon.
+ @memberof HebrewCalendar
+ @param year {CDate)|number} The date to convert or the year to convert.
+ @param [month] {number} The month to convert.
+ @param [day] {number} The day to convert.
+ @return {number} The equivalent Julian date.
+ @throws Error if an invalid date or a different calendar used. */
+ toJD: function(year, month, day) {
+ var date = this._validate(year, month, day, main.local.invalidDate);
+ year = date.year();
+ month = date.month();
+ day = date.day();
+ var adjYear = (year <= 0 ? year + 1 : year);
+ var jd = this.jdEpoch + this._delay1(adjYear) +
+ this._delay2(adjYear) + day + 1;
+ if (month < 7) {
+ for (var m = 7; m <= this.monthsInYear(year); m++) {
+ jd += this.daysInMonth(year, m);
+ }
+ for (var m = 1; m < month; m++) {
+ jd += this.daysInMonth(year, m);
+ }
+ }
+ else {
+ for (var m = 7; m < month; m++) {
+ jd += this.daysInMonth(year, m);
+ }
+ }
+ return jd;
+ },
+
+ /** Test for delay of start of new year and to avoid
+ Sunday, Wednesday, or Friday as start of the new year.
+ @memberof HebrewCalendar
+ @private
+ @param year {number} The year to examine.
+ @return {number} The days to offset by. */
+ _delay1: function(year) {
+ var months = Math.floor((235 * year - 234) / 19);
+ var parts = 12084 + 13753 * months;
+ var day = months * 29 + Math.floor(parts / 25920);
+ if (mod(3 * (day + 1), 7) < 3) {
+ day++;
+ }
+ return day;
+ },
+
+ /** Check for delay in start of new year due to length of adjacent years.
+ @memberof HebrewCalendar
+ @private
+ @param year {number} The year to examine.
+ @return {number} The days to offset by. */
+ _delay2: function(year) {
+ var last = this._delay1(year - 1);
+ var present = this._delay1(year);
+ var next = this._delay1(year + 1);
+ return ((next - present) === 356 ? 2 : ((present - last) === 382 ? 1 : 0));
+ },
+
+ /** Create a new date from a Julian date.
+ @memberof HebrewCalendar
+ @param jd {number} The Julian date to convert.
+ @return {CDate} The equivalent date. */
+ fromJD: function(jd) {
+ jd = Math.floor(jd) + 0.5;
+ var year = Math.floor(((jd - this.jdEpoch) * 98496.0) / 35975351.0) - 1;
+ while (jd >= this.toJD((year === -1 ? +1 : year + 1), 7, 1)) {
+ year++;
+ }
+ var month = (jd < this.toJD(year, 1, 1)) ? 7 : 1;
+ while (jd > this.toJD(year, month, this.daysInMonth(year, month))) {
+ month++;
+ }
+ var day = jd - this.toJD(year, month, 1) + 1;
+ return this.newDate(year, month, day);
+ }
+});
+
+// Modulus function which works for non-integers.
+function mod(a, b) {
+ return a - (b * Math.floor(a / b));
+}
+
+// Hebrew calendar implementation
+main.calendars.hebrew = HebrewCalendar;
+
diff --git a/dist/calendars/islamic-ar.js b/dist/calendars/islamic-ar.js
new file mode 100644
index 0000000..b4093da
--- /dev/null
+++ b/dist/calendars/islamic-ar.js
@@ -0,0 +1,31 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Arabic localisation for Islamic calendar for jQuery v2.0.2.
+ Written by Keith Wood (wood.keith{at}optusnet.com.au) August 2009. */
+var main = require('../main');
+
+main.calendars.islamic.prototype.regionalOptions['ar'] = {
+ name: 'Islamic',
+ epochs: ['BAM', 'AM'],
+ monthNames: ['محرّم', 'صفر', 'ربيع الأول', 'ربيع الآخر أو ربيع الثاني', 'جمادى الاول', 'جمادى الآخر أو جمادى الثاني',
+ 'رجب', 'شعبان', 'رمضان', 'شوّال', 'ذو القعدة', 'ذو الحجة'],
+ monthNamesShort: ['محرّم', 'صفر', 'ربيع الأول', 'ربيع الآخر أو ربيع الثاني', 'جمادى الاول', 'جمادى الآخر أو جمادى الثاني',
+ 'رجب', 'شعبان', 'رمضان', 'شوّال', 'ذو القعدة', 'ذو الحجة'],
+ dayNames: ['يوم الأحد', 'يوم الإثنين', 'يوم الثلاثاء', 'يوم الأربعاء', 'يوم الخميس', 'يوم الجمعة', 'يوم السبت'],
+ dayNamesShort: ['يوم الأحد', 'يوم الإثنين', 'يوم الثلاثاء', 'يوم الأربعاء', 'يوم الخميس', 'يوم الجمعة', 'يوم السبت'],
+ dayNamesMin: ['يوم الأحد', 'يوم الإثنين', 'يوم الثلاثاء', 'يوم الأربعاء', 'يوم الخميس', 'يوم الجمعة', 'يوم السبت'],
+ digits: main.substituteDigits(['٠', '١', '٢', '٣', '٤', '٥', '٦', '٧', '٨', '٩']),
+ dateFormat: 'yyyy/mm/dd',
+ firstDay: 6,
+ isRTL: true
+};
diff --git a/dist/calendars/islamic-fa.js b/dist/calendars/islamic-fa.js
new file mode 100644
index 0000000..978c56a
--- /dev/null
+++ b/dist/calendars/islamic-fa.js
@@ -0,0 +1,31 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Farsi/Persian localisation for Islamic calendar for jQuery v2.0.2.
+ Written by Keith Wood (wood.keith{at}optusnet.com.au) August 2009. */
+var main = require('../main');
+
+main.calendars.islamic.prototype.regionalOptions['fa'] = {
+ name: 'Islamic',
+ epochs: ['BAM', 'AM'],
+ monthNames: ['محرّم', 'صفر', 'ربيع الأول', 'ربيع الآخر أو ربيع الثاني', 'جمادى الاول', 'جمادى الآخر أو جمادى الثاني',
+ 'رجب', 'شعبان', 'رمضان', 'شوّال', 'ذو القعدة', 'ذو الحجة'],
+ monthNamesShort: ['محرّم', 'صفر', 'ربيع الأول', 'ربيع الآخر أو ربيع الثاني', 'جمادى الاول', 'جمادى الآخر أو جمادى الثاني',
+ 'رجب', 'شعبان', 'رمضان', 'شوّال', 'ذو القعدة', 'ذو الحجة'],
+ dayNames: ['يوم الأحد', 'يوم الإثنين', 'يوم الثلاثاء', 'يوم الأربعاء', 'يوم الخميس', 'يوم الجمعة', 'يوم السبت'],
+ dayNamesShort: ['يوم الأحد', 'يوم الإثنين', 'يوم الثلاثاء', 'يوم الأربعاء', 'يوم الخميس', 'يوم الجمعة', 'يوم السبت'],
+ dayNamesMin: ['يوم الأحد', 'يوم الإثنين', 'يوم الثلاثاء', 'يوم الأربعاء', 'يوم الخميس', 'يوم الجمعة', 'يوم السبت'],
+ digits: main.substituteDigits(['۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹']),
+ dateFormat: 'yyyy/mm/dd',
+ firstDay: 6,
+ isRTL: true
+};
diff --git a/dist/calendars/islamic.js b/dist/calendars/islamic.js
new file mode 100644
index 0000000..2907b28
--- /dev/null
+++ b/dist/calendars/islamic.js
@@ -0,0 +1,179 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Islamic calendar for jQuery v2.0.2.
+ Written by Keith Wood (wood.keith{at}optusnet.com.au) August 2009.
+ Available under the MIT (http://keith-wood.name/licence.html) license.
+ Please attribute the author if you use it. */
+
+var main = require('../main');
+var assign = require('object-assign');
+
+
+/** Implementation of the Islamic or '16 civil' calendar.
+ Based on code from http://www.iranchamber.com/calendar/converter/iranian_calendar_converter.php.
+ See also http://en.wikipedia.org/wiki/Islamic_calendar.
+ @class IslamicCalendar
+ @param [language=''] {string} The language code (default English) for localisation. */
+function IslamicCalendar(language) {
+ this.local = this.regionalOptions[language || ''] || this.regionalOptions[''];
+}
+
+IslamicCalendar.prototype = new main.baseCalendar;
+
+assign(IslamicCalendar.prototype, {
+ /** The calendar name.
+ @memberof IslamicCalendar */
+ name: 'Islamic',
+ /** Julian date of start of Islamic epoch: 16 July 622 CE.
+ @memberof IslamicCalendar */
+ jdEpoch: 1948439.5,
+ /** Days per month in a common year.
+ @memberof IslamicCalendar */
+ daysPerMonth: [30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29],
+ /** true if has a year zero, false if not.
+ @memberof IslamicCalendar */
+ hasYearZero: false,
+ /** The minimum month number.
+ @memberof IslamicCalendar */
+ minMonth: 1,
+ /** The first month in the year.
+ @memberof IslamicCalendar */
+ firstMonth: 1,
+ /** The minimum day number.
+ @memberof IslamicCalendar */
+ minDay: 1,
+
+ /** Localisations for the plugin.
+ Entries are objects indexed by the language code ('' being the default US/English).
+ Each object has the following attributes.
+ @memberof IslamicCalendar
+ @property name {string} The calendar name.
+ @property epochs {string[]} The epoch names.
+ @property monthNames {string[]} The long names of the months of the year.
+ @property monthNamesShort {string[]} The short names of the months of the year.
+ @property dayNames {string[]} The long names of the days of the week.
+ @property dayNamesShort {string[]} The short names of the days of the week.
+ @property dayNamesMin {string[]} The minimal names of the days of the week.
+ @property dateFormat {string} The date format for this calendar.
+ See the options on formatDate for details.
+ @property firstDay {number} The number of the first day of the week, starting at 0.
+ @property isRTL {number} true if this localisation reads right-to-left. */
+ regionalOptions: { // Localisations
+ '': {
+ name: 'Islamic',
+ epochs: ['BH', 'AH'],
+ monthNames: ['Muharram', 'Safar', 'Rabi\' al-awwal', 'Rabi\' al-thani', 'Jumada al-awwal', 'Jumada al-thani',
+ 'Rajab', 'Sha\'aban', 'Ramadan', 'Shawwal', 'Dhu al-Qi\'dah', 'Dhu al-Hijjah'],
+ monthNamesShort: ['Muh', 'Saf', 'Rab1', 'Rab2', 'Jum1', 'Jum2', 'Raj', 'Sha\'', 'Ram', 'Shaw', 'DhuQ', 'DhuH'],
+ dayNames: ['Yawm al-ahad', 'Yawm al-ithnayn', 'Yawm ath-thulaathaa\'',
+ 'Yawm al-arbi\'aa\'', 'Yawm al-khamīs', 'Yawm al-jum\'a', 'Yawm as-sabt'],
+ dayNamesShort: ['Aha', 'Ith', 'Thu', 'Arb', 'Kha', 'Jum', 'Sab'],
+ dayNamesMin: ['Ah','It','Th','Ar','Kh','Ju','Sa'],
+ digits: null,
+ dateFormat: 'yyyy/mm/dd',
+ firstDay: 6,
+ isRTL: false
+ }
+ },
+
+ /** Determine whether this date is in a leap year.
+ @memberof IslamicCalendar
+ @param year {CDate|number} The date to examine or the year to examine.
+ @return {boolean} true if this is a leap year, false if not.
+ @throws Error if an invalid year or a different calendar used. */
+ leapYear: function(year) {
+ var date = this._validate(year, this.minMonth, this.minDay, main.local.invalidYear);
+ return (date.year() * 11 + 14) % 30 < 11;
+ },
+
+ /** Determine the week of the year for a date.
+ @memberof IslamicCalendar
+ @param year {CDate|number} The date to examine or the year to examine.
+ @param [month] {number} The month to examine.
+ @param [day] {number} The day to examine.
+ @return {number} The week of the year.
+ @throws Error if an invalid date or a different calendar used. */
+ weekOfYear: function(year, month, day) {
+ // Find Sunday of this week starting on Sunday
+ var checkDate = this.newDate(year, month, day);
+ checkDate.add(-checkDate.dayOfWeek(), 'd');
+ return Math.floor((checkDate.dayOfYear() - 1) / 7) + 1;
+ },
+
+ /** Retrieve the number of days in a year.
+ @memberof IslamicCalendar
+ @param year {CDate|number} The date to examine or the year to examine.
+ @return {number} The number of days.
+ @throws Error if an invalid year or a different calendar used. */
+ daysInYear: function(year) {
+ return (this.leapYear(year) ? 355 : 354);
+ },
+
+ /** Retrieve the number of days in a month.
+ @memberof IslamicCalendar
+ @param year {CDate|number} The date to examine or the year of the month.
+ @param [month] {number} The month.
+ @return {number} The number of days in this month.
+ @throws Error if an invalid month/year or a different calendar used. */
+ daysInMonth: function(year, month) {
+ var date = this._validate(year, month, this.minDay, main.local.invalidMonth);
+ return this.daysPerMonth[date.month() - 1] +
+ (date.month() === 12 && this.leapYear(date.year()) ? 1 : 0);
+ },
+
+ /** Determine whether this date is a week day.
+ @memberof IslamicCalendar
+ @param year {CDate|number} The date to examine or the year to examine.
+ @param [month] {number} The month to examine.
+ @param [day] {number} The day to examine.
+ @return {boolean} true if a week day, false if not.
+ @throws Error if an invalid date or a different calendar used. */
+ weekDay: function(year, month, day) {
+ return this.dayOfWeek(year, month, day) !== 5;
+ },
+
+ /** Retrieve the Julian date equivalent for this date,
+ i.e. days since January 1, 4713 BCE Greenwich noon.
+ @memberof IslamicCalendar
+ @param year {CDate|number} The date to convert or the year to convert.
+ @param [month] {number} The month to convert.
+ @param [day] {number} The day to convert.
+ @return {number} The equivalent Julian date.
+ @throws Error if an invalid date or a different calendar used. */
+ toJD: function(year, month, day) {
+ var date = this._validate(year, month, day, main.local.invalidDate);
+ year = date.year();
+ month = date.month();
+ day = date.day();
+ year = (year <= 0 ? year + 1 : year);
+ return day + Math.ceil(29.5 * (month - 1)) + (year - 1) * 354 +
+ Math.floor((3 + (11 * year)) / 30) + this.jdEpoch - 1;
+ },
+
+ /** Create a new date from a Julian date.
+ @memberof IslamicCalendar
+ @param jd {number} The Julian date to convert.
+ @return {CDate} The equivalent date. */
+ fromJD: function(jd) {
+ jd = Math.floor(jd) + 0.5;
+ var year = Math.floor((30 * (jd - this.jdEpoch) + 10646) / 10631);
+ year = (year <= 0 ? year - 1 : year);
+ var month = Math.min(12, Math.ceil((jd - 29 - this.toJD(year, 1, 1)) / 29.5) + 1);
+ var day = jd - this.toJD(year, month, 1) + 1;
+ return this.newDate(year, month, day);
+ }
+});
+
+// Islamic (16 civil) calendar implementation
+main.calendars.islamic = IslamicCalendar;
+
diff --git a/dist/calendars/julian.js b/dist/calendars/julian.js
new file mode 100644
index 0000000..82847cd
--- /dev/null
+++ b/dist/calendars/julian.js
@@ -0,0 +1,181 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Julian calendar for jQuery v2.0.2.
+ Written by Keith Wood (wood.keith{at}optusnet.com.au) August 2009.
+ Available under the MIT (http://keith-wood.name/licence.html) license.
+ Please attribute the author if you use it. */
+
+var main = require('../main');
+var assign = require('object-assign');
+
+
+/** Implementation of the Julian calendar.
+ Based on code from http://www.fourmilab.ch/documents/calendar/.
+ See also http://en.wikipedia.org/wiki/Julian_calendar.
+ @class JulianCalendar
+ @augments BaseCalendar
+ @param [language=''] {string} The language code (default English) for localisation. */
+function JulianCalendar(language) {
+ this.local = this.regionalOptions[language || ''] || this.regionalOptions[''];
+}
+
+JulianCalendar.prototype = new main.baseCalendar;
+
+assign(JulianCalendar.prototype, {
+ /** The calendar name.
+ @memberof JulianCalendar */
+ name: 'Julian',
+ /** Julian date of start of Julian epoch: 1 January 0001 AD = 30 December 0001 BCE.
+ @memberof JulianCalendar */
+ jdEpoch: 1721423.5,
+ /** Days per month in a common year.
+ @memberof JulianCalendar */
+ daysPerMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],
+ /** true if has a year zero, false if not.
+ @memberof JulianCalendar */
+ hasYearZero: false,
+ /** The minimum month number.
+ @memberof JulianCalendar */
+ minMonth: 1,
+ /** The first month in the year.
+ @memberof JulianCalendar */
+ firstMonth: 1,
+ /** The minimum day number.
+ @memberof JulianCalendar */
+ minDay: 1,
+
+ /** Localisations for the plugin.
+ Entries are objects indexed by the language code ('' being the default US/English).
+ Each object has the following attributes.
+ @memberof JulianCalendar
+ @property name {string} The calendar name.
+ @property epochs {string[]} The epoch names.
+ @property monthNames {string[]} The long names of the months of the year.
+ @property monthNamesShort {string[]} The short names of the months of the year.
+ @property dayNames {string[]} The long names of the days of the week.
+ @property dayNamesShort {string[]} The short names of the days of the week.
+ @property dayNamesMin {string[]} The minimal names of the days of the week.
+ @property dateFormat {string} The date format for this calendar.
+ See the options on formatDate for details.
+ @property firstDay {number} The number of the first day of the week, starting at 0.
+ @property isRTL {number} true if this localisation reads right-to-left. */
+ regionalOptions: { // Localisations
+ '': {
+ name: 'Julian',
+ epochs: ['BC', 'AD'],
+ monthNames: ['January', 'February', 'March', 'April', 'May', 'June',
+ 'July', 'August', 'September', 'October', 'November', 'December'],
+ monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
+ dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
+ dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
+ dayNamesMin: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],
+ digits: null,
+ dateFormat: 'mm/dd/yyyy',
+ firstDay: 0,
+ isRTL: false
+ }
+ },
+
+ /** Determine whether this date is in a leap year.
+ @memberof JulianCalendar
+ @param year {CDate|number} The date to examine or the year to examine.
+ @return {boolean} true if this is a leap year, false if not.
+ @throws Error if an invalid year or a different calendar used. */
+ leapYear: function(year) {
+ var date = this._validate(year, this.minMonth, this.minDay, main.local.invalidYear);
+ var year = (date.year() < 0 ? date.year() + 1 : date.year()); // No year zero
+ return (year % 4) === 0;
+ },
+
+ /** Determine the week of the year for a date - ISO 8601.
+ @memberof JulianCalendar
+ @param year {CDate|number} The date to examine or the year to examine.
+ @param [month] {number} The month to examine.
+ @param [day] {number} The day to examine.
+ @return {number} The week of the year.
+ @throws Error if an invalid date or a different calendar used. */
+ weekOfYear: function(year, month, day) {
+ // Find Thursday of this week starting on Monday
+ var checkDate = this.newDate(year, month, day);
+ checkDate.add(4 - (checkDate.dayOfWeek() || 7), 'd');
+ return Math.floor((checkDate.dayOfYear() - 1) / 7) + 1;
+ },
+
+ /** Retrieve the number of days in a month.
+ @memberof JulianCalendar
+ @param year {CDate|number} The date to examine or the year of the month.
+ @param [month] {number} The month.
+ @return {number} The number of days in this month.
+ @throws Error if an invalid month/year or a different calendar used. */
+ daysInMonth: function(year, month) {
+ var date = this._validate(year, month, this.minDay, main.local.invalidMonth);
+ return this.daysPerMonth[date.month() - 1] +
+ (date.month() === 2 && this.leapYear(date.year()) ? 1 : 0);
+ },
+
+ /** Determine whether this date is a week day.
+ @memberof JulianCalendar
+ @param year {CDate|number} The date to examine or the year to examine.
+ @param [month] {number} The month to examine.
+ @param [day] {number} The day to examine.
+ @return {boolean} True if a week day, false if not.
+ @throws Error if an invalid date or a different calendar used. */
+ weekDay: function(year, month, day) {
+ return (this.dayOfWeek(year, month, day) || 7) < 6;
+ },
+
+ /** Retrieve the Julian date equivalent for this date,
+ i.e. days since January 1, 4713 BCE Greenwich noon.
+ @memberof JulianCalendar
+ @param year {CDate|number} The date to convert or the year to convert.
+ @param [month] {number} The month to convert.
+ @param [day] {number} The day to convert.
+ @return {number} The equivalent Julian date.
+ @throws Error if an invalid date or a different calendar used. */
+ toJD: function(year, month, day) {
+ var date = this._validate(year, month, day, main.local.invalidDate);
+ year = date.year();
+ month = date.month();
+ day = date.day();
+ if (year < 0) { year++; } // No year zero
+ // Jean Meeus algorithm, "Astronomical Algorithms", 1991
+ if (month <= 2) {
+ year--;
+ month += 12;
+ }
+ return Math.floor(365.25 * (year + 4716)) +
+ Math.floor(30.6001 * (month + 1)) + day - 1524.5;
+ },
+
+ /** Create a new date from a Julian date.
+ @memberof JulianCalendar
+ @param jd {number} The Julian date to convert.
+ @return {CDate} The equivalent date. */
+ fromJD: function(jd) {
+ // Jean Meeus algorithm, "Astronomical Algorithms", 1991
+ var a = Math.floor(jd + 0.5);
+ var b = a + 1524;
+ var c = Math.floor((b - 122.1) / 365.25);
+ var d = Math.floor(365.25 * c);
+ var e = Math.floor((b - d) / 30.6001);
+ var month = e - Math.floor(e < 14 ? 1 : 13);
+ var year = c - Math.floor(month > 2 ? 4716 : 4715);
+ var day = b - d - Math.floor(30.6001 * e);
+ if (year <= 0) { year--; } // No year zero
+ return this.newDate(year, month, day);
+ }
+});
+
+// Julian calendar implementation
+main.calendars.julian = JulianCalendar;
+
diff --git a/dist/calendars/mayan.js b/dist/calendars/mayan.js
new file mode 100644
index 0000000..e15776c
--- /dev/null
+++ b/dist/calendars/mayan.js
@@ -0,0 +1,293 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Mayan calendar for jQuery v2.0.2.
+ Written by Keith Wood (wood.keith{at}optusnet.com.au) August 2009.
+ Available under the MIT (http://keith-wood.name/licence.html) license.
+ Please attribute the author if you use it. */
+
+var main = require('../main');
+var assign = require('object-assign');
+
+
+/** Implementation of the Mayan Long Count calendar.
+ See also http://en.wikipedia.org/wiki/Mayan_calendar.
+ @class MayanCalendar
+ @param [language=''] {string} The language code (default English) for localisation. */
+function MayanCalendar(language) {
+ this.local = this.regionalOptions[language || ''] || this.regionalOptions[''];
+}
+
+MayanCalendar.prototype = new main.baseCalendar;
+
+assign(MayanCalendar.prototype, {
+ /** The calendar name.
+ @memberof MayanCalendar */
+ name: 'Mayan',
+ /** Julian date of start of Mayan epoch: 11 August 3114 BCE.
+ @memberof MayanCalendar */
+ jdEpoch: 584282.5,
+ /** true if has a year zero, false if not.
+ @memberof MayanCalendar */
+ hasYearZero: true,
+ /** The minimum month number.
+ @memberof MayanCalendar */
+ minMonth: 0,
+ /** The first month in the year.
+ @memberof MayanCalendar */
+ firstMonth: 0,
+ /** The minimum day number.
+ @memberof MayanCalendar */
+ minDay: 0,
+
+ /** Localisations for the plugin.
+ Entries are objects indexed by the language code ('' being the default US/English).
+ Each object has the following attributes.
+ @memberof MayanCalendar
+ @property name {string} The calendar name.
+ @property epochs {string[]} The epoch names.
+ @property monthNames {string[]} The long names of the months of the year.
+ @property monthNamesShort {string[]} The short names of the months of the year.
+ @property dayNames {string[]} The long names of the days of the week.
+ @property dayNamesShort {string[]} The short names of the days of the week.
+ @property dayNamesMin {string[]} The minimal names of the days of the week.
+ @property dateFormat {string} The date format for this calendar.
+ See the options on formatDate for details.
+ @property firstDay {number} The number of the first day of the week, starting at 0.
+ @property isRTL {number} true if this localisation reads right-to-left.
+ @property haabMonths {string[]} The names of the Haab months.
+ @property tzolkinMonths {string[]} The names of the Tzolkin months. */
+ regionalOptions: { // Localisations
+ '': {
+ name: 'Mayan',
+ epochs: ['', ''],
+ monthNames: ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
+ '10', '11', '12', '13', '14', '15', '16', '17'],
+ monthNamesShort: ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
+ '10', '11', '12', '13', '14', '15', '16', '17'],
+ dayNames: ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
+ '10', '11', '12', '13', '14', '15', '16', '17', '18', '19'],
+ dayNamesShort: ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
+ '10', '11', '12', '13', '14', '15', '16', '17', '18', '19'],
+ dayNamesMin: ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
+ '10', '11', '12', '13', '14', '15', '16', '17', '18', '19'],
+ digits: null,
+ dateFormat: 'YYYY.m.d',
+ firstDay: 0,
+ isRTL: false,
+ haabMonths: ['Pop', 'Uo', 'Zip', 'Zotz', 'Tzec', 'Xul', 'Yaxkin', 'Mol', 'Chen', 'Yax',
+ 'Zac', 'Ceh', 'Mac', 'Kankin', 'Muan', 'Pax', 'Kayab', 'Cumku', 'Uayeb'],
+ tzolkinMonths: ['Imix', 'Ik', 'Akbal', 'Kan', 'Chicchan', 'Cimi', 'Manik', 'Lamat', 'Muluc', 'Oc',
+ 'Chuen', 'Eb', 'Ben', 'Ix', 'Men', 'Cib', 'Caban', 'Etznab', 'Cauac', 'Ahau']
+ }
+ },
+
+ /** Determine whether this date is in a leap year.
+ @memberof MayanCalendar
+ @param year {CDate|number} The date to examine or the year to examine.
+ @return {boolean} true if this is a leap year, false if not.
+ @throws Error if an invalid year or a different calendar used. */
+ leapYear: function(year) {
+ this._validate(year, this.minMonth, this.minDay, main.local.invalidYear);
+ return false;
+ },
+
+ /** Format the year, if not a simple sequential number.
+ @memberof MayanCalendar
+ @param year {CDate|number} The date to format or the year to format.
+ @return {string} The formatted year.
+ @throws Error if an invalid year or a different calendar used. */
+ formatYear: function(year) {
+ var date = this._validate(year, this.minMonth, this.minDay, main.local.invalidYear);
+ year = date.year();
+ var baktun = Math.floor(year / 400);
+ year = year % 400;
+ year += (year < 0 ? 400 : 0);
+ var katun = Math.floor(year / 20);
+ return baktun + '.' + katun + '.' + (year % 20);
+ },
+
+ /** Convert from the formatted year back to a single number.
+ @memberof MayanCalendar
+ @param years {string} The year as n.n.n.
+ @return {number} The sequential year.
+ @throws Error if an invalid value is supplied. */
+ forYear: function(years) {
+ years = years.split('.');
+ if (years.length < 3) {
+ throw 'Invalid Mayan year';
+ }
+ var year = 0;
+ for (var i = 0; i < years.length; i++) {
+ var y = parseInt(years[i], 10);
+ if (Math.abs(y) > 19 || (i > 0 && y < 0)) {
+ throw 'Invalid Mayan year';
+ }
+ year = year * 20 + y;
+ }
+ return year;
+ },
+
+ /** Retrieve the number of months in a year.
+ @memberof MayanCalendar
+ @param year {CDate|number} The date to examine or the year to examine.
+ @return {number} The number of months.
+ @throws Error if an invalid year or a different calendar used. */
+ monthsInYear: function(year) {
+ this._validate(year, this.minMonth, this.minDay, main.local.invalidYear);
+ return 18;
+ },
+
+ /** Determine the week of the year for a date.
+ @memberof MayanCalendar
+ @param year {CDate|number} The date to examine or the year to examine.
+ @param [month] {number} The month to examine.
+ @param [day] {number} The day to examine.
+ @return {number} The week of the year.
+ @throws Error if an invalid date or a different calendar used. */
+ weekOfYear: function(year, month, day) {
+ this._validate(year, month, day, main.local.invalidDate);
+ return 0;
+ },
+
+ /** Retrieve the number of days in a year.
+ @memberof MayanCalendar
+ @param year {CDate|number} The date to examine or the year to examine.
+ @return {number} The number of days.
+ @throws Error if an invalid year or a different calendar used. */
+ daysInYear: function(year) {
+ this._validate(year, this.minMonth, this.minDay, main.local.invalidYear);
+ return 360;
+ },
+
+ /** Retrieve the number of days in a month.
+ @memberof MayanCalendar
+ @param year {CDate|number} The date to examine or the year of the month.
+ @param [month] {number} The month.
+ @return {number} The number of days in this month.
+ @throws Error if an invalid month/year or a different calendar used. */
+ daysInMonth: function(year, month) {
+ this._validate(year, month, this.minDay, main.local.invalidMonth);
+ return 20;
+ },
+
+ /** Retrieve the number of days in a week.
+ @memberof MayanCalendar
+ @return {number} The number of days. */
+ daysInWeek: function() {
+ return 5; // Just for formatting
+ },
+
+ /** Retrieve the day of the week for a date.
+ @memberof MayanCalendar
+ @param year {CDate|number} The date to examine or the year to examine.
+ @param [month] {number} The month to examine.
+ @param [day] {number} The day to examine.
+ @return {number} The day of the week: 0 to number of days - 1.
+ @throws Error if an invalid date or a different calendar used. */
+ dayOfWeek: function(year, month, day) {
+ var date = this._validate(year, month, day, main.local.invalidDate);
+ return date.day();
+ },
+
+ /** Determine whether this date is a week day.
+ @memberof MayanCalendar
+ @param year {CDate|number} The date to examine or the year to examine.
+ @param [month] {number} The month to examine.
+ @param [day] {number} The day to examine.
+ @return {boolean} true if a week day, false if not.
+ @throws Error if an invalid date or a different calendar used. */
+ weekDay: function(year, month, day) {
+ this._validate(year, month, day, main.local.invalidDate);
+ return true;
+ },
+
+ /** Retrieve additional information about a date - Haab and Tzolkin equivalents.
+ @memberof MayanCalendar
+ @param year {CDate|number} The date to examine or the year to examine.
+ @param [month] {number} The month to examine.
+ @param [day] {number} The day to examine.
+ @return {object} Additional information - contents depends on calendar.
+ @throws Error if an invalid date or a different calendar used. */
+ extraInfo: function(year, month, day) {
+ var date = this._validate(year, month, day, main.local.invalidDate);
+ var jd = date.toJD();
+ var haab = this._toHaab(jd);
+ var tzolkin = this._toTzolkin(jd);
+ return {haabMonthName: this.local.haabMonths[haab[0] - 1],
+ haabMonth: haab[0], haabDay: haab[1],
+ tzolkinDayName: this.local.tzolkinMonths[tzolkin[0] - 1],
+ tzolkinDay: tzolkin[0], tzolkinTrecena: tzolkin[1]};
+ },
+
+ /** Retrieve Haab date from a Julian date.
+ @memberof MayanCalendar
+ @private
+ @param jd {number} The Julian date.
+ @return {number[]} Corresponding Haab month and day. */
+ _toHaab: function(jd) {
+ jd -= this.jdEpoch;
+ var day = mod(jd + 8 + ((18 - 1) * 20), 365);
+ return [Math.floor(day / 20) + 1, mod(day, 20)];
+ },
+
+ /** Retrieve Tzolkin date from a Julian date.
+ @memberof MayanCalendar
+ @private
+ @param jd {number} The Julian date.
+ @return {number[]} Corresponding Tzolkin day and trecena. */
+ _toTzolkin: function(jd) {
+ jd -= this.jdEpoch;
+ return [amod(jd + 20, 20), amod(jd + 4, 13)];
+ },
+
+ /** Retrieve the Julian date equivalent for this date,
+ i.e. days since January 1, 4713 BCE Greenwich noon.
+ @memberof MayanCalendar
+ @param year {CDate|number} The date to convert or the year to convert.
+ @param [month] {number} The month to convert.
+ @param [day] {number} The day to convert.
+ @return {number} The equivalent Julian date.
+ @throws Error if an invalid date or a different calendar used. */
+ toJD: function(year, month, day) {
+ var date = this._validate(year, month, day, main.local.invalidDate);
+ return date.day() + (date.month() * 20) + (date.year() * 360) + this.jdEpoch;
+ },
+
+ /** Create a new date from a Julian date.
+ @memberof MayanCalendar
+ @param jd {number} The Julian date to convert.
+ @return {CDate} The equivalent date. */
+ fromJD: function(jd) {
+ jd = Math.floor(jd) + 0.5 - this.jdEpoch;
+ var year = Math.floor(jd / 360);
+ jd = jd % 360;
+ jd += (jd < 0 ? 360 : 0);
+ var month = Math.floor(jd / 20);
+ var day = jd % 20;
+ return this.newDate(year, month, day);
+ }
+});
+
+// Modulus function which works for non-integers.
+function mod(a, b) {
+ return a - (b * Math.floor(a / b));
+}
+
+// Modulus function which returns numerator if modulus is zero.
+function amod(a, b) {
+ return mod(a - 1, b) + 1;
+}
+
+// Mayan calendar implementation
+main.calendars.mayan = MayanCalendar;
+
diff --git a/dist/calendars/nanakshahi-pa.js b/dist/calendars/nanakshahi-pa.js
new file mode 100644
index 0000000..260e22c
--- /dev/null
+++ b/dist/calendars/nanakshahi-pa.js
@@ -0,0 +1,29 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Punjabi localisation for Nanakshahi calendar for jQuery v2.0.2.
+ Written by Sarbjit Singh January 2016. */
+var main = require('../main');
+
+main.calendars.nanakshahi.prototype.regionalOptions['pa'] = {
+ name: 'Nanakshahi',
+ epochs: ['BN', 'AN'],
+ monthNames: ['ਚੇਤ', 'ਵੈਸਾਖ', 'ਜੇਠ', 'ਹਾੜ', 'ਸਾਵਣ', 'ਭਾਦੋਂ', 'ਅੱਸੂ', 'ਕੱਤਕ', 'ਮੱਘਰ', 'ਪੋਹ', 'ਮਾਘ', 'ਫੱਗਣ'],
+ monthNamesShort: ['ਚੇ', 'ਵੈ', 'ਜੇ', 'ਹਾ', 'ਸਾ', 'ਭਾ', 'ਅੱ', 'ਕੱ', 'ਮੱ', 'ਪੋ', 'ਮਾ', 'ਫੱ'],
+ dayNames: ['ਐਤਵਾਰ', 'ਸੋਮਵਾਰ', 'ਮੰਗਲਵਾਰ', 'ਬੁੱਧਵਾਰ', 'ਵੀਰਵਾਰ', 'ਸ਼ੁੱਕਰਵਾਰ', 'ਸ਼ਨਿੱਚਰਵਾਰ'],
+ dayNamesShort: ['ਐਤ', 'ਸੋਮ', 'ਮੰਗਲ', 'ਬੁੱਧ', 'ਵੀਰ', 'ਸ਼ੁੱਕਰ', 'ਸ਼ਨਿੱਚਰ'],
+ dayNamesMin: ['ਐ', 'ਸੋ', 'ਮੰ', 'ਬੁੱ', 'ਵੀ', 'ਸ਼ੁੱ', 'ਸ਼'],
+ digits: main.substituteDigits(['੦', '੧', '੨', '੩', '੪', '੫', '੬', '੭', '੮', '੯']),
+ dateFormat: 'dd-mm-yyyy',
+ firstDay: 0,
+ isRTL: false
+};
diff --git a/dist/calendars/nanakshahi.js b/dist/calendars/nanakshahi.js
new file mode 100644
index 0000000..2ae6bd6
--- /dev/null
+++ b/dist/calendars/nanakshahi.js
@@ -0,0 +1,178 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Nanakshahi calendar for jQuery v2.0.2.
+ Written by Keith Wood (wood.keith{at}optusnet.com.au) January 2016.
+ Available under the MIT (http://keith-wood.name/licence.html) license.
+ Please attribute the author if you use it. */
+
+var main = require('../main');
+var assign = require('object-assign');
+
+
+/** Implementation of the Nanakshahi calendar.
+ See also https://en.wikipedia.org/wiki/Nanakshahi_calendar.
+ @class NanakshahiCalendar
+ @param [language=''] {string} The language code (default English) for localisation. */
+function NanakshahiCalendar(language) {
+ this.local = this.regionalOptions[language || ''] || this.regionalOptions[''];
+}
+
+NanakshahiCalendar.prototype = new main.baseCalendar;
+
+var gregorian = main.instance('gregorian');
+
+assign(NanakshahiCalendar.prototype, {
+ /** The calendar name.
+ @memberof NanakshahiCalendar */
+ name: 'Nanakshahi',
+ /** Julian date of start of Nanakshahi epoch: 14 March 1469 CE.
+ @memberof NanakshahiCalendar */
+ jdEpoch: 2257673.5,
+ /** Days per month in a common year.
+ @memberof NanakshahiCalendar */
+ daysPerMonth: [31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 30, 30],
+ /** true if has a year zero, false if not.
+ @memberof NanakshahiCalendar */
+ hasYearZero: false,
+ /** The minimum month number.
+ @memberof NanakshahiCalendar */
+ minMonth: 1,
+ /** The first month in the year.
+ @memberof NanakshahiCalendar */
+ firstMonth: 1,
+ /** The minimum day number.
+ @memberof NanakshahiCalendar */
+ minDay: 1,
+
+ /** Localisations for the plugin.
+ Entries are objects indexed by the language code ('' being the default US/English).
+ Each object has the following attributes.
+ @memberof NanakshahiCalendar
+ @property name {string} The calendar name.
+ @property epochs {string[]} The epoch names.
+ @property monthNames {string[]} The long names of the months of the year.
+ @property monthNamesShort {string[]} The short names of the months of the year.
+ @property dayNames {string[]} The long names of the days of the week.
+ @property dayNamesShort {string[]} The short names of the days of the week.
+ @property dayNamesMin {string[]} The minimal names of the days of the week.
+ @property dateFormat {string} The date format for this calendar.
+ See the options on formatDate for details.
+ @property firstDay {number} The number of the first day of the week, starting at 0.
+ @property isRTL {number} true if this localisation reads right-to-left. */
+ regionalOptions: { // Localisations
+ '': {
+ name: 'Nanakshahi',
+ epochs: ['BN', 'AN'],
+ monthNames: ['Chet', 'Vaisakh', 'Jeth', 'Harh', 'Sawan', 'Bhadon',
+ 'Assu', 'Katak', 'Maghar', 'Poh', 'Magh', 'Phagun'],
+ monthNamesShort: ['Che', 'Vai', 'Jet', 'Har', 'Saw', 'Bha', 'Ass', 'Kat', 'Mgr', 'Poh', 'Mgh', 'Pha'],
+ dayNames: ['Somvaar', 'Mangalvar', 'Budhvaar', 'Veervaar', 'Shukarvaar', 'Sanicharvaar', 'Etvaar'],
+ dayNamesShort: ['Som', 'Mangal', 'Budh', 'Veer', 'Shukar', 'Sanichar', 'Et'],
+ dayNamesMin: ['So', 'Ma', 'Bu', 'Ve', 'Sh', 'Sa', 'Et'],
+ digits: null,
+ dateFormat: 'dd-mm-yyyy',
+ firstDay: 0,
+ isRTL: false
+ }
+ },
+
+ /** Determine whether this date is in a leap year.
+ @memberof NanakshahiCalendar
+ @param year {CDate|number} The date to examine or the year to examine.
+ @return {boolean} true if this is a leap year, false if not.
+ @throws Error if an invalid year or a different calendar used. */
+ leapYear: function(year) {
+ var date = this._validate(year, this.minMonth, this.minDay,
+ main.local.invalidYear || main.regionalOptions[''].invalidYear);
+ return gregorian.leapYear(date.year() + (date.year() < 1 ? 1 : 0) + 1469);
+ },
+
+ /** Determine the week of the year for a date.
+ @memberof NanakshahiCalendar
+ @param year {CDate|number} The date to examine or the year to examine.
+ @param [month] {number} The month to examine.
+ @param [day] {number} The day to examine.
+ @return {number} The week of the year.
+ @throws Error if an invalid date or a different calendar used. */
+ weekOfYear: function(year, month, day) {
+ // Find Monday of this week starting on Monday
+ var checkDate = this.newDate(year, month, day);
+ checkDate.add(1 - (checkDate.dayOfWeek() || 7), 'd');
+ return Math.floor((checkDate.dayOfYear() - 1) / 7) + 1;
+ },
+
+ /** Retrieve the number of days in a month.
+ @memberof NanakshahiCalendar
+ @param year {CDate|number} The date to examine or the year of the month.
+ @param [month] {number} The month.
+ @return {number} The number of days in this month.
+ @throws Error if an invalid month/year or a different calendar used. */
+ daysInMonth: function(year, month) {
+ var date = this._validate(year, month, this.minDay, main.local.invalidMonth);
+ return this.daysPerMonth[date.month() - 1] +
+ (date.month() === 12 && this.leapYear(date.year()) ? 1 : 0);
+ },
+
+ /** Determine whether this date is a week day.
+ @memberof NanakshahiCalendar
+ @param year {CDate|number} The date to examine or the year to examine.
+ @param [month] {number} The month to examine.
+ @param [day] {number} The day to examine.
+ @return {boolean} true if a week day, false if not.
+ @throws Error if an invalid date or a different calendar used. */
+ weekDay: function(year, month, day) {
+ return (this.dayOfWeek(year, month, day) || 7) < 6;
+ },
+
+ /** Retrieve the Julian date equivalent for this date,
+ i.e. days since January 1, 4713 BCE Greenwich noon.
+ @memberof NanakshahiCalendar
+ @param year {CDate|number} The date to convert or the year to convert.
+ @param [month] {number} The month to convert.
+ @param [day] {number} The day to convert.
+ @return {number} The equivalent Julian date.
+ @throws Error if an invalid date or a different calendar used. */
+ toJD: function(year, month, day) {
+ var date = this._validate(year, month, day, main.local.invalidMonth);
+ var year = date.year();
+ if (year < 0) { year++; } // No year zero
+ var doy = date.day();
+ for (var m = 1; m < date.month(); m++) {
+ doy += this.daysPerMonth[m - 1];
+ }
+ return doy + gregorian.toJD(year + 1468, 3, 13);
+ },
+
+ /** Create a new date from a Julian date.
+ @memberof NanakshahiCalendar
+ @param jd {number} The Julian date to convert.
+ @return {CDate} The equivalent date. */
+ fromJD: function(jd) {
+ jd = Math.floor(jd + 0.5);
+ var year = Math.floor((jd - (this.jdEpoch - 1)) / 366);
+ while (jd >= this.toJD(year + 1, 1, 1)) {
+ year++;
+ }
+ var day = jd - Math.floor(this.toJD(year, 1, 1) + 0.5) + 1;
+ var month = 1;
+ while (day > this.daysInMonth(year, month)) {
+ day -= this.daysInMonth(year, month);
+ month++;
+ }
+ return this.newDate(year, month, day);
+ }
+});
+
+// Nanakshahi calendar implementation
+main.calendars.nanakshahi = NanakshahiCalendar;
+
diff --git a/dist/calendars/nepali-ne.js b/dist/calendars/nepali-ne.js
new file mode 100644
index 0000000..72a4632
--- /dev/null
+++ b/dist/calendars/nepali-ne.js
@@ -0,0 +1,29 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Nepali localisation for Nepali calendar for jQuery v2.0.2.
+ Written by Artur Neumann (ict.projects{at}nepal.inf.org) April 2013. */
+var main = require('../main');
+
+main.calendars.nepali.prototype.regionalOptions['ne'] = {
+ name: 'Nepali',
+ epochs: ['BBS', 'ABS'],
+ monthNames: ['बैशाख', 'जेष्ठ', 'आषाढ', 'श्रावण', 'भाद्र', 'आश्विन', 'कार्तिक', 'मंसिर', 'पौष', 'माघ', 'फाल्गुन', 'चैत्र'],
+ monthNamesShort: ['बै', 'जे', 'आषा', 'श्रा', 'भा', 'आश', 'का', 'मं', 'पौ', 'मा', 'फा', 'चै'],
+ dayNames: ['आइतवार', 'सोमवार', 'मगलवार', 'बुधवार', 'बिहिवार', 'शुक्रवार', 'शनिवार'],
+ dayNamesShort: ['आइत', 'सोम', 'मगल', 'बुध', 'बिहि', 'शुक्र', 'शनि'],
+ dayNamesMin: ['आ', 'सो', 'म', 'बु', 'बि', 'शु', 'श'],
+ digits: null,
+ dateFormat: 'dd/mm/yyyy',
+ firstDay: 1,
+ isRTL: false
+};
diff --git a/dist/calendars/nepali.js b/dist/calendars/nepali.js
new file mode 100644
index 0000000..a2b9eb9
--- /dev/null
+++ b/dist/calendars/nepali.js
@@ -0,0 +1,421 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Nepali calendar for jQuery v2.0.2.
+ Written by Artur Neumann (ict.projects{at}nepal.inf.org) April 2013.
+ Available under the MIT (http://keith-wood.name/licence.html) license.
+ Please attribute the author if you use it. */
+
+var main = require('../main');
+var assign = require('object-assign');
+
+
+/** Implementation of the Nepali civil calendar.
+ Based on the ideas from
+ http://codeissue.com/articles/a04e050dea7468f/algorithm-to-convert-english-date-to-nepali-date-using-c-net
+ and http://birenj2ee.blogspot.com/2011/04/nepali-calendar-in-java.html
+ See also http://en.wikipedia.org/wiki/Nepali_calendar
+ and https://en.wikipedia.org/wiki/Bikram_Samwat.
+ @class NepaliCalendar
+ @param [language=''] {string} The language code (default English) for localisation. */
+function NepaliCalendar(language) {
+ this.local = this.regionalOptions[language || ''] || this.regionalOptions[''];
+}
+
+NepaliCalendar.prototype = new main.baseCalendar;
+
+assign(NepaliCalendar.prototype, {
+ /** The calendar name.
+ @memberof NepaliCalendar */
+ name: 'Nepali',
+ /** Julian date of start of Nepali epoch: 14 April 57 BCE.
+ @memberof NepaliCalendar */
+ jdEpoch: 1700709.5,
+ /** Days per month in a common year.
+ @memberof NepaliCalendar */
+ daysPerMonth: [31, 31, 32, 32, 31, 30, 30, 29, 30, 29, 30, 30],
+ /** true if has a year zero, false if not.
+ @memberof NepaliCalendar */
+ hasYearZero: false,
+ /** The minimum month number.
+ @memberof NepaliCalendar */
+ minMonth: 1,
+ /** The first month in the year.
+ @memberof NepaliCalendar */
+ firstMonth: 1,
+ /** The minimum day number.
+ @memberof NepaliCalendar */
+ minDay: 1,
+ /** The number of days in the year.
+ @memberof NepaliCalendar */
+ daysPerYear: 365,
+
+ /** Localisations for the plugin.
+ Entries are objects indexed by the language code ('' being the default US/English).
+ Each object has the following attributes.
+ @memberof NepaliCalendar
+ @property name {string} The calendar name.
+ @property epochs {string[]} The epoch names.
+ @property monthNames {string[]} The long names of the months of the year.
+ @property monthNamesShort {string[]} The short names of the months of the year.
+ @property dayNames {string[]} The long names of the days of the week.
+ @property dayNamesShort {string[]} The short names of the days of the week.
+ @property dayNamesMin {string[]} The minimal names of the days of the week.
+ @property dateFormat {string} The date format for this calendar.
+ See the options on formatDate for details.
+ @property firstDay {number} The number of the first day of the week, starting at 0.
+ @property isRTL {number} true if this localisation reads right-to-left. */
+ regionalOptions: { // Localisations
+ '': {
+ name: 'Nepali',
+ epochs: ['BBS', 'ABS'],
+ monthNames: ['Baisakh', 'Jestha', 'Ashadh', 'Shrawan', 'Bhadra', 'Ashwin',
+ 'Kartik', 'Mangsir', 'Paush', 'Mangh', 'Falgun', 'Chaitra'],
+ monthNamesShort: ['Bai', 'Je', 'As', 'Shra', 'Bha', 'Ash', 'Kar', 'Mang', 'Pau', 'Ma', 'Fal', 'Chai'],
+ dayNames: ['Aaitabaar', 'Sombaar', 'Manglbaar', 'Budhabaar', 'Bihibaar', 'Shukrabaar', 'Shanibaar'],
+ dayNamesShort: ['Aaita', 'Som', 'Mangl', 'Budha', 'Bihi', 'Shukra', 'Shani'],
+ dayNamesMin: ['Aai', 'So', 'Man', 'Bu', 'Bi', 'Shu', 'Sha'],
+ digits: null,
+ dateFormat: 'dd/mm/yyyy',
+ firstDay: 1,
+ isRTL: false
+ }
+ },
+
+ /** Determine whether this date is in a leap year.
+ @memberof NepaliCalendar
+ @param year {CDate|number} The date to examine or the year to examine.
+ @return {boolean} true if this is a leap year, false if not.
+ @throws Error if an invalid year or a different calendar used. */
+ leapYear: function(year) {
+ return this.daysInYear(year) !== this.daysPerYear;
+ },
+
+ /** Determine the week of the year for a date.
+ @memberof NepaliCalendar
+ @param year {CDate|number} The date to examine or the year to examine.
+ @param [month] {number} The month to examine.
+ @param [day] {number} The day to examine.
+ @return {number} The week of the year.
+ @throws Error if an invalid date or a different calendar used. */
+ weekOfYear: function(year, month, day) {
+ // Find Sunday of this week starting on Sunday
+ var checkDate = this.newDate(year, month, day);
+ checkDate.add(-checkDate.dayOfWeek(), 'd');
+ return Math.floor((checkDate.dayOfYear() - 1) / 7) + 1;
+ },
+
+ /** Retrieve the number of days in a year.
+ @memberof NepaliCalendar
+ @param year {CDate|number} The date to examine or the year to examine.
+ @return {number} The number of days.
+ @throws Error if an invalid year or a different calendar used. */
+ daysInYear: function(year) {
+ var date = this._validate(year, this.minMonth, this.minDay, main.local.invalidYear);
+ year = date.year();
+ if (typeof this.NEPALI_CALENDAR_DATA[year] === 'undefined') {
+ return this.daysPerYear;
+ }
+ var daysPerYear = 0;
+ for (var month_number = this.minMonth; month_number <= 12; month_number++) {
+ daysPerYear += this.NEPALI_CALENDAR_DATA[year][month_number];
+ }
+ return daysPerYear;
+ },
+
+ /** Retrieve the number of days in a month.
+ @memberof NepaliCalendar
+ @param year {CDate|number| The date to examine or the year of the month.
+ @param [month] {number} The month.
+ @return {number} The number of days in this month.
+ @throws Error if an invalid month/year or a different calendar used. */
+ daysInMonth: function(year, month) {
+ if (year.year) {
+ month = year.month();
+ year = year.year();
+ }
+ this._validate(year, month, this.minDay, main.local.invalidMonth);
+ return (typeof this.NEPALI_CALENDAR_DATA[year] === 'undefined' ?
+ this.daysPerMonth[month - 1] : this.NEPALI_CALENDAR_DATA[year][month]);
+ },
+
+ /** Determine whether this date is a week day.
+ @memberof NepaliCalendar
+ @param year {CDate|number} The date to examine or the year to examine.
+ @param [month] {number} The month to examine.
+ @param [day] {number} The day to examine.
+ @return {boolean} true if a week day, false if not.
+ @throws Error if an invalid date or a different calendar used. */
+ weekDay: function(year, month, day) {
+ return this.dayOfWeek(year, month, day) !== 6;
+ },
+
+ /** Retrieve the Julian date equivalent for this date,
+ i.e. days since January 1, 4713 BCE Greenwich noon.
+ @memberof NepaliCalendar
+ @param year {CDate|number} The date to convert or the year to convert.
+ @param [month] {number} The month to convert.
+ @param [day] {number} The day to convert.
+ @return {number} The equivalent Julian date.
+ @throws Error if an invalid date or a different calendar used. */
+ toJD: function(nepaliYear, nepaliMonth, nepaliDay) {
+ var date = this._validate(nepaliYear, nepaliMonth, nepaliDay, main.local.invalidDate);
+ nepaliYear = date.year();
+ nepaliMonth = date.month();
+ nepaliDay = date.day();
+ var gregorianCalendar = main.instance();
+ var gregorianDayOfYear = 0; // We will add all the days that went by since
+ // the 1st. January and then we can get the Gregorian Date
+ var nepaliMonthToCheck = nepaliMonth;
+ var nepaliYearToCheck = nepaliYear;
+ this._createMissingCalendarData(nepaliYear);
+ // Get the correct year
+ var gregorianYear = nepaliYear - (nepaliMonthToCheck > 9 || (nepaliMonthToCheck === 9 &&
+ nepaliDay >= this.NEPALI_CALENDAR_DATA[nepaliYearToCheck][0]) ? 56 : 57);
+ // First we add the amount of days in the actual Nepali month as the day of year in the
+ // Gregorian one because at least this days are gone since the 1st. Jan.
+ if (nepaliMonth !== 9) {
+ gregorianDayOfYear = nepaliDay;
+ nepaliMonthToCheck--;
+ }
+ // Now we loop throw all Nepali month and add the amount of days to gregorianDayOfYear
+ // we do this till we reach Paush (9th month). 1st. January always falls in this month
+ while (nepaliMonthToCheck !== 9) {
+ if (nepaliMonthToCheck <= 0) {
+ nepaliMonthToCheck = 12;
+ nepaliYearToCheck--;
+ }
+ gregorianDayOfYear += this.NEPALI_CALENDAR_DATA[nepaliYearToCheck][nepaliMonthToCheck];
+ nepaliMonthToCheck--;
+ }
+ // If the date that has to be converted is in Paush (month no. 9) we have to do some other calculation
+ if (nepaliMonth === 9) {
+ // Add the days that are passed since the first day of Paush and substract the
+ // amount of days that lie between 1st. Jan and 1st Paush
+ gregorianDayOfYear += nepaliDay - this.NEPALI_CALENDAR_DATA[nepaliYearToCheck][0];
+ // For the first days of Paush we are now in negative values,
+ // because in the end of the gregorian year we substract
+ // 365 / 366 days (P.S. remember math in school + - gives -)
+ if (gregorianDayOfYear < 0) {
+ gregorianDayOfYear += gregorianCalendar.daysInYear(gregorianYear);
+ }
+ }
+ else {
+ gregorianDayOfYear += this.NEPALI_CALENDAR_DATA[nepaliYearToCheck][9] -
+ this.NEPALI_CALENDAR_DATA[nepaliYearToCheck][0];
+ }
+ return gregorianCalendar.newDate(gregorianYear, 1 ,1).add(gregorianDayOfYear, 'd').toJD();
+ },
+
+ /** Create a new date from a Julian date.
+ @memberof NepaliCalendar
+ @param jd {number} The Julian date to convert.
+ @return {CDate} The equivalent date. */
+ fromJD: function(jd) {
+ var gregorianCalendar = main.instance();
+ var gregorianDate = gregorianCalendar.fromJD(jd);
+ var gregorianYear = gregorianDate.year();
+ var gregorianDayOfYear = gregorianDate.dayOfYear();
+ var nepaliYear = gregorianYear + 56; //this is not final, it could be also +57 but +56 is always true for 1st Jan.
+ this._createMissingCalendarData(nepaliYear);
+ var nepaliMonth = 9; // Jan 1 always fall in Nepali month Paush which is the 9th month of Nepali calendar.
+ // Get the Nepali day in Paush (month 9) of 1st January
+ var dayOfFirstJanInPaush = this.NEPALI_CALENDAR_DATA[nepaliYear][0];
+ // Check how many days are left of Paush .
+ // Days calculated from 1st Jan till the end of the actual Nepali month,
+ // we use this value to check if the gregorian Date is in the actual Nepali month.
+ var daysSinceJanFirstToEndOfNepaliMonth =
+ this.NEPALI_CALENDAR_DATA[nepaliYear][nepaliMonth] - dayOfFirstJanInPaush + 1;
+ // If the gregorian day-of-year is smaller o equal than the sum of days between the 1st January and
+ // the end of the actual nepali month we found the correct nepali month.
+ // Example:
+ // The 4th February 2011 is the gregorianDayOfYear 35 (31 days of January + 4)
+ // 1st January 2011 is in the nepali year 2067, where 1st. January is in the 17th day of Paush (9th month)
+ // In 2067 Paush has 30days, This means (30-17+1=14) there are 14days between 1st January and end of Paush
+ // (including 17th January)
+ // The gregorianDayOfYear (35) is bigger than 14, so we check the next month
+ // The next nepali month (Mangh) has 29 days
+ // 29+14=43, this is bigger than gregorianDayOfYear(35) so, we found the correct nepali month
+ while (gregorianDayOfYear > daysSinceJanFirstToEndOfNepaliMonth) {
+ nepaliMonth++;
+ if (nepaliMonth > 12) {
+ nepaliMonth = 1;
+ nepaliYear++;
+ }
+ daysSinceJanFirstToEndOfNepaliMonth += this.NEPALI_CALENDAR_DATA[nepaliYear][nepaliMonth];
+ }
+ // The last step is to calculate the nepali day-of-month
+ // to continue our example from before:
+ // we calculated there are 43 days from 1st. January (17 Paush) till end of Mangh (29 days)
+ // when we subtract from this 43 days the day-of-year of the the Gregorian date (35),
+ // we know how far the searched day is away from the end of the Nepali month.
+ // So we simply subtract this number from the amount of days in this month (30)
+ var nepaliDayOfMonth = this.NEPALI_CALENDAR_DATA[nepaliYear][nepaliMonth] -
+ (daysSinceJanFirstToEndOfNepaliMonth - gregorianDayOfYear);
+ return this.newDate(nepaliYear, nepaliMonth, nepaliDayOfMonth);
+ },
+
+ /** Creates missing data in the NEPALI_CALENDAR_DATA table.
+ This data will not be correct but just give an estimated result. Mostly -/+ 1 day
+ @private
+ @param nepaliYear {number} The missing year number. */
+ _createMissingCalendarData: function(nepaliYear) {
+ var tmp_calendar_data = this.daysPerMonth.slice(0);
+ tmp_calendar_data.unshift(17);
+ for (var nepaliYearToCreate = (nepaliYear - 1); nepaliYearToCreate < (nepaliYear + 2); nepaliYearToCreate++) {
+ if (typeof this.NEPALI_CALENDAR_DATA[nepaliYearToCreate] === 'undefined') {
+ this.NEPALI_CALENDAR_DATA[nepaliYearToCreate] = tmp_calendar_data;
+ }
+ }
+ },
+
+ NEPALI_CALENDAR_DATA: {
+ // These data are from http://www.ashesh.com.np
+ 1970: [18, 31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30],
+ 1971: [18, 31, 31, 32, 31, 32, 30, 30, 29, 30, 29, 30, 30],
+ 1972: [17, 31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 30],
+ 1973: [19, 30, 32, 31, 32, 31, 30, 30, 30, 29, 30, 29, 31],
+ 1974: [19, 31, 31, 32, 30, 31, 31, 30, 29, 30, 29, 30, 30],
+ 1975: [18, 31, 31, 32, 32, 30, 31, 30, 29, 30, 29, 30, 30],
+ 1976: [17, 31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31],
+ 1977: [18, 31, 32, 31, 32, 31, 31, 29, 30, 29, 30, 29, 31],
+ 1978: [18, 31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30],
+ 1979: [18, 31, 31, 32, 32, 31, 30, 30, 29, 30, 29, 30, 30],
+ 1980: [17, 31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31],
+ 1981: [18, 31, 31, 31, 32, 31, 31, 29, 30, 30, 29, 30, 30],
+ 1982: [18, 31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30],
+ 1983: [18, 31, 31, 32, 32, 31, 30, 30, 29, 30, 29, 30, 30],
+ 1984: [17, 31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31],
+ 1985: [18, 31, 31, 31, 32, 31, 31, 29, 30, 30, 29, 30, 30],
+ 1986: [18, 31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30],
+ 1987: [18, 31, 32, 31, 32, 31, 30, 30, 29, 30, 29, 30, 30],
+ 1988: [17, 31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31],
+ 1989: [18, 31, 31, 31, 32, 31, 31, 30, 29, 30, 29, 30, 30],
+ 1990: [18, 31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30],
+ 1991: [18, 31, 32, 31, 32, 31, 30, 30, 29, 30, 29, 30, 30],
+ // These data are from http://nepalicalendar.rat32.com/index.php
+ 1992: [17, 31, 32, 31, 32, 31, 30, 30, 30, 29, 30, 29, 31],
+ 1993: [18, 31, 31, 31, 32, 31, 31, 30, 29, 30, 29, 30, 30],
+ 1994: [18, 31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30],
+ 1995: [17, 31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 30],
+ 1996: [17, 31, 32, 31, 32, 31, 30, 30, 30, 29, 30, 29, 31],
+ 1997: [18, 31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30],
+ 1998: [18, 31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30],
+ 1999: [17, 31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31],
+ 2000: [17, 30, 32, 31, 32, 31, 30, 30, 30, 29, 30, 29, 31],
+ 2001: [18, 31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30],
+ 2002: [18, 31, 31, 32, 32, 31, 30, 30, 29, 30, 29, 30, 30],
+ 2003: [17, 31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31],
+ 2004: [17, 30, 32, 31, 32, 31, 30, 30, 30, 29, 30, 29, 31],
+ 2005: [18, 31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30],
+ 2006: [18, 31, 31, 32, 32, 31, 30, 30, 29, 30, 29, 30, 30],
+ 2007: [17, 31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31],
+ 2008: [17, 31, 31, 31, 32, 31, 31, 29, 30, 30, 29, 29, 31],
+ 2009: [18, 31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30],
+ 2010: [18, 31, 31, 32, 32, 31, 30, 30, 29, 30, 29, 30, 30],
+ 2011: [17, 31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31],
+ 2012: [17, 31, 31, 31, 32, 31, 31, 29, 30, 30, 29, 30, 30],
+ 2013: [18, 31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30],
+ 2014: [18, 31, 31, 32, 32, 31, 30, 30, 29, 30, 29, 30, 30],
+ 2015: [17, 31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31],
+ 2016: [17, 31, 31, 31, 32, 31, 31, 29, 30, 30, 29, 30, 30],
+ 2017: [18, 31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30],
+ 2018: [18, 31, 32, 31, 32, 31, 30, 30, 29, 30, 29, 30, 30],
+ 2019: [17, 31, 32, 31, 32, 31, 30, 30, 30, 29, 30, 29, 31],
+ 2020: [17, 31, 31, 31, 32, 31, 31, 30, 29, 30, 29, 30, 30],
+ 2021: [18, 31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30],
+ 2022: [17, 31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 30],
+ 2023: [17, 31, 32, 31, 32, 31, 30, 30, 30, 29, 30, 29, 31],
+ 2024: [17, 31, 31, 31, 32, 31, 31, 30, 29, 30, 29, 30, 30],
+ 2025: [18, 31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30],
+ 2026: [17, 31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31],
+ 2027: [17, 30, 32, 31, 32, 31, 30, 30, 30, 29, 30, 29, 31],
+ 2028: [17, 31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30],
+ 2029: [18, 31, 31, 32, 31, 32, 30, 30, 29, 30, 29, 30, 30],
+ 2030: [17, 31, 32, 31, 32, 31, 30, 30, 30, 30, 30, 30, 31],
+ 2031: [17, 31, 32, 31, 32, 31, 31, 31, 31, 31, 31, 31, 31],
+ 2032: [17, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32],
+ 2033: [18, 31, 31, 32, 32, 31, 30, 30, 29, 30, 29, 30, 30],
+ 2034: [17, 31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31],
+ 2035: [17, 30, 32, 31, 32, 31, 31, 29, 30, 30, 29, 29, 31],
+ 2036: [17, 31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30],
+ 2037: [18, 31, 31, 32, 32, 31, 30, 30, 29, 30, 29, 30, 30],
+ 2038: [17, 31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31],
+ 2039: [17, 31, 31, 31, 32, 31, 31, 29, 30, 30, 29, 30, 30],
+ 2040: [17, 31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30],
+ 2041: [18, 31, 31, 32, 32, 31, 30, 30, 29, 30, 29, 30, 30],
+ 2042: [17, 31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31],
+ 2043: [17, 31, 31, 31, 32, 31, 31, 29, 30, 30, 29, 30, 30],
+ 2044: [17, 31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30],
+ 2045: [18, 31, 32, 31, 32, 31, 30, 30, 29, 30, 29, 30, 30],
+ 2046: [17, 31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31],
+ 2047: [17, 31, 31, 31, 32, 31, 31, 30, 29, 30, 29, 30, 30],
+ 2048: [17, 31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30],
+ 2049: [17, 31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 30],
+ 2050: [17, 31, 32, 31, 32, 31, 30, 30, 30, 29, 30, 29, 31],
+ 2051: [17, 31, 31, 31, 32, 31, 31, 30, 29, 30, 29, 30, 30],
+ 2052: [17, 31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30],
+ 2053: [17, 31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 30],
+ 2054: [17, 31, 32, 31, 32, 31, 30, 30, 30, 29, 30, 29, 31],
+ 2055: [17, 31, 31, 32, 31, 31, 31, 30, 29, 30, 30, 29, 30],
+ 2056: [17, 31, 31, 32, 31, 32, 30, 30, 29, 30, 29, 30, 30],
+ 2057: [17, 31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31],
+ 2058: [17, 30, 32, 31, 32, 31, 30, 30, 30, 29, 30, 29, 31],
+ 2059: [17, 31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30],
+ 2060: [17, 31, 31, 32, 32, 31, 30, 30, 29, 30, 29, 30, 30],
+ 2061: [17, 31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31],
+ 2062: [17, 30, 32, 31, 32, 31, 31, 29, 30, 29, 30, 29, 31],
+ 2063: [17, 31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30],
+ 2064: [17, 31, 31, 32, 32, 31, 30, 30, 29, 30, 29, 30, 30],
+ 2065: [17, 31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31],
+ 2066: [17, 31, 31, 31, 32, 31, 31, 29, 30, 30, 29, 29, 31],
+ 2067: [17, 31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30],
+ 2068: [17, 31, 31, 32, 32, 31, 30, 30, 29, 30, 29, 30, 30],
+ 2069: [17, 31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31],
+ 2070: [17, 31, 31, 31, 32, 31, 31, 29, 30, 30, 29, 30, 30],
+ 2071: [17, 31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30],
+ 2072: [17, 31, 32, 31, 32, 31, 30, 30, 29, 30, 29, 30, 30],
+ 2073: [17, 31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31],
+ 2074: [17, 31, 31, 31, 32, 31, 31, 30, 29, 30, 29, 30, 30],
+ 2075: [17, 31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30],
+ 2076: [16, 31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 30],
+ 2077: [17, 31, 32, 31, 32, 31, 30, 30, 30, 29, 30, 29, 31],
+ 2078: [17, 31, 31, 31, 32, 31, 31, 30, 29, 30, 29, 30, 30],
+ 2079: [17, 31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30],
+ 2080: [16, 31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 30],
+ // These data are from http://www.ashesh.com.np/nepali-calendar/
+ 2081: [17, 31, 31, 32, 32, 31, 30, 30, 30, 29, 30, 30, 30],
+ 2082: [17, 31, 32, 31, 32, 31, 30, 30, 30, 29, 30, 30, 30],
+ 2083: [17, 31, 31, 32, 31, 31, 30, 30, 30, 29, 30, 30, 30],
+ 2084: [17, 31, 31, 32, 31, 31, 30, 30, 30, 29, 30, 30, 30],
+ 2085: [17, 31, 32, 31, 32, 31, 31, 30, 30, 29, 30, 30, 30],
+ 2086: [17, 31, 32, 31, 32, 31, 30, 30, 30, 29, 30, 30, 30],
+ 2087: [16, 31, 31, 32, 31, 31, 31, 30, 30, 29, 30, 30, 30],
+ 2088: [16, 30, 31, 32, 32, 30, 31, 30, 30, 29, 30, 30, 30],
+ 2089: [17, 31, 32, 31, 32, 31, 30, 30, 30, 29, 30, 30, 30],
+ 2090: [17, 31, 32, 31, 32, 31, 30, 30, 30, 29, 30, 30, 30],
+ 2091: [16, 31, 31, 32, 31, 31, 31, 30, 30, 29, 30, 30, 30],
+ 2092: [16, 31, 31, 32, 32, 31, 30, 30, 30, 29, 30, 30, 30],
+ 2093: [17, 31, 32, 31, 32, 31, 30, 30, 30, 29, 30, 30, 30],
+ 2094: [17, 31, 31, 32, 31, 31, 30, 30, 30, 29, 30, 30, 30],
+ 2095: [17, 31, 31, 32, 31, 31, 31, 30, 29, 30, 30, 30, 30],
+ 2096: [17, 30, 31, 32, 32, 31, 30, 30, 29, 30, 29, 30, 30],
+ 2097: [17, 31, 32, 31, 32, 31, 30, 30, 30, 29, 30, 30, 30],
+ 2098: [17, 31, 31, 32, 31, 31, 31, 29, 30, 29, 30, 30, 31],
+ 2099: [17, 31, 31, 32, 31, 31, 31, 30, 29, 29, 30, 30, 30],
+ 2100: [17, 31, 32, 31, 32, 30, 31, 30, 29, 30, 29, 30, 30]
+ }
+});
+
+// Nepali calendar implementation
+main.calendars.nepali = NepaliCalendar;
+
diff --git a/dist/calendars/persian-fa.js b/dist/calendars/persian-fa.js
new file mode 100644
index 0000000..6c5403d
--- /dev/null
+++ b/dist/calendars/persian-fa.js
@@ -0,0 +1,31 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Farsi/Persian localisation for Persian calendar for jQuery v2.0.2.
+ Written by Sajjad Servatjoo (sajjad.servatjoo{at}gmail.com) April 2011. */
+var main = require('../main');
+
+main.calendars.persian.prototype.regionalOptions['fa'] = {
+ name: 'Persian',
+ epochs: ['BP', 'AP'],
+ monthNames: ['فروردین', 'اردیبهشت', 'خرداد', 'تیر', 'مرداد', 'شهریور',
+ 'مهر', 'آبان', 'آذر', 'دی', 'بهمن', 'اسفند'],
+ monthNamesShort: ['فروردین', 'اردیبهشت', 'خرداد', 'تیر', 'مرداد', 'شهریور',
+ 'مهر', 'آبان', 'آذر', 'دی', 'بهمن', 'اسفند'],
+ dayNames: ['يک شنبه', 'دوشنبه', 'سه شنبه', 'چهار شنبه', 'پنج شنبه', 'جمعه', 'شنبه'],
+ dayNamesShort: ['يک', 'دو', 'سه', 'چهار', 'پنج', 'جمعه', 'شنبه'],
+ dayNamesMin: ['ي', 'د', 'س', 'چ', 'پ', 'ج', 'ش'],
+ digits: main.substituteDigits(['۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹']),
+ dateFormat: 'yyyy/mm/dd',
+ firstDay: 6,
+ isRTL: true
+};
diff --git a/dist/calendars/persian.js b/dist/calendars/persian.js
new file mode 100644
index 0000000..7aafc60
--- /dev/null
+++ b/dist/calendars/persian.js
@@ -0,0 +1,188 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Persian calendar for jQuery v2.0.2.
+ Written by Keith Wood (wood.keith{at}optusnet.com.au) August 2009.
+ Available under the MIT (http://keith-wood.name/licence.html) license.
+ Please attribute the author if you use it. */
+
+var main = require('../main');
+var assign = require('object-assign');
+
+
+/** Implementation of the Persian or Jalali calendar.
+ Based on code from http://www.iranchamber.com/calendar/converter/iranian_calendar_converter.php.
+ See also http://en.wikipedia.org/wiki/Iranian_calendar.
+ @class PersianCalendar
+ @param [language=''] {string} The language code (default English) for localisation. */
+function PersianCalendar(language) {
+ this.local = this.regionalOptions[language || ''] || this.regionalOptions[''];
+}
+
+PersianCalendar.prototype = new main.baseCalendar;
+
+assign(PersianCalendar.prototype, {
+ /** The calendar name.
+ @memberof PersianCalendar */
+ name: 'Persian',
+ /** Julian date of start of Persian epoch: 19 March 622 CE.
+ @memberof PersianCalendar */
+ jdEpoch: 1948320.5,
+ /** Days per month in a common year.
+ @memberof PersianCalendar */
+ daysPerMonth: [31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29],
+ /** true if has a year zero, false if not.
+ @memberof PersianCalendar */
+ hasYearZero: false,
+ /** The minimum month number.
+ @memberof PersianCalendar */
+ minMonth: 1,
+ /** The first month in the year.
+ @memberof PersianCalendar */
+ firstMonth: 1,
+ /** The minimum day number.
+ @memberof PersianCalendar */
+ minDay: 1,
+
+ /** Localisations for the plugin.
+ Entries are objects indexed by the language code ('' being the default US/English).
+ Each object has the following attributes.
+ @memberof PersianCalendar
+ @property name {string} The calendar name.
+ @property epochs {string[]} The epoch names.
+ @property monthNames {string[]} The long names of the months of the year.
+ @property monthNamesShort {string[]} The short names of the months of the year.
+ @property dayNames {string[]} The long names of the days of the week.
+ @property dayNamesShort {string[]} The short names of the days of the week.
+ @property dayNamesMin {string[]} The minimal names of the days of the week.
+ @property dateFormat {string} The date format for this calendar.
+ See the options on formatDate for details.
+ @property firstDay {number} The number of the first day of the week, starting at 0.
+ @property isRTL {number} true if this localisation reads right-to-left. */
+ regionalOptions: { // Localisations
+ '': {
+ name: 'Persian',
+ epochs: ['BP', 'AP'],
+ monthNames: ['Farvardin', 'Ordibehesht', 'Khordad', 'Tir', 'Mordad', 'Shahrivar',
+ 'Mehr', 'Aban', 'Azar', 'Day', 'Bahman', 'Esfand'],
+ monthNamesShort: ['Far', 'Ord', 'Kho', 'Tir', 'Mor', 'Sha', 'Meh', 'Aba', 'Aza', 'Day', 'Bah', 'Esf'],
+ dayNames: ['Yekshambe', 'Doshambe', 'Seshambe', 'Chæharshambe', 'Panjshambe', 'Jom\'e', 'Shambe'],
+ dayNamesShort: ['Yek', 'Do', 'Se', 'Chæ', 'Panj', 'Jom', 'Sha'],
+ dayNamesMin: ['Ye','Do','Se','Ch','Pa','Jo','Sh'],
+ digits: null,
+ dateFormat: 'yyyy/mm/dd',
+ firstDay: 6,
+ isRTL: false
+ }
+ },
+
+ /** Determine whether this date is in a leap year.
+ @memberof PersianCalendar
+ @param year {CDate|number} The date to examine or the year to examine.
+ @return {boolean} true if this is a leap year, false if not.
+ @throws Error if an invalid year or a different calendar used. */
+ leapYear: function(year) {
+ var date = this._validate(year, this.minMonth, this.minDay, main.local.invalidYear);
+ return (((((date.year() - (date.year() > 0 ? 474 : 473)) % 2820) +
+ 474 + 38) * 682) % 2816) < 682;
+ },
+
+ /** Determine the week of the year for a date.
+ @memberof PersianCalendar
+ @param year {CDate|number} The date to examine or the year to examine.
+ @param [month] {number} The month to examine.
+ @param [day] {number} The day to examine.
+ @return {number} The week of the year.
+ @throws Error if an invalid date or a different calendar used. */
+ weekOfYear: function(year, month, day) {
+ // Find Saturday of this week starting on Saturday
+ var checkDate = this.newDate(year, month, day);
+ checkDate.add(-((checkDate.dayOfWeek() + 1) % 7), 'd');
+ return Math.floor((checkDate.dayOfYear() - 1) / 7) + 1;
+ },
+
+ /** Retrieve the number of days in a month.
+ @memberof PersianCalendar
+ @param year {CDate|number} The date to examine or the year of the month.
+ @param [month] {number} The month.
+ @return {number} The number of days in this month.
+ @throws Error if an invalid month/year or a different calendar used. */
+ daysInMonth: function(year, month) {
+ var date = this._validate(year, month, this.minDay, main.local.invalidMonth);
+ return this.daysPerMonth[date.month() - 1] +
+ (date.month() === 12 && this.leapYear(date.year()) ? 1 : 0);
+ },
+
+ /** Determine whether this date is a week day.
+ @memberof PersianCalendar
+ @param year {CDate|number} The date to examine or the year to examine.
+ @param [month] {number} The month to examine.
+ @param [day] {number} The day to examine.
+ @return {boolean} true if a week day, false if not.
+ @throws Error if an invalid date or a different calendar used. */
+ weekDay: function(year, month, day) {
+ return this.dayOfWeek(year, month, day) !== 5;
+ },
+
+ /** Retrieve the Julian date equivalent for this date,
+ i.e. days since January 1, 4713 BCE Greenwich noon.
+ @memberof PersianCalendar
+ @param year {CDate|number} The date to convert or the year to convert.
+ @param [month] {number} The month to convert.
+ @param [day] {number} The day to convert.
+ @return {number} The equivalent Julian date.
+ @throws Error if an invalid date or a different calendar used. */
+ toJD: function(year, month, day) {
+ var date = this._validate(year, month, day, main.local.invalidDate);
+ year = date.year();
+ month = date.month();
+ day = date.day();
+ var epBase = year - (year >= 0 ? 474 : 473);
+ var epYear = 474 + mod(epBase, 2820);
+ return day + (month <= 7 ? (month - 1) * 31 : (month - 1) * 30 + 6) +
+ Math.floor((epYear * 682 - 110) / 2816) + (epYear - 1) * 365 +
+ Math.floor(epBase / 2820) * 1029983 + this.jdEpoch - 1;
+ },
+
+ /** Create a new date from a Julian date.
+ @memberof PersianCalendar
+ @param jd {number} The Julian date to convert.
+ @return {CDate} The equivalent date. */
+ fromJD: function(jd) {
+ jd = Math.floor(jd) + 0.5;
+ var depoch = jd - this.toJD(475, 1, 1);
+ var cycle = Math.floor(depoch / 1029983);
+ var cyear = mod(depoch, 1029983);
+ var ycycle = 2820;
+ if (cyear !== 1029982) {
+ var aux1 = Math.floor(cyear / 366);
+ var aux2 = mod(cyear, 366);
+ ycycle = Math.floor(((2134 * aux1) + (2816 * aux2) + 2815) / 1028522) + aux1 + 1;
+ }
+ var year = ycycle + (2820 * cycle) + 474;
+ year = (year <= 0 ? year - 1 : year);
+ var yday = jd - this.toJD(year, 1, 1) + 1;
+ var month = (yday <= 186 ? Math.ceil(yday / 31) : Math.ceil((yday - 6) / 30));
+ var day = jd - this.toJD(year, month, 1) + 1;
+ return this.newDate(year, month, day);
+ }
+});
+
+// Modulus function which works for non-integers.
+function mod(a, b) {
+ return a - (b * Math.floor(a / b));
+}
+
+// Persian (Jalali) calendar implementation
+main.calendars.persian = PersianCalendar;
+main.calendars.jalali = PersianCalendar;
+
diff --git a/dist/calendars/taiwan-zh-TW.js b/dist/calendars/taiwan-zh-TW.js
new file mode 100644
index 0000000..2ae8508
--- /dev/null
+++ b/dist/calendars/taiwan-zh-TW.js
@@ -0,0 +1,31 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Traditional Chinese localisation for Taiwanese calendars for jQuery v2.0.2.
+ Written by Ressol (ressol@gmail.com). */
+var main = require('../main');
+
+main.calendars.taiwan.prototype.regionalOptions['zh-TW'] = {
+ name: 'Taiwan',
+ epochs: ['BROC', 'ROC'],
+ monthNames: ['一月','二月','三月','四月','五月','六月',
+ '七月','八月','九月','十月','十一月','十二月'],
+ monthNamesShort: ['一','二','三','四','五','六',
+ '七','八','九','十','十一','十二'],
+ dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'],
+ dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'],
+ dayNamesMin: ['日','一','二','三','四','五','六'],
+ digits: null,
+ dateFormat: 'yyyy/mm/dd',
+ firstDay: 1,
+ isRTL: false
+};
diff --git a/dist/calendars/taiwan.js b/dist/calendars/taiwan.js
new file mode 100644
index 0000000..548d814
--- /dev/null
+++ b/dist/calendars/taiwan.js
@@ -0,0 +1,184 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Taiwanese (Minguo) calendar for jQuery v2.0.2.
+ Written by Keith Wood (wood.keith{at}optusnet.com.au) February 2010.
+ Available under the MIT (http://keith-wood.name/licence.html) license.
+ Please attribute the author if you use it. */
+
+var main = require('../main');
+var assign = require('object-assign');
+
+
+var gregorianCalendar = main.instance();
+
+/** Implementation of the Taiwanese calendar.
+ See http://en.wikipedia.org/wiki/Minguo_calendar.
+ @class TaiwanCalendar
+ @param [language=''] {string} The language code (default English) for localisation. */
+function TaiwanCalendar(language) {
+ this.local = this.regionalOptions[language || ''] || this.regionalOptions[''];
+}
+
+TaiwanCalendar.prototype = new main.baseCalendar;
+
+assign(TaiwanCalendar.prototype, {
+ /** The calendar name.
+ @memberof TaiwanCalendar */
+ name: 'Taiwan',
+ /** Julian date of start of Taiwan epoch: 1 January 1912 CE (Gregorian).
+ @memberof TaiwanCalendar */
+ jdEpoch: 2419402.5,
+ /** Difference in years between Taiwan and Gregorian calendars.
+ @memberof TaiwanCalendar */
+ yearsOffset: 1911,
+ /** Days per month in a common year.
+ @memberof TaiwanCalendar */
+ daysPerMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],
+ /** true if has a year zero, false if not.
+ @memberof TaiwanCalendar */
+ hasYearZero: false,
+ /** The minimum month number.
+ @memberof TaiwanCalendar */
+ minMonth: 1,
+ /** The first month in the year.
+ @memberof TaiwanCalendar */
+ firstMonth: 1,
+ /** The minimum day number.
+ @memberof TaiwanCalendar */
+ minDay: 1,
+
+ /** Localisations for the plugin.
+ Entries are objects indexed by the language code ('' being the default US/English).
+ Each object has the following attributes.
+ @memberof TaiwanCalendar
+ @property name {string} The calendar name.
+ @property epochs {string[]} The epoch names.
+ @property monthNames {string[]} The long names of the months of the year.
+ @property monthNamesShort {string[]} The short names of the months of the year.
+ @property dayNames {string[]} The long names of the days of the week.
+ @property dayNamesShort {string[]} The short names of the days of the week.
+ @property dayNamesMin {string[]} The minimal names of the days of the week.
+ @property dateFormat {string} The date format for this calendar.
+ See the options on formatDate for details.
+ @property firstDay {number} The number of the first day of the week, starting at 0.
+ @property isRTL {number} true if this localisation reads right-to-left. */
+ regionalOptions: { // Localisations
+ '': {
+ name: 'Taiwan',
+ epochs: ['BROC', 'ROC'],
+ monthNames: ['January', 'February', 'March', 'April', 'May', 'June',
+ 'July', 'August', 'September', 'October', 'November', 'December'],
+ monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
+ dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
+ dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
+ dayNamesMin: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],
+ digits: null,
+ dateFormat: 'yyyy/mm/dd',
+ firstDay: 1,
+ isRTL: false
+ }
+ },
+
+ /** Determine whether this date is in a leap year.
+ @memberof TaiwanCalendar
+ @param year {CDate|number} The date to examine or the year to examine.
+ @return {boolean} true if this is a leap year, false if not.
+ @throws Error if an invalid year or a different calendar used. */
+ leapYear: function(year) {
+ var date = this._validate(year, this.minMonth, this.minDay, main.local.invalidYear);
+ var year = this._t2gYear(date.year());
+ return gregorianCalendar.leapYear(year);
+ },
+
+ /** Determine the week of the year for a date - ISO 8601.
+ @memberof TaiwanCalendar
+ @param year {CDate|number} The date to examine or the year to examine.
+ @param [month] {number} The month to examine.
+ @param [day] {number} The day to examine.
+ @return {number} The week of the year.
+ @throws Error if an invalid date or a different calendar used. */
+ weekOfYear: function(year, month, day) {
+ var date = this._validate(year, this.minMonth, this.minDay, main.local.invalidYear);
+ var year = this._t2gYear(date.year());
+ return gregorianCalendar.weekOfYear(year, date.month(), date.day());
+ },
+
+ /** Retrieve the number of days in a month.
+ @memberof TaiwanCalendar
+ @param year {CDate|number} The date to examine or the year of the month.
+ @param [month] {number} The month.
+ @return {number} The number of days in this month.
+ @throws Error if an invalid month/year or a different calendar used. */
+ daysInMonth: function(year, month) {
+ var date = this._validate(year, month, this.minDay, main.local.invalidMonth);
+ return this.daysPerMonth[date.month() - 1] +
+ (date.month() === 2 && this.leapYear(date.year()) ? 1 : 0);
+ },
+
+ /** Determine whether this date is a week day.
+ @memberof TaiwanCalendar
+ @param year {CDate|number} The date to examine or the year to examine.
+ @param [month] {number} The month to examine.
+ @param [day] {number} The day to examine.
+ @return {boolean} true if a week day, false if not.
+ @throws Error if an invalid date or a different calendar used. */
+ weekDay: function(year, month, day) {
+ return (this.dayOfWeek(year, month, day) || 7) < 6;
+ },
+
+ /** Retrieve the Julian date equivalent for this date,
+ i.e. days since January 1, 4713 BCE Greenwich noon.
+ @memberof TaiwanCalendar
+ @param year {CDate|number} The date to convert or the year to convert.
+ @param [month] {number} The month to convert.
+ @param [day] {number} The day to convert.
+ @return {number} The equivalent Julian date.
+ @throws Error if an invalid date or a different calendar used. */
+ toJD: function(year, month, day) {
+ var date = this._validate(year, month, day, main.local.invalidDate);
+ var year = this._t2gYear(date.year());
+ return gregorianCalendar.toJD(year, date.month(), date.day());
+ },
+
+ /** Create a new date from a Julian date.
+ @memberof TaiwanCalendar
+ @param jd {number} The Julian date to convert.
+ @return {CDate} The equivalent date. */
+ fromJD: function(jd) {
+ var date = gregorianCalendar.fromJD(jd);
+ var year = this._g2tYear(date.year());
+ return this.newDate(year, date.month(), date.day());
+ },
+
+ /** Convert Taiwanese to Gregorian year.
+ @memberof TaiwanCalendar
+ @private
+ @param year {number} The Taiwanese year.
+ @return {number} The corresponding Gregorian year. */
+ _t2gYear: function(year) {
+ return year + this.yearsOffset + (year >= -this.yearsOffset && year <= -1 ? 1 : 0);
+ },
+
+ /** Convert Gregorian to Taiwanese year.
+ @memberof TaiwanCalendar
+ @private
+ @param year {number} The Gregorian year.
+ @return {number} The corresponding Taiwanese year. */
+ _g2tYear: function(year) {
+ return year - this.yearsOffset - (year >= 1 && year <= this.yearsOffset ? 1 : 0);
+ }
+});
+
+// Taiwan calendar implementation
+main.calendars.taiwan = TaiwanCalendar;
+
diff --git a/dist/calendars/thai-th.js b/dist/calendars/thai-th.js
new file mode 100644
index 0000000..ceed7fd
--- /dev/null
+++ b/dist/calendars/thai-th.js
@@ -0,0 +1,31 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Thai localisation for Thai calendars for jQuery v2.0.2.
+ Written by pipo (pipo@sixhead.com). */
+var main = require('../main');
+
+main.calendars.thai.prototype.regionalOptions['th'] = {
+ name: 'Thai',
+ epochs: ['BBE', 'BE'],
+ monthNames: ['มกราคม','กุมภาพันธ์','มีนาคม','เมษายน','พฤษภาคม','มิถุนายน',
+ 'กรกฎาคม','สิงหาคม','กันยายน','ตุลาคม','พฤศจิกายน','ธันวาคม'],
+ monthNamesShort: ['ม.ค.','ก.พ.','มี.ค.','เม.ย.','พ.ค.','มิ.ย.',
+ 'ก.ค.','ส.ค.','ก.ย.','ต.ค.','พ.ย.','ธ.ค.'],
+ dayNames: ['อาทิตย์','จันทร์','อังคาร','พุธ','พฤหัสบดี','ศุกร์','เสาร์'],
+ dayNamesShort: ['อา.','จ.','อ.','พ.','พฤ.','ศ.','ส.'],
+ dayNamesMin: ['อา.','จ.','อ.','พ.','พฤ.','ศ.','ส.'],
+ digits: null,
+ dateFormat: 'dd/mm/yyyy',
+ firstDay: 0,
+ isRTL: false
+};
diff --git a/dist/calendars/thai.js b/dist/calendars/thai.js
new file mode 100644
index 0000000..250e52f
--- /dev/null
+++ b/dist/calendars/thai.js
@@ -0,0 +1,184 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Thai calendar for jQuery v2.0.2.
+ Written by Keith Wood (wood.keith{at}optusnet.com.au) February 2010.
+ Available under the MIT (http://keith-wood.name/licence.html) license.
+ Please attribute the author if you use it. */
+
+var main = require('../main');
+var assign = require('object-assign');
+
+
+var gregorianCalendar = main.instance();
+
+/** Implementation of the Thai calendar.
+ See http://en.wikipedia.org/wiki/Thai_calendar.
+ @class ThaiCalendar
+ @param [language=''] {string} The language code (default English) for localisation. */
+function ThaiCalendar(language) {
+ this.local = this.regionalOptions[language || ''] || this.regionalOptions[''];
+}
+
+ThaiCalendar.prototype = new main.baseCalendar;
+
+assign(ThaiCalendar.prototype, {
+ /** The calendar name.
+ @memberof ThaiCalendar */
+ name: 'Thai',
+ /** Julian date of start of Thai epoch: 1 January 543 BCE (Gregorian).
+ @memberof ThaiCalendar */
+ jdEpoch: 1523098.5,
+ /** Difference in years between Thai and Gregorian calendars.
+ @memberof ThaiCalendar */
+ yearsOffset: 543,
+ /** Days per month in a common year.
+ @memberof ThaiCalendar */
+ daysPerMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],
+ /** true if has a year zero, false if not.
+ @memberof ThaiCalendar */
+ hasYearZero: false,
+ /** The minimum month number.
+ @memberof ThaiCalendar */
+ minMonth: 1,
+ /** The first month in the year.
+ @memberof ThaiCalendar */
+ firstMonth: 1,
+ /** The minimum day number.
+ @memberof ThaiCalendar */
+ minDay: 1,
+
+ /** Localisations for the plugin.
+ Entries are objects indexed by the language code ('' being the default US/English).
+ Each object has the following attributes.
+ @memberof ThaiCalendar
+ @property name {string} The calendar name.
+ @property epochs {string[]} The epoch names.
+ @property monthNames {string[]} The long names of the months of the year.
+ @property monthNamesShort {string[]} The short names of the months of the year.
+ @property dayNames {string[]} The long names of the days of the week.
+ @property dayNamesShort {string[]} The short names of the days of the week.
+ @property dayNamesMin {string[]} The minimal names of the days of the week.
+ @property dateFormat {string} The date format for this calendar.
+ See the options on formatDate for details.
+ @property firstDay {number} The number of the first day of the week, starting at 0.
+ @property isRTL {number} true if this localisation reads right-to-left. */
+ regionalOptions: { // Localisations
+ '': {
+ name: 'Thai',
+ epochs: ['BBE', 'BE'],
+ monthNames: ['January', 'February', 'March', 'April', 'May', 'June',
+ 'July', 'August', 'September', 'October', 'November', 'December'],
+ monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
+ dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
+ dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
+ dayNamesMin: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],
+ digits: null,
+ dateFormat: 'dd/mm/yyyy',
+ firstDay: 0,
+ isRTL: false
+ }
+ },
+
+ /** Determine whether this date is in a leap year.
+ @memberof ThaiCalendar
+ @param year {CDate|number} The date to examine or the year to examine.
+ @return {boolean} true if this is a leap year, false if not.
+ @throws Error if an invalid year or a different calendar used. */
+ leapYear: function(year) {
+ var date = this._validate(year, this.minMonth, this.minDay, main.local.invalidYear);
+ var year = this._t2gYear(date.year());
+ return gregorianCalendar.leapYear(year);
+ },
+
+ /** Determine the week of the year for a date - ISO 8601.
+ @memberof ThaiCalendar
+ @param year {CDate|number} The date to examine or the year to examine.
+ @param [month] {number} The month to examine.
+ @param [day] {number} The day to examine.
+ @return {number} The week of the year.
+ @throws Error if an invalid date or a different calendar used. */
+ weekOfYear: function(year, month, day) {
+ var date = this._validate(year, this.minMonth, this.minDay, main.local.invalidYear);
+ var year = this._t2gYear(date.year());
+ return gregorianCalendar.weekOfYear(year, date.month(), date.day());
+ },
+
+ /** Retrieve the number of days in a month.
+ @memberof ThaiCalendar
+ @param year {CDate|number} The date to examine or the year of the month.
+ @param [month] {number} The month.
+ @return {number} The number of days in this month.
+ @throws Error if an invalid month/year or a different calendar used. */
+ daysInMonth: function(year, month) {
+ var date = this._validate(year, month, this.minDay, main.local.invalidMonth);
+ return this.daysPerMonth[date.month() - 1] +
+ (date.month() === 2 && this.leapYear(date.year()) ? 1 : 0);
+ },
+
+ /** Determine whether this date is a week day.
+ @memberof ThaiCalendar
+ @param year {CDate|number} The date to examine or the year to examine.
+ @param [month] {number} The month to examine.
+ @param [day] {number} The day to examine.
+ @return {boolean} true if a week day, false if not.
+ @throws Error if an invalid date or a different calendar used. */
+ weekDay: function(year, month, day) {
+ return (this.dayOfWeek(year, month, day) || 7) < 6;
+ },
+
+ /** Retrieve the Julian date equivalent for this date,
+ i.e. days since January 1, 4713 BCE Greenwich noon.
+ @memberof ThaiCalendar
+ @param year {CDate|number} The date to convert or the year to convert.
+ @param [month] {number} The month to convert.
+ @param [day] {number} The day to convert.
+ @return {number} The equivalent Julian date.
+ @throws Error if an invalid date or a different calendar used. */
+ toJD: function(year, month, day) {
+ var date = this._validate(year, month, day, main.local.invalidDate);
+ var year = this._t2gYear(date.year());
+ return gregorianCalendar.toJD(year, date.month(), date.day());
+ },
+
+ /** Create a new date from a Julian date.
+ @memberof ThaiCalendar
+ @param jd {number} The Julian date to convert.
+ @return {CDate} The equivalent date. */
+ fromJD: function(jd) {
+ var date = gregorianCalendar.fromJD(jd);
+ var year = this._g2tYear(date.year());
+ return this.newDate(year, date.month(), date.day());
+ },
+
+ /** Convert Thai to Gregorian year.
+ @memberof ThaiCalendar
+ @private
+ @param year {number} The Thai year.
+ @return {number} The corresponding Gregorian year. */
+ _t2gYear: function(year) {
+ return year - this.yearsOffset - (year >= 1 && year <= this.yearsOffset ? 1 : 0);
+ },
+
+ /** Convert Gregorian to Thai year.
+ @memberof ThaiCalendar
+ @private
+ @param year {number} The Gregorian year.
+ @return {number} The corresponding Thai year. */
+ _g2tYear: function(year) {
+ return year + this.yearsOffset + (year >= -this.yearsOffset && year <= -1 ? 1 : 0);
+ }
+});
+
+// Thai calendar implementation
+main.calendars.thai = ThaiCalendar;
+
diff --git a/dist/calendars/ummalqura-ar.js b/dist/calendars/ummalqura-ar.js
new file mode 100644
index 0000000..22ad773
--- /dev/null
+++ b/dist/calendars/ummalqura-ar.js
@@ -0,0 +1,29 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Arabic localisation for UmmAlQura calendar for jQuery v2.0.2.
+ Written by Amro Osama March 2013. */
+var main = require('../main');
+
+main.calendars.ummalqura.prototype.regionalOptions['ar'] = {
+ name: 'UmmAlQura', // The calendar name
+ epochs: ['BAM', 'AM'],
+ monthNames: ['المحرّم', 'صفر', 'ربيع الأول', 'ربيع الثاني', 'جمادى الاول', 'جمادى الآخر', 'رجب', 'شعبان', 'رمضان', 'شوّال', 'ذو القعدة', 'ذو الحجة'],
+ monthNamesShort: ['المحرّم', 'صفر', 'ربيع الأول', 'ربيع الثاني', 'جمادى الاول', 'جمادى الآخر', 'رجب', 'شعبان', 'رمضان', 'شوّال', 'ذو القعدة', 'ذو الحجة'],
+ dayNames: ['الأحد', 'الإثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
+ dayNamesMin: ['الأحد', 'الإثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
+ dayNamesShort: ['الأحد', 'الإثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
+ digits: main.substituteDigits(['٠', '١', '٢', '٣', '٤', '٥', '٦', '٧', '٨', '٩']),
+ dateFormat: 'yyyy/mm/dd', // See format options on BaseCalendar.formatDate
+ firstDay: 6, // The first day of the week, Sat = 0, Sun = 1, ...
+ isRTL: true // True if right-to-left language, false if left-to-right
+};
diff --git a/dist/calendars/ummalqura.js b/dist/calendars/ummalqura.js
new file mode 100644
index 0000000..aef3038
--- /dev/null
+++ b/dist/calendars/ummalqura.js
@@ -0,0 +1,363 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ UmmAlQura calendar for jQuery v2.0.2.
+ Written by Amro Osama March 2013.
+ Modified by Binnooh.com & www.elm.sa - 2014 - Added dates back to 1276 Hijri year.
+ Available under the MIT (http://keith-wood.name/licence.html) license.
+ Please attribute the author if you use it. */
+
+var main = require('../main');
+var assign = require('object-assign');
+
+
+/** Implementation of the UmmAlQura or 'saudi' calendar.
+ See also http://en.wikipedia.org/wiki/Islamic_calendar#Saudi_Arabia.27s_Umm_al-Qura_calendar.
+ http://www.ummulqura.org.sa/About.aspx
+ http://www.staff.science.uu.nl/~gent0113/islam/ummalqura.htm
+ @class UmmAlQuraCalendar
+ @param [language=''] {string} The language code (default English) for localisation. */
+function UmmAlQuraCalendar(language) {
+ this.local = this.regionalOptions[language || ''] || this.regionalOptions[''];
+}
+
+UmmAlQuraCalendar.prototype = new main.baseCalendar;
+
+assign(UmmAlQuraCalendar.prototype, {
+ /** The calendar name.
+ @memberof UmmAlQuraCalendar */
+ name: 'UmmAlQura',
+ //jdEpoch: 1948440, // Julian date of start of UmmAlQura epoch: 14 March 1937 CE
+ //daysPerMonth: // Days per month in a common year, replaced by a method.
+ /** true if has a year zero, false if not.
+ @memberof UmmAlQuraCalendar */
+ hasYearZero: false,
+ /** The minimum month number.
+ @memberof UmmAlQuraCalendar */
+ minMonth: 1,
+ /** The first month in the year.
+ @memberof UmmAlQuraCalendar */
+ firstMonth: 1,
+ /** The minimum day number.
+ @memberof UmmAlQuraCalendar */
+ minDay: 1,
+
+ /** Localisations for the plugin.
+ Entries are objects indexed by the language code ('' being the default US/English).
+ Each object has the following attributes.
+ @memberof UmmAlQuraCalendar
+ @property name {string} The calendar name.
+ @property epochs {string[]} The epoch names.
+ @property monthNames {string[]} The long names of the months of the year.
+ @property monthNamesShort {string[]} The short names of the months of the year.
+ @property dayNames {string[]} The long names of the days of the week.
+ @property dayNamesShort {string[]} The short names of the days of the week.
+ @property dayNamesMin {string[]} The minimal names of the days of the week.
+ @property dateFormat {string} The date format for this calendar.
+ See the options on formatDate for details.
+ @property firstDay {number} The number of the first day of the week, starting at 0.
+ @property isRTL {number} true if this localisation reads right-to-left. */
+ regionalOptions: { // Localisations
+ '': {
+ name: 'Umm al-Qura',
+ epochs: ['BH', 'AH'],
+ monthNames: ['Al-Muharram', 'Safar', 'Rabi\' al-awwal', 'Rabi\' Al-Thani', 'Jumada Al-Awwal', 'Jumada Al-Thani',
+ 'Rajab', 'Sha\'aban', 'Ramadan', 'Shawwal', 'Dhu al-Qi\'dah', 'Dhu al-Hijjah'],
+ monthNamesShort: ['Muh', 'Saf', 'Rab1', 'Rab2', 'Jum1', 'Jum2', 'Raj', 'Sha\'', 'Ram', 'Shaw', 'DhuQ', 'DhuH'],
+ dayNames: ['Yawm al-Ahad', 'Yawm al-Ithnain', 'Yawm al-Thalāthā’', 'Yawm al-Arba‘ā’', 'Yawm al-Khamīs', 'Yawm al-Jum‘a', 'Yawm al-Sabt'],
+ dayNamesMin: ['Ah', 'Ith', 'Th', 'Ar', 'Kh', 'Ju', 'Sa'],
+ digits: null,
+ dateFormat: 'yyyy/mm/dd',
+ firstDay: 6,
+ isRTL: true
+ }
+ },
+
+ /** Determine whether this date is in a leap year.
+ @memberof UmmAlQuraCalendar
+ @param year {CDate|number} The date to examine or the year to examine.
+ @return {boolean} true if this is a leap year, false if not.
+ @throws Error if an invalid year or a different calendar used. */
+ leapYear: function (year) {
+ var date = this._validate(year, this.minMonth, this.minDay, main.local.invalidYear);
+ return (this.daysInYear(date.year()) === 355);
+ },
+
+ /** Determine the week of the year for a date.
+ @memberof UmmAlQuraCalendar
+ @param year {CDate|number} The date to examine or the year to examine.
+ @param [month] {number} The month to examine.
+ @param [day] {number} The day to examine.
+ @return {number} The week of the year.
+ @throws Error if an invalid date or a different calendar used. */
+ weekOfYear: function (year, month, day) {
+ // Find Sunday of this week starting on Sunday
+ var checkDate = this.newDate(year, month, day);
+ checkDate.add(-checkDate.dayOfWeek(), 'd');
+ return Math.floor((checkDate.dayOfYear() - 1) / 7) + 1;
+ },
+
+ /** Retrieve the number of days in a year.
+ @memberof UmmAlQuraCalendar
+ @param year {CDate|number} The date to examine or the year to examine.
+ @return {number} The number of days.
+ @throws Error if an invalid year or a different calendar used. */
+ daysInYear: function (year) {
+ var daysCount = 0;
+ for (var i = 1; i <= 12; i++) {
+ daysCount += this.daysInMonth(year, i);
+ }
+ return daysCount;
+ },
+
+ /** Retrieve the number of days in a month.
+ @memberof UmmAlQuraCalendar
+ @param year {CDate|number} The date to examine or the year of the month.
+ @param [month] {number} The month.
+ @return {number} The number of days in this month.
+ @throws Error if an invalid month/year or a different calendar used. */
+ daysInMonth: function (year, month) {
+ var date = this._validate(year, month, this.minDay, main.local.invalidMonth);
+ var mcjdn = date.toJD() - 2400000 + 0.5; // Modified Chronological Julian Day Number (MCJDN)
+ // the MCJDN's of the start of the lunations in the Umm al-Qura calendar are stored in the 'ummalqura_dat' array
+ var index = 0;
+ for (var i = 0; i < ummalqura_dat.length; i++) {
+ if (ummalqura_dat[i] > mcjdn) {
+ return (ummalqura_dat[index] - ummalqura_dat[index - 1]);
+ }
+ index++;
+ }
+ return 30; // Unknown outside
+ },
+
+ /** Determine whether this date is a week day.
+ @memberof UmmAlQuraCalendar
+ @param year {CDate|number} The date to examine or the year to examine.
+ @param [month] {number} The month to examine.
+ @param [day] {number} The day to examine.
+ @return {boolean} true if a week day, false if not.
+ @throws Error if an invalid date or a different calendar used. */
+ weekDay: function (year, month, day) {
+ return this.dayOfWeek(year, month, day) !== 5;
+ },
+
+ /** Retrieve the Julian date equivalent for this date,
+ i.e. days since January 1, 4713 BCE Greenwich noon.
+ @memberof UmmAlQuraCalendar
+ @param year {CDate|number} The date to convert or the year to convert.
+ @param [month] {number} The month to convert.
+ @param [day] {number} The day to convert.
+ @return {number} The equivalent Julian date.
+ @throws Error if an invalid date or a different calendar used. */
+ toJD: function (year, month, day) {
+ var date = this._validate(year, month, day, main.local.invalidDate);
+ var index = (12 * (date.year() - 1)) + date.month() - 15292;
+ var mcjdn = date.day() + ummalqura_dat[index - 1] - 1;
+ return mcjdn + 2400000 - 0.5; // Modified Chronological Julian Day Number (MCJDN)
+ },
+
+ /** Create a new date from a Julian date.
+ @memberof UmmAlQuraCalendar
+ @param jd {number} The Julian date to convert.
+ @return {CDate} The equivalent date. */
+ fromJD: function (jd) {
+ var mcjdn = jd - 2400000 + 0.5; // Modified Chronological Julian Day Number (MCJDN)
+ // the MCJDN's of the start of the lunations in the Umm al-Qura calendar
+ // are stored in the 'ummalqura_dat' array
+ var index = 0;
+ for (var i = 0; i < ummalqura_dat.length; i++) {
+ if (ummalqura_dat[i] > mcjdn) break;
+ index++;
+ }
+ var lunation = index + 15292; //UmmAlQura Lunation Number
+ var ii = Math.floor((lunation - 1) / 12);
+ var year = ii + 1;
+ var month = lunation - 12 * ii;
+ var day = mcjdn - ummalqura_dat[index - 1] + 1;
+ return this.newDate(year, month, day);
+ },
+
+ /** Determine whether a date is valid for this calendar.
+ @memberof UmmAlQuraCalendar
+ @param year {number} The year to examine.
+ @param month {number} The month to examine.
+ @param day {number} The day to examine.
+ @return {boolean} true if a valid date, false if not. */
+ isValid: function(year, month, day) {
+ var valid = main.baseCalendar.prototype.isValid.apply(this, arguments);
+ if (valid) {
+ year = (year.year != null ? year.year : year);
+ valid = (year >= 1276 && year <= 1500);
+ }
+ return valid;
+ },
+
+ /** Check that a candidate date is from the same calendar and is valid.
+ @memberof UmmAlQuraCalendar
+ @private
+ @param year {CDate|number} The date to validate or the year to validate.
+ @param month {number} The month to validate.
+ @param day {number} The day to validate.
+ @param error {string} Error message if invalid.
+ @throws Error if different calendars used or invalid date. */
+ _validate: function(year, month, day, error) {
+ var date = main.baseCalendar.prototype._validate.apply(this, arguments);
+ if (date.year < 1276 || date.year > 1500) {
+ throw error.replace(/\{0\}/, this.local.name);
+ }
+ return date;
+ }
+});
+
+// UmmAlQura calendar implementation
+main.calendars.ummalqura = UmmAlQuraCalendar;
+
+var ummalqura_dat = [
+ 20, 50, 79, 109, 138, 168, 197, 227, 256, 286, 315, 345, 374, 404, 433, 463, 492, 522, 551, 581,
+ 611, 641, 670, 700, 729, 759, 788, 818, 847, 877, 906, 936, 965, 995, 1024, 1054, 1083, 1113, 1142, 1172,
+ 1201, 1231, 1260, 1290, 1320, 1350, 1379, 1409, 1438, 1468, 1497, 1527, 1556, 1586, 1615, 1645, 1674, 1704, 1733, 1763,
+ 1792, 1822, 1851, 1881, 1910, 1940, 1969, 1999, 2028, 2058, 2087, 2117, 2146, 2176, 2205, 2235, 2264, 2294, 2323, 2353,
+ 2383, 2413, 2442, 2472, 2501, 2531, 2560, 2590, 2619, 2649, 2678, 2708, 2737, 2767, 2796, 2826, 2855, 2885, 2914, 2944,
+ 2973, 3003, 3032, 3062, 3091, 3121, 3150, 3180, 3209, 3239, 3268, 3298, 3327, 3357, 3386, 3416, 3446, 3476, 3505, 3535,
+ 3564, 3594, 3623, 3653, 3682, 3712, 3741, 3771, 3800, 3830, 3859, 3889, 3918, 3948, 3977, 4007, 4036, 4066, 4095, 4125,
+ 4155, 4185, 4214, 4244, 4273, 4303, 4332, 4362, 4391, 4421, 4450, 4480, 4509, 4539, 4568, 4598, 4627, 4657, 4686, 4716,
+ 4745, 4775, 4804, 4834, 4863, 4893, 4922, 4952, 4981, 5011, 5040, 5070, 5099, 5129, 5158, 5188, 5218, 5248, 5277, 5307,
+ 5336, 5366, 5395, 5425, 5454, 5484, 5513, 5543, 5572, 5602, 5631, 5661, 5690, 5720, 5749, 5779, 5808, 5838, 5867, 5897,
+ 5926, 5956, 5985, 6015, 6044, 6074, 6103, 6133, 6162, 6192, 6221, 6251, 6281, 6311, 6340, 6370, 6399, 6429, 6458, 6488,
+ 6517, 6547, 6576, 6606, 6635, 6665, 6694, 6724, 6753, 6783, 6812, 6842, 6871, 6901, 6930, 6960, 6989, 7019, 7048, 7078,
+ 7107, 7137, 7166, 7196, 7225, 7255, 7284, 7314, 7344, 7374, 7403, 7433, 7462, 7492, 7521, 7551, 7580, 7610, 7639, 7669,
+ 7698, 7728, 7757, 7787, 7816, 7846, 7875, 7905, 7934, 7964, 7993, 8023, 8053, 8083, 8112, 8142, 8171, 8201, 8230, 8260,
+ 8289, 8319, 8348, 8378, 8407, 8437, 8466, 8496, 8525, 8555, 8584, 8614, 8643, 8673, 8702, 8732, 8761, 8791, 8821, 8850,
+ 8880, 8909, 8938, 8968, 8997, 9027, 9056, 9086, 9115, 9145, 9175, 9205, 9234, 9264, 9293, 9322, 9352, 9381, 9410, 9440,
+ 9470, 9499, 9529, 9559, 9589, 9618, 9648, 9677, 9706, 9736, 9765, 9794, 9824, 9853, 9883, 9913, 9943, 9972, 10002, 10032,
+ 10061, 10090, 10120, 10149, 10178, 10208, 10237, 10267, 10297, 10326, 10356, 10386, 10415, 10445, 10474, 10504, 10533, 10562, 10592, 10621,
+ 10651, 10680, 10710, 10740, 10770, 10799, 10829, 10858, 10888, 10917, 10947, 10976, 11005, 11035, 11064, 11094, 11124, 11153, 11183, 11213,
+ 11242, 11272, 11301, 11331, 11360, 11389, 11419, 11448, 11478, 11507, 11537, 11567, 11596, 11626, 11655, 11685, 11715, 11744, 11774, 11803,
+ 11832, 11862, 11891, 11921, 11950, 11980, 12010, 12039, 12069, 12099, 12128, 12158, 12187, 12216, 12246, 12275, 12304, 12334, 12364, 12393,
+ 12423, 12453, 12483, 12512, 12542, 12571, 12600, 12630, 12659, 12688, 12718, 12747, 12777, 12807, 12837, 12866, 12896, 12926, 12955, 12984,
+ 13014, 13043, 13072, 13102, 13131, 13161, 13191, 13220, 13250, 13280, 13310, 13339, 13368, 13398, 13427, 13456, 13486, 13515, 13545, 13574,
+ 13604, 13634, 13664, 13693, 13723, 13752, 13782, 13811, 13840, 13870, 13899, 13929, 13958, 13988, 14018, 14047, 14077, 14107, 14136, 14166,
+ 14195, 14224, 14254, 14283, 14313, 14342, 14372, 14401, 14431, 14461, 14490, 14520, 14550, 14579, 14609, 14638, 14667, 14697, 14726, 14756,
+ 14785, 14815, 14844, 14874, 14904, 14933, 14963, 14993, 15021, 15051, 15081, 15110, 15140, 15169, 15199, 15228, 15258, 15287, 15317, 15347,
+ 15377, 15406, 15436, 15465, 15494, 15524, 15553, 15582, 15612, 15641, 15671, 15701, 15731, 15760, 15790, 15820, 15849, 15878, 15908, 15937,
+ 15966, 15996, 16025, 16055, 16085, 16114, 16144, 16174, 16204, 16233, 16262, 16292, 16321, 16350, 16380, 16409, 16439, 16468, 16498, 16528,
+ 16558, 16587, 16617, 16646, 16676, 16705, 16734, 16764, 16793, 16823, 16852, 16882, 16912, 16941, 16971, 17001, 17030, 17060, 17089, 17118,
+ 17148, 17177, 17207, 17236, 17266, 17295, 17325, 17355, 17384, 17414, 17444, 17473, 17502, 17532, 17561, 17591, 17620, 17650, 17679, 17709,
+ 17738, 17768, 17798, 17827, 17857, 17886, 17916, 17945, 17975, 18004, 18034, 18063, 18093, 18122, 18152, 18181, 18211, 18241, 18270, 18300,
+ 18330, 18359, 18388, 18418, 18447, 18476, 18506, 18535, 18565, 18595, 18625, 18654, 18684, 18714, 18743, 18772, 18802, 18831, 18860, 18890,
+ 18919, 18949, 18979, 19008, 19038, 19068, 19098, 19127, 19156, 19186, 19215, 19244, 19274, 19303, 19333, 19362, 19392, 19422, 19452, 19481,
+ 19511, 19540, 19570, 19599, 19628, 19658, 19687, 19717, 19746, 19776, 19806, 19836, 19865, 19895, 19924, 19954, 19983, 20012, 20042, 20071,
+ 20101, 20130, 20160, 20190, 20219, 20249, 20279, 20308, 20338, 20367, 20396, 20426, 20455, 20485, 20514, 20544, 20573, 20603, 20633, 20662,
+ 20692, 20721, 20751, 20780, 20810, 20839, 20869, 20898, 20928, 20957, 20987, 21016, 21046, 21076, 21105, 21135, 21164, 21194, 21223, 21253,
+ 21282, 21312, 21341, 21371, 21400, 21430, 21459, 21489, 21519, 21548, 21578, 21607, 21637, 21666, 21696, 21725, 21754, 21784, 21813, 21843,
+ 21873, 21902, 21932, 21962, 21991, 22021, 22050, 22080, 22109, 22138, 22168, 22197, 22227, 22256, 22286, 22316, 22346, 22375, 22405, 22434,
+ 22464, 22493, 22522, 22552, 22581, 22611, 22640, 22670, 22700, 22730, 22759, 22789, 22818, 22848, 22877, 22906, 22936, 22965, 22994, 23024,
+ 23054, 23083, 23113, 23143, 23173, 23202, 23232, 23261, 23290, 23320, 23349, 23379, 23408, 23438, 23467, 23497, 23527, 23556, 23586, 23616,
+ 23645, 23674, 23704, 23733, 23763, 23792, 23822, 23851, 23881, 23910, 23940, 23970, 23999, 24029, 24058, 24088, 24117, 24147, 24176, 24206,
+ 24235, 24265, 24294, 24324, 24353, 24383, 24413, 24442, 24472, 24501, 24531, 24560, 24590, 24619, 24648, 24678, 24707, 24737, 24767, 24796,
+ 24826, 24856, 24885, 24915, 24944, 24974, 25003, 25032, 25062, 25091, 25121, 25150, 25180, 25210, 25240, 25269, 25299, 25328, 25358, 25387,
+ 25416, 25446, 25475, 25505, 25534, 25564, 25594, 25624, 25653, 25683, 25712, 25742, 25771, 25800, 25830, 25859, 25888, 25918, 25948, 25977,
+ 26007, 26037, 26067, 26096, 26126, 26155, 26184, 26214, 26243, 26272, 26302, 26332, 26361, 26391, 26421, 26451, 26480, 26510, 26539, 26568,
+ 26598, 26627, 26656, 26686, 26715, 26745, 26775, 26805, 26834, 26864, 26893, 26923, 26952, 26982, 27011, 27041, 27070, 27099, 27129, 27159,
+ 27188, 27218, 27248, 27277, 27307, 27336, 27366, 27395, 27425, 27454, 27484, 27513, 27542, 27572, 27602, 27631, 27661, 27691, 27720, 27750,
+ 27779, 27809, 27838, 27868, 27897, 27926, 27956, 27985, 28015, 28045, 28074, 28104, 28134, 28163, 28193, 28222, 28252, 28281, 28310, 28340,
+ 28369, 28399, 28428, 28458, 28488, 28517, 28547, 28577,
+ // From 1356
+ 28607, 28636, 28665, 28695, 28724, 28754, 28783, 28813, 28843, 28872, 28901, 28931, 28960, 28990, 29019, 29049, 29078, 29108, 29137, 29167,
+ 29196, 29226, 29255, 29285, 29315, 29345, 29375, 29404, 29434, 29463, 29492, 29522, 29551, 29580, 29610, 29640, 29669, 29699, 29729, 29759,
+ 29788, 29818, 29847, 29876, 29906, 29935, 29964, 29994, 30023, 30053, 30082, 30112, 30141, 30171, 30200, 30230, 30259, 30289, 30318, 30348,
+ 30378, 30408, 30437, 30467, 30496, 30526, 30555, 30585, 30614, 30644, 30673, 30703, 30732, 30762, 30791, 30821, 30850, 30880, 30909, 30939,
+ 30968, 30998, 31027, 31057, 31086, 31116, 31145, 31175, 31204, 31234, 31263, 31293, 31322, 31352, 31381, 31411, 31441, 31471, 31500, 31530,
+ 31559, 31589, 31618, 31648, 31676, 31706, 31736, 31766, 31795, 31825, 31854, 31884, 31913, 31943, 31972, 32002, 32031, 32061, 32090, 32120,
+ 32150, 32180, 32209, 32239, 32268, 32298, 32327, 32357, 32386, 32416, 32445, 32475, 32504, 32534, 32563, 32593, 32622, 32652, 32681, 32711,
+ 32740, 32770, 32799, 32829, 32858, 32888, 32917, 32947, 32976, 33006, 33035, 33065, 33094, 33124, 33153, 33183, 33213, 33243, 33272, 33302,
+ 33331, 33361, 33390, 33420, 33450, 33479, 33509, 33539, 33568, 33598, 33627, 33657, 33686, 33716, 33745, 33775, 33804, 33834, 33863, 33893,
+ 33922, 33952, 33981, 34011, 34040, 34069, 34099, 34128, 34158, 34187, 34217, 34247, 34277, 34306, 34336, 34365, 34395, 34424, 34454, 34483,
+ 34512, 34542, 34571, 34601, 34631, 34660, 34690, 34719, 34749, 34778, 34808, 34837, 34867, 34896, 34926, 34955, 34985, 35015, 35044, 35074,
+ 35103, 35133, 35162, 35192, 35222, 35251, 35280, 35310, 35340, 35370, 35399, 35429, 35458, 35488, 35517, 35547, 35576, 35605, 35635, 35665,
+ 35694, 35723, 35753, 35782, 35811, 35841, 35871, 35901, 35930, 35960, 35989, 36019, 36048, 36078, 36107, 36136, 36166, 36195, 36225, 36254,
+ 36284, 36314, 36343, 36373, 36403, 36433, 36462, 36492, 36521, 36551, 36580, 36610, 36639, 36669, 36698, 36728, 36757, 36786, 36816, 36845,
+ 36875, 36904, 36934, 36963, 36993, 37022, 37052, 37081, 37111, 37141, 37170, 37200, 37229, 37259, 37288, 37318, 37347, 37377, 37406, 37436,
+ 37465, 37495, 37524, 37554, 37584, 37613, 37643, 37672, 37701, 37731, 37760, 37790, 37819, 37849, 37878, 37908, 37938, 37967, 37997, 38027,
+ 38056, 38085, 38115, 38144, 38174, 38203, 38233, 38262, 38292, 38322, 38351, 38381, 38410, 38440, 38469, 38499, 38528, 38558, 38587, 38617,
+ 38646, 38676, 38705, 38735, 38764, 38794, 38823, 38853, 38882, 38912, 38941, 38971, 39001, 39030, 39059, 39089, 39118, 39148, 39178, 39208,
+ 39237, 39267, 39297, 39326, 39355, 39385, 39414, 39444, 39473, 39503, 39532, 39562, 39592, 39621, 39650, 39680, 39709, 39739, 39768, 39798,
+ 39827, 39857, 39886, 39916, 39946, 39975, 40005, 40035, 40064, 40094, 40123, 40153, 40182, 40212, 40241, 40271, 40300, 40330, 40359, 40389,
+ 40418, 40448, 40477, 40507, 40536, 40566, 40595, 40625, 40655, 40685, 40714, 40744, 40773, 40803, 40832, 40862, 40892, 40921, 40951, 40980,
+ 41009, 41039, 41068, 41098, 41127, 41157, 41186, 41216, 41245, 41275, 41304, 41334, 41364, 41393, 41422, 41452, 41481, 41511, 41540, 41570,
+ 41599, 41629, 41658, 41688, 41718, 41748, 41777, 41807, 41836, 41865, 41894, 41924, 41953, 41983, 42012, 42042, 42072, 42102, 42131, 42161,
+ 42190, 42220, 42249, 42279, 42308, 42337, 42367, 42397, 42426, 42456, 42485, 42515, 42545, 42574, 42604, 42633, 42662, 42692, 42721, 42751,
+ 42780, 42810, 42839, 42869, 42899, 42929, 42958, 42988, 43017, 43046, 43076, 43105, 43135, 43164, 43194, 43223, 43253, 43283, 43312, 43342,
+ 43371, 43401, 43430, 43460, 43489, 43519, 43548, 43578, 43607, 43637, 43666, 43696, 43726, 43755, 43785, 43814, 43844, 43873, 43903, 43932,
+ 43962, 43991, 44021, 44050, 44080, 44109, 44139, 44169, 44198, 44228, 44258, 44287, 44317, 44346, 44375, 44405, 44434, 44464, 44493, 44523,
+ 44553, 44582, 44612, 44641, 44671, 44700, 44730, 44759, 44788, 44818, 44847, 44877, 44906, 44936, 44966, 44996, 45025, 45055, 45084, 45114,
+ 45143, 45172, 45202, 45231, 45261, 45290, 45320, 45350, 45380, 45409, 45439, 45468, 45498, 45527, 45556, 45586, 45615, 45644, 45674, 45704,
+ 45733, 45763, 45793, 45823, 45852, 45882, 45911, 45940, 45970, 45999, 46028, 46058, 46088, 46117, 46147, 46177, 46206, 46236, 46265, 46295,
+ 46324, 46354, 46383, 46413, 46442, 46472, 46501, 46531, 46560, 46590, 46620, 46649, 46679, 46708, 46738, 46767, 46797, 46826, 46856, 46885,
+ 46915, 46944, 46974, 47003, 47033, 47063, 47092, 47122, 47151, 47181, 47210, 47240, 47269, 47298, 47328, 47357, 47387, 47417, 47446, 47476,
+ 47506, 47535, 47565, 47594, 47624, 47653, 47682, 47712, 47741, 47771, 47800, 47830, 47860, 47890, 47919, 47949, 47978, 48008, 48037, 48066,
+ 48096, 48125, 48155, 48184, 48214, 48244, 48273, 48303, 48333, 48362, 48392, 48421, 48450, 48480, 48509, 48538, 48568, 48598, 48627, 48657,
+ 48687, 48717, 48746, 48776, 48805, 48834, 48864, 48893, 48922, 48952, 48982, 49011, 49041, 49071, 49100, 49130, 49160, 49189, 49218, 49248,
+ 49277, 49306, 49336, 49365, 49395, 49425, 49455, 49484, 49514, 49543, 49573, 49602, 49632, 49661, 49690, 49720, 49749, 49779, 49809, 49838,
+ 49868, 49898, 49927, 49957, 49986, 50016, 50045, 50075, 50104, 50133, 50163, 50192, 50222, 50252, 50281, 50311, 50340, 50370, 50400, 50429,
+ 50459, 50488, 50518, 50547, 50576, 50606, 50635, 50665, 50694, 50724, 50754, 50784, 50813, 50843, 50872, 50902, 50931, 50960, 50990, 51019,
+ 51049, 51078, 51108, 51138, 51167, 51197, 51227, 51256, 51286, 51315, 51345, 51374, 51403, 51433, 51462, 51492, 51522, 51552, 51582, 51611,
+ 51641, 51670, 51699, 51729, 51758, 51787, 51816, 51846, 51876, 51906, 51936, 51965, 51995, 52025, 52054, 52083, 52113, 52142, 52171, 52200,
+ 52230, 52260, 52290, 52319, 52349, 52379, 52408, 52438, 52467, 52497, 52526, 52555, 52585, 52614, 52644, 52673, 52703, 52733, 52762, 52792,
+ 52822, 52851, 52881, 52910, 52939, 52969, 52998, 53028, 53057, 53087, 53116, 53146, 53176, 53205, 53235, 53264, 53294, 53324, 53353, 53383,
+ 53412, 53441, 53471, 53500, 53530, 53559, 53589, 53619, 53648, 53678, 53708, 53737, 53767, 53796, 53825, 53855, 53884, 53913, 53943, 53973,
+ 54003, 54032, 54062, 54092, 54121, 54151, 54180, 54209, 54239, 54268, 54297, 54327, 54357, 54387, 54416, 54446, 54476, 54505, 54535, 54564,
+ 54593, 54623, 54652, 54681, 54711, 54741, 54770, 54800, 54830, 54859, 54889, 54919, 54948, 54977, 55007, 55036, 55066, 55095, 55125, 55154,
+ 55184, 55213, 55243, 55273, 55302, 55332, 55361, 55391, 55420, 55450, 55479, 55508, 55538, 55567, 55597, 55627, 55657, 55686, 55716, 55745,
+ 55775, 55804, 55834, 55863, 55892, 55922, 55951, 55981, 56011, 56040, 56070, 56100, 56129, 56159, 56188, 56218, 56247, 56276, 56306, 56335,
+ 56365, 56394, 56424, 56454, 56483, 56513, 56543, 56572, 56601, 56631, 56660, 56690, 56719, 56749, 56778, 56808, 56837, 56867, 56897, 56926,
+ 56956, 56985, 57015, 57044, 57074, 57103, 57133, 57162, 57192, 57221, 57251, 57280, 57310, 57340, 57369, 57399, 57429, 57458, 57487, 57517,
+ 57546, 57576, 57605, 57634, 57664, 57694, 57723, 57753, 57783, 57813, 57842, 57871, 57901, 57930, 57959, 57989, 58018, 58048, 58077, 58107,
+ 58137, 58167, 58196, 58226, 58255, 58285, 58314, 58343, 58373, 58402, 58432, 58461, 58491, 58521, 58551, 58580, 58610, 58639, 58669, 58698,
+ 58727, 58757, 58786, 58816, 58845, 58875, 58905, 58934, 58964, 58994, 59023, 59053, 59082, 59111, 59141, 59170, 59200, 59229, 59259, 59288,
+ 59318, 59348, 59377, 59407, 59436, 59466, 59495, 59525, 59554, 59584, 59613, 59643, 59672, 59702, 59731, 59761, 59791, 59820, 59850, 59879,
+ 59909, 59939, 59968, 59997, 60027, 60056, 60086, 60115, 60145, 60174, 60204, 60234, 60264, 60293, 60323, 60352, 60381, 60411, 60440, 60469,
+ 60499, 60528, 60558, 60588, 60618, 60648, 60677, 60707, 60736, 60765, 60795, 60824, 60853, 60883, 60912, 60942, 60972, 61002, 61031, 61061,
+ 61090, 61120, 61149, 61179, 61208, 61237, 61267, 61296, 61326, 61356, 61385, 61415, 61445, 61474, 61504, 61533, 61563, 61592, 61621, 61651,
+ 61680, 61710, 61739, 61769, 61799, 61828, 61858, 61888, 61917, 61947, 61976, 62006, 62035, 62064, 62094, 62123, 62153, 62182, 62212, 62242,
+ 62271, 62301, 62331, 62360, 62390, 62419, 62448, 62478, 62507, 62537, 62566, 62596, 62625, 62655, 62685, 62715, 62744, 62774, 62803, 62832,
+ 62862, 62891, 62921, 62950, 62980, 63009, 63039, 63069, 63099, 63128, 63157, 63187, 63216, 63246, 63275, 63305, 63334, 63363, 63393, 63423,
+ 63453, 63482, 63512, 63541, 63571, 63600, 63630, 63659, 63689, 63718, 63747, 63777, 63807, 63836, 63866, 63895, 63925, 63955, 63984, 64014,
+ 64043, 64073, 64102, 64131, 64161, 64190, 64220, 64249, 64279, 64309, 64339, 64368, 64398, 64427, 64457, 64486, 64515, 64545, 64574, 64603,
+ 64633, 64663, 64692, 64722, 64752, 64782, 64811, 64841, 64870, 64899, 64929, 64958, 64987, 65017, 65047, 65076, 65106, 65136, 65166, 65195,
+ 65225, 65254, 65283, 65313, 65342, 65371, 65401, 65431, 65460, 65490, 65520, 65549, 65579, 65608, 65638, 65667, 65697, 65726, 65755, 65785,
+ 65815, 65844, 65874, 65903, 65933, 65963, 65992, 66022, 66051, 66081, 66110, 66140, 66169, 66199, 66228, 66258, 66287, 66317, 66346, 66376,
+ 66405, 66435, 66465, 66494, 66524, 66553, 66583, 66612, 66641, 66671, 66700, 66730, 66760, 66789, 66819, 66849, 66878, 66908, 66937, 66967,
+ 66996, 67025, 67055, 67084, 67114, 67143, 67173, 67203, 67233, 67262, 67292, 67321, 67351, 67380, 67409, 67439, 67468, 67497, 67527, 67557,
+ 67587, 67617, 67646, 67676, 67705, 67735, 67764, 67793, 67823, 67852, 67882, 67911, 67941, 67971, 68000, 68030, 68060, 68089, 68119, 68148,
+ 68177, 68207, 68236, 68266, 68295, 68325, 68354, 68384, 68414, 68443, 68473, 68502, 68532, 68561, 68591, 68620, 68650, 68679, 68708, 68738,
+ 68768, 68797, 68827, 68857, 68886, 68916, 68946, 68975, 69004, 69034, 69063, 69092, 69122, 69152, 69181, 69211, 69240, 69270, 69300, 69330,
+ 69359, 69388, 69418, 69447, 69476, 69506, 69535, 69565, 69595, 69624, 69654, 69684, 69713, 69743, 69772, 69802, 69831, 69861, 69890, 69919,
+ 69949, 69978, 70008, 70038, 70067, 70097, 70126, 70156, 70186, 70215, 70245, 70274, 70303, 70333, 70362, 70392, 70421, 70451, 70481, 70510,
+ 70540, 70570, 70599, 70629, 70658, 70687, 70717, 70746, 70776, 70805, 70835, 70864, 70894, 70924, 70954, 70983, 71013, 71042, 71071, 71101,
+ 71130, 71159, 71189, 71218, 71248, 71278, 71308, 71337, 71367, 71397, 71426, 71455, 71485, 71514, 71543, 71573, 71602, 71632, 71662, 71691,
+ 71721, 71751, 71781, 71810, 71839, 71869, 71898, 71927, 71957, 71986, 72016, 72046, 72075, 72105, 72135, 72164, 72194, 72223, 72253, 72282,
+ 72311, 72341, 72370, 72400, 72429, 72459, 72489, 72518, 72548, 72577, 72607, 72637, 72666, 72695, 72725, 72754, 72784, 72813, 72843, 72872,
+ 72902, 72931, 72961, 72991, 73020, 73050, 73080, 73109, 73139, 73168, 73197, 73227, 73256, 73286, 73315, 73345, 73375, 73404, 73434, 73464,
+ 73493, 73523, 73552, 73581, 73611, 73640, 73669, 73699, 73729, 73758, 73788, 73818, 73848, 73877, 73907, 73936, 73965, 73995, 74024, 74053,
+ 74083, 74113, 74142, 74172, 74202, 74231, 74261, 74291, 74320, 74349, 74379, 74408, 74437, 74467, 74497, 74526, 74556, 74586, 74615, 74645,
+ 74675, 74704, 74733, 74763, 74792, 74822, 74851, 74881, 74910, 74940, 74969, 74999, 75029, 75058, 75088, 75117, 75147, 75176, 75206, 75235,
+ 75264, 75294, 75323, 75353, 75383, 75412, 75442, 75472, 75501, 75531, 75560, 75590, 75619, 75648, 75678, 75707, 75737, 75766, 75796, 75826,
+ 75856, 75885, 75915, 75944, 75974, 76003, 76032, 76062, 76091, 76121, 76150, 76180, 76210, 76239, 76269, 76299, 76328, 76358, 76387, 76416,
+ 76446, 76475, 76505, 76534, 76564, 76593, 76623, 76653, 76682, 76712, 76741, 76771, 76801, 76830, 76859, 76889, 76918, 76948, 76977, 77007,
+ 77036, 77066, 77096, 77125, 77155, 77185, 77214, 77243, 77273, 77302, 77332, 77361, 77390, 77420, 77450, 77479, 77509, 77539, 77569, 77598,
+ 77627, 77657, 77686, 77715, 77745, 77774, 77804, 77833, 77863, 77893, 77923, 77952, 77982, 78011, 78041, 78070, 78099, 78129, 78158, 78188,
+ 78217, 78247, 78277, 78307, 78336, 78366, 78395, 78425, 78454, 78483, 78513, 78542, 78572, 78601, 78631, 78661, 78690, 78720, 78750, 78779,
+ 78808, 78838, 78867, 78897, 78926, 78956, 78985, 79015, 79044, 79074, 79104, 79133, 79163, 79192, 79222, 79251, 79281, 79310, 79340, 79369,
+ 79399, 79428, 79458, 79487, 79517, 79546, 79576, 79606, 79635, 79665, 79695, 79724, 79753, 79783, 79812, 79841, 79871, 79900, 79930, 79960,
+ 79990];
+
diff --git a/dist/index.js b/dist/index.js
new file mode 100644
index 0000000..9465605
--- /dev/null
+++ b/dist/index.js
@@ -0,0 +1,111 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+module.exports = require('./main');
+require('./plus');
+require('./calendars/coptic');
+require('./calendars/discworld');
+require('./calendars/ethiopian');
+require('./calendars/ethiopian-am');
+require('./calendars/hebrew');
+require('./calendars/hebrew-he');
+require('./calendars/islamic');
+require('./calendars/islamic-ar');
+require('./calendars/islamic-fa');
+require('./calendars/julian');
+require('./calendars/mayan');
+require('./calendars/nanakshahi');
+require('./calendars/nanakshahi-pa');
+require('./calendars/nepali');
+require('./calendars/nepali-ne');
+require('./calendars/persian');
+require('./calendars/persian-fa');
+require('./calendars/taiwan');
+require('./calendars/taiwan-zh-TW');
+require('./calendars/thai');
+require('./calendars/thai-th');
+require('./calendars/ummalqura');
+require('./calendars/ummalqura-ar');
+require('./regional/af');
+require('./regional/am');
+require('./regional/ar');
+require('./regional/ar-DZ');
+require('./regional/ar-EG');
+require('./regional/az');
+require('./regional/bg');
+require('./regional/bs');
+require('./regional/ca');
+require('./regional/cs');
+require('./regional/da');
+require('./regional/de');
+require('./regional/de-CH');
+require('./regional/el');
+require('./regional/en-AU');
+require('./regional/en-GB');
+require('./regional/en-NZ');
+require('./regional/eo');
+require('./regional/es');
+require('./regional/es-AR');
+require('./regional/es-PE');
+require('./regional/et');
+require('./regional/eu');
+require('./regional/fa');
+require('./regional/fi');
+require('./regional/fo');
+require('./regional/fr');
+require('./regional/fr-CH');
+require('./regional/gl');
+require('./regional/gu');
+require('./regional/he');
+require('./regional/hi-IN');
+require('./regional/hr');
+require('./regional/hu');
+require('./regional/hy');
+require('./regional/id');
+require('./regional/is');
+require('./regional/it');
+require('./regional/ja');
+require('./regional/ka');
+require('./regional/km');
+require('./regional/ko');
+require('./regional/lt');
+require('./regional/lv');
+require('./regional/me');
+require('./regional/me-ME');
+require('./regional/mk');
+require('./regional/ml');
+require('./regional/ms');
+require('./regional/mt');
+require('./regional/nl');
+require('./regional/nl-BE');
+require('./regional/no');
+require('./regional/pa');
+require('./regional/pl');
+require('./regional/pt-BR');
+require('./regional/rm');
+require('./regional/ro');
+require('./regional/ru');
+require('./regional/sk');
+require('./regional/sl');
+require('./regional/sq');
+require('./regional/sr');
+require('./regional/sr-SR');
+require('./regional/sv');
+require('./regional/ta');
+require('./regional/th');
+require('./regional/tr');
+require('./regional/tt');
+require('./regional/uk');
+require('./regional/ur');
+require('./regional/vi');
+require('./regional/zh-CN');
+require('./regional/zh-HK');
+require('./regional/zh-TW');
\ No newline at end of file
diff --git a/dist/main.js b/dist/main.js
new file mode 100644
index 0000000..edb3d5b
--- /dev/null
+++ b/dist/main.js
@@ -0,0 +1,903 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Calendars for jQuery v2.0.2.
+ Written by Keith Wood (wood.keith{at}optusnet.com.au) August 2009.
+ Available under the MIT (http://keith-wood.name/licence.html) license.
+ Please attribute the author if you use it. */
+
+var assign = require('object-assign');
+
+
+function Calendars() {
+ this.regionalOptions = [];
+ this.regionalOptions[''] = {
+ invalidCalendar: 'Calendar {0} not found',
+ invalidDate: 'Invalid {0} date',
+ invalidMonth: 'Invalid {0} month',
+ invalidYear: 'Invalid {0} year',
+ differentCalendars: 'Cannot mix {0} and {1} dates'
+ };
+ this.local = this.regionalOptions[''];
+ this.calendars = {};
+ this._localCals = {};
+}
+
+/** Create the calendars plugin.
+
Provides support for various world calendars in a consistent manner.
+ @class Calendars
+ @example _exports.instance('julian').newDate(2014, 12, 25) */
+assign(Calendars.prototype, {
+
+ /** Obtain a calendar implementation and localisation.
+ @memberof Calendars
+ @param [name='gregorian'] {string} The name of the calendar, e.g. 'gregorian', 'persian', 'islamic'.
+ @param [language=''] {string} The language code to use for localisation (default is English).
+ @return {Calendar} The calendar and localisation.
+ @throws Error if calendar not found. */
+ instance: function(name, language) {
+ name = (name || 'gregorian').toLowerCase();
+ language = language || '';
+ var cal = this._localCals[name + '-' + language];
+ if (!cal && this.calendars[name]) {
+ cal = new this.calendars[name](language);
+ this._localCals[name + '-' + language] = cal;
+ }
+ if (!cal) {
+ throw (this.local.invalidCalendar || this.regionalOptions[''].invalidCalendar).
+ replace(/\{0\}/, name);
+ }
+ return cal;
+ },
+
+ /** Create a new date - for today if no other parameters given.
+ @memberof Calendars
+ @param year {CDate|number} The date to copy or the year for the date.
+ @param [month] {number} The month for the date.
+ @param [day] {number} The day for the date.
+ @param [calendar='gregorian'] {BaseCalendar|string} The underlying calendar or the name of the calendar.
+ @param [language=''] {string} The language to use for localisation (default English).
+ @return {CDate} The new date.
+ @throws Error if an invalid date. */
+ newDate: function(year, month, day, calendar, language) {
+ calendar = (year != null && year.year ? year.calendar() : (typeof calendar === 'string' ?
+ this.instance(calendar, language) : calendar)) || this.instance();
+ return calendar.newDate(year, month, day);
+ },
+
+ /** A simple digit substitution function for localising numbers via the Calendar digits option.
+ @member Calendars
+ @param digits {string[]} The substitute digits, for 0 through 9.
+ @return {function} The substitution function. */
+ substituteDigits: function(digits) {
+ return function(value) {
+ return (value + '').replace(/[0-9]/g, function(digit) {
+ return digits[digit];
+ });
+ }
+ },
+
+ /** Digit substitution function for localising Chinese style numbers via the Calendar digits option.
+ @member Calendars
+ @param digits {string[]} The substitute digits, for 0 through 9.
+ @param powers {string[]} The characters denoting powers of 10, i.e. 1, 10, 100, 1000.
+ @return {function} The substitution function. */
+ substituteChineseDigits: function(digits, powers) {
+ return function(value) {
+ var localNumber = '';
+ var power = 0;
+ while (value > 0) {
+ var units = value % 10;
+ localNumber = (units === 0 ? '' : digits[units] + powers[power]) + localNumber;
+ power++;
+ value = Math.floor(value / 10);
+ }
+ if (localNumber.indexOf(digits[1] + powers[1]) === 0) {
+ localNumber = localNumber.substr(1);
+ }
+ return localNumber || digits[0];
+ }
+ }
+});
+
+/** Generic date, based on a particular calendar.
+ @class CDate
+ @param calendar {BaseCalendar} The underlying calendar implementation.
+ @param year {number} The year for this date.
+ @param month {number} The month for this date.
+ @param day {number} The day for this date.
+ @return {CDate} The date object.
+ @throws Error if an invalid date. */
+function CDate(calendar, year, month, day) {
+ this._calendar = calendar;
+ this._year = year;
+ this._month = month;
+ this._day = day;
+ if (this._calendar._validateLevel === 0 &&
+ !this._calendar.isValid(this._year, this._month, this._day)) {
+ throw (_exports.local.invalidDate || _exports.regionalOptions[''].invalidDate).
+ replace(/\{0\}/, this._calendar.local.name);
+ }
+}
+
+/** Pad a numeric value with leading zeroes.
+ @private
+ @param value {number} The number to format.
+ @param length {number} The minimum length.
+ @return {string} The formatted number. */
+function pad(value, length) {
+ value = '' + value;
+ return '000000'.substring(0, length - value.length) + value;
+}
+
+assign(CDate.prototype, {
+
+ /** Create a new date.
+ @memberof CDate
+ @param [year] {CDate|number} The date to copy or the year for the date (default this date).
+ @param [month] {number} The month for the date.
+ @param [day] {number} The day for the date.
+ @return {CDate} The new date.
+ @throws Error if an invalid date. */
+ newDate: function(year, month, day) {
+ return this._calendar.newDate((year == null ? this : year), month, day);
+ },
+
+ /** Set or retrieve the year for this date.
+ @memberof CDate
+ @param [year] {number} The year for the date.
+ @return {number|CDate} The date's year (if no parameter) or the updated date.
+ @throws Error if an invalid date. */
+ year: function(year) {
+ return (arguments.length === 0 ? this._year : this.set(year, 'y'));
+ },
+
+ /** Set or retrieve the month for this date.
+ @memberof CDate
+ @param [month] {number} The month for the date.
+ @return {number|CDate} The date's month (if no parameter) or the updated date.
+ @throws Error if an invalid date. */
+ month: function(month) {
+ return (arguments.length === 0 ? this._month : this.set(month, 'm'));
+ },
+
+ /** Set or retrieve the day for this date.
+ @memberof CDate
+ @param [day] {number} The day for the date.
+ @return {number|CData} The date's day (if no parameter) or the updated date.
+ @throws Error if an invalid date. */
+ day: function(day) {
+ return (arguments.length === 0 ? this._day : this.set(day, 'd'));
+ },
+
+ /** Set new values for this date.
+ @memberof CDate
+ @param year {number} The year for the date.
+ @param month {number} The month for the date.
+ @param day {number} The day for the date.
+ @return {CDate} The updated date.
+ @throws Error if an invalid date. */
+ date: function(year, month, day) {
+ if (!this._calendar.isValid(year, month, day)) {
+ throw (_exports.local.invalidDate || _exports.regionalOptions[''].invalidDate).
+ replace(/\{0\}/, this._calendar.local.name);
+ }
+ this._year = year;
+ this._month = month;
+ this._day = day;
+ return this;
+ },
+
+ /** Determine whether this date is in a leap year.
+ @memberof CDate
+ @return {boolean} true if this is a leap year, false if not. */
+ leapYear: function() {
+ return this._calendar.leapYear(this);
+ },
+
+ /** Retrieve the epoch designator for this date, e.g. BCE or CE.
+ @memberof CDate
+ @return {string} The current epoch. */
+ epoch: function() {
+ return this._calendar.epoch(this);
+ },
+
+ /** Format the year, if not a simple sequential number.
+ @memberof CDate
+ @return {string} The formatted year. */
+ formatYear: function() {
+ return this._calendar.formatYear(this);
+ },
+
+ /** Retrieve the month of the year for this date,
+ i.e. the month's position within a numbered year.
+ @memberof CDate
+ @return {number} The month of the year: minMonth to months per year. */
+ monthOfYear: function() {
+ return this._calendar.monthOfYear(this);
+ },
+
+ /** Retrieve the week of the year for this date.
+ @memberof CDate
+ @return {number} The week of the year: 1 to weeks per year. */
+ weekOfYear: function() {
+ return this._calendar.weekOfYear(this);
+ },
+
+ /** Retrieve the number of days in the year for this date.
+ @memberof CDate
+ @return {number} The number of days in this year. */
+ daysInYear: function() {
+ return this._calendar.daysInYear(this);
+ },
+
+ /** Retrieve the day of the year for this date.
+ @memberof CDate
+ @return {number} The day of the year: 1 to days per year. */
+ dayOfYear: function() {
+ return this._calendar.dayOfYear(this);
+ },
+
+ /** Retrieve the number of days in the month for this date.
+ @memberof CDate
+ @return {number} The number of days. */
+ daysInMonth: function() {
+ return this._calendar.daysInMonth(this);
+ },
+
+ /** Retrieve the day of the week for this date.
+ @memberof CDate
+ @return {number} The day of the week: 0 to number of days - 1. */
+ dayOfWeek: function() {
+ return this._calendar.dayOfWeek(this);
+ },
+
+ /** Determine whether this date is a week day.
+ @memberof CDate
+ @return {boolean} true if a week day, false if not. */
+ weekDay: function() {
+ return this._calendar.weekDay(this);
+ },
+
+ /** Retrieve additional information about this date.
+ @memberof CDate
+ @return {object} Additional information - contents depends on calendar. */
+ extraInfo: function() {
+ return this._calendar.extraInfo(this);
+ },
+
+ /** Add period(s) to a date.
+ @memberof CDate
+ @param offset {number} The number of periods to adjust by.
+ @param period {string} One of 'y' for year, 'm' for month, 'w' for week, 'd' for day.
+ @return {CDate} The updated date. */
+ add: function(offset, period) {
+ return this._calendar.add(this, offset, period);
+ },
+
+ /** Set a portion of the date.
+ @memberof CDate
+ @param value {number} The new value for the period.
+ @param period {string} One of 'y' for year, 'm' for month, 'd' for day.
+ @return {CDate} The updated date.
+ @throws Error if not a valid date. */
+ set: function(value, period) {
+ return this._calendar.set(this, value, period);
+ },
+
+ /** Compare this date to another date.
+ @memberof CDate
+ @param date {CDate} The other date.
+ @return {number} -1 if this date is before the other date,
+ 0 if they are equal, or +1 if this date is after the other date. */
+ compareTo: function(date) {
+ if (this._calendar.name !== date._calendar.name) {
+ throw (_exports.local.differentCalendars || _exports.regionalOptions[''].differentCalendars).
+ replace(/\{0\}/, this._calendar.local.name).replace(/\{1\}/, date._calendar.local.name);
+ }
+ var c = (this._year !== date._year ? this._year - date._year :
+ this._month !== date._month ? this.monthOfYear() - date.monthOfYear() :
+ this._day - date._day);
+ return (c === 0 ? 0 : (c < 0 ? -1 : +1));
+ },
+
+ /** Retrieve the calendar backing this date.
+ @memberof CDate
+ @return {BaseCalendar} The calendar implementation. */
+ calendar: function() {
+ return this._calendar;
+ },
+
+ /** Retrieve the Julian date equivalent for this date,
+ i.e. days since January 1, 4713 BCE Greenwich noon.
+ @memberof CDate
+ @return {number} The equivalent Julian date. */
+ toJD: function() {
+ return this._calendar.toJD(this);
+ },
+
+ /** Create a new date from a Julian date.
+ @memberof CDate
+ @param jd {number} The Julian date to convert.
+ @return {CDate} The equivalent date. */
+ fromJD: function(jd) {
+ return this._calendar.fromJD(jd);
+ },
+
+ /** Convert this date to a standard (Gregorian) JavaScript Date.
+ @memberof CDate
+ @return {Date} The equivalent JavaScript date. */
+ toJSDate: function() {
+ return this._calendar.toJSDate(this);
+ },
+
+ /** Create a new date from a standard (Gregorian) JavaScript Date.
+ @memberof CDate
+ @param jsd {Date} The JavaScript date to convert.
+ @return {CDate} The equivalent date. */
+ fromJSDate: function(jsd) {
+ return this._calendar.fromJSDate(jsd);
+ },
+
+ /** Convert to a string for display.
+ @memberof CDate
+ @return {string} This date as a string. */
+ toString: function() {
+ return (this.year() < 0 ? '-' : '') + pad(Math.abs(this.year()), 4) +
+ '-' + pad(this.month(), 2) + '-' + pad(this.day(), 2);
+ }
+});
+
+/** Basic functionality for all calendars.
+ Other calendars should extend this:
+
OtherCalendar.prototype = new BaseCalendar;
+ @class BaseCalendar */
+function BaseCalendar() {
+ this.shortYearCutoff = '+10';
+}
+
+assign(BaseCalendar.prototype, {
+ _validateLevel: 0, // "Stack" to turn validation on/off
+
+ /** Create a new date within this calendar - today if no parameters given.
+ @memberof BaseCalendar
+ @param year {CDate|number} The date to duplicate or the year for the date.
+ @param [month] {number} The month for the date.
+ @param [day] {number} The day for the date.
+ @return {CDate} The new date.
+ @throws Error if not a valid date or a different calendar used. */
+ newDate: function(year, month, day) {
+ if (year == null) {
+ return this.today();
+ }
+ if (year.year) {
+ this._validate(year, month, day,
+ _exports.local.invalidDate || _exports.regionalOptions[''].invalidDate);
+ day = year.day();
+ month = year.month();
+ year = year.year();
+ }
+ return new CDate(this, year, month, day);
+ },
+
+ /** Create a new date for today.
+ @memberof BaseCalendar
+ @return {CDate} Today's date. */
+ today: function() {
+ return this.fromJSDate(new Date());
+ },
+
+ /** Retrieve the epoch designator for this date.
+ @memberof BaseCalendar
+ @param year {CDate|number} The date to examine or the year to examine.
+ @return {string} The current epoch.
+ @throws Error if an invalid year or a different calendar used. */
+ epoch: function(year) {
+ var date = this._validate(year, this.minMonth, this.minDay,
+ _exports.local.invalidYear || _exports.regionalOptions[''].invalidYear);
+ return (date.year() < 0 ? this.local.epochs[0] : this.local.epochs[1]);
+ },
+
+ /** Format the year, if not a simple sequential number
+ @memberof BaseCalendar
+ @param year {CDate|number} The date to format or the year to format.
+ @return {string} The formatted year.
+ @throws Error if an invalid year or a different calendar used. */
+ formatYear: function(year) {
+ var date = this._validate(year, this.minMonth, this.minDay,
+ _exports.local.invalidYear || _exports.regionalOptions[''].invalidYear);
+ return (date.year() < 0 ? '-' : '') + pad(Math.abs(date.year()), 4)
+ },
+
+ /** Retrieve the number of months in a year.
+ @memberof BaseCalendar
+ @param year {CDate|number} The date to examine or the year to examine.
+ @return {number} The number of months.
+ @throws Error if an invalid year or a different calendar used. */
+ monthsInYear: function(year) {
+ this._validate(year, this.minMonth, this.minDay,
+ _exports.local.invalidYear || _exports.regionalOptions[''].invalidYear);
+ return 12;
+ },
+
+ /** Calculate the month's ordinal position within the year -
+ for those calendars that don't start at month 1!
+ @memberof BaseCalendar
+ @param year {CDate|number} The date to examine or the year to examine.
+ @param month {number} The month to examine.
+ @return {number} The ordinal position, starting from minMonth.
+ @throws Error if an invalid year/month or a different calendar used. */
+ monthOfYear: function(year, month) {
+ var date = this._validate(year, month, this.minDay,
+ _exports.local.invalidMonth || _exports.regionalOptions[''].invalidMonth);
+ return (date.month() + this.monthsInYear(date) - this.firstMonth) %
+ this.monthsInYear(date) + this.minMonth;
+ },
+
+ /** Calculate actual month from ordinal position, starting from minMonth.
+ @memberof BaseCalendar
+ @param year {number} The year to examine.
+ @param ord {number} The month's ordinal position.
+ @return {number} The month's number.
+ @throws Error if an invalid year/month. */
+ fromMonthOfYear: function(year, ord) {
+ var m = (ord + this.firstMonth - 2 * this.minMonth) %
+ this.monthsInYear(year) + this.minMonth;
+ this._validate(year, m, this.minDay,
+ _exports.local.invalidMonth || _exports.regionalOptions[''].invalidMonth);
+ return m;
+ },
+
+ /** Retrieve the number of days in a year.
+ @memberof BaseCalendar
+ @param year {CDate|number} The date to examine or the year to examine.
+ @return {number} The number of days.
+ @throws Error if an invalid year or a different calendar used. */
+ daysInYear: function(year) {
+ var date = this._validate(year, this.minMonth, this.minDay,
+ _exports.local.invalidYear || _exports.regionalOptions[''].invalidYear);
+ return (this.leapYear(date) ? 366 : 365);
+ },
+
+ /** Retrieve the day of the year for a date.
+ @memberof BaseCalendar
+ @param year {CDate|number} The date to convert or the year to convert.
+ @param [month] {number} The month to convert.
+ @param [day] {number} The day to convert.
+ @return {number} The day of the year.
+ @throws Error if an invalid date or a different calendar used. */
+ dayOfYear: function(year, month, day) {
+ var date = this._validate(year, month, day,
+ _exports.local.invalidDate || _exports.regionalOptions[''].invalidDate);
+ return date.toJD() - this.newDate(date.year(),
+ this.fromMonthOfYear(date.year(), this.minMonth), this.minDay).toJD() + 1;
+ },
+
+ /** Retrieve the number of days in a week.
+ @memberof BaseCalendar
+ @return {number} The number of days. */
+ daysInWeek: function() {
+ return 7;
+ },
+
+ /** Retrieve the day of the week for a date.
+ @memberof BaseCalendar
+ @param year {CDate|number} The date to examine or the year to examine.
+ @param [month] {number} The month to examine.
+ @param [day] {number} The day to examine.
+ @return {number} The day of the week: 0 to number of days - 1.
+ @throws Error if an invalid date or a different calendar used. */
+ dayOfWeek: function(year, month, day) {
+ var date = this._validate(year, month, day,
+ _exports.local.invalidDate || _exports.regionalOptions[''].invalidDate);
+ return (Math.floor(this.toJD(date)) + 2) % this.daysInWeek();
+ },
+
+ /** Retrieve additional information about a date.
+ @memberof BaseCalendar
+ @param year {CDate|number} The date to examine or the year to examine.
+ @param [month] {number} The month to examine.
+ @param [day] {number} The day to examine.
+ @return {object} Additional information - contents depends on calendar.
+ @throws Error if an invalid date or a different calendar used. */
+ extraInfo: function(year, month, day) {
+ this._validate(year, month, day,
+ _exports.local.invalidDate || _exports.regionalOptions[''].invalidDate);
+ return {};
+ },
+
+ /** Add period(s) to a date.
+ Cater for no year zero.
+ @memberof BaseCalendar
+ @param date {CDate} The starting date.
+ @param offset {number} The number of periods to adjust by.
+ @param period {string} One of 'y' for year, 'm' for month, 'w' for week, 'd' for day.
+ @return {CDate} The updated date.
+ @throws Error if a different calendar used. */
+ add: function(date, offset, period) {
+ this._validate(date, this.minMonth, this.minDay,
+ _exports.local.invalidDate || _exports.regionalOptions[''].invalidDate);
+ return this._correctAdd(date, this._add(date, offset, period), offset, period);
+ },
+
+ /** Add period(s) to a date.
+ @memberof BaseCalendar
+ @private
+ @param date {CDate} The starting date.
+ @param offset {number} The number of periods to adjust by.
+ @param period {string} One of 'y' for year, 'm' for month, 'w' for week, 'd' for day.
+ @return {CDate} The updated date. */
+ _add: function(date, offset, period) {
+ this._validateLevel++;
+ if (period === 'd' || period === 'w') {
+ var jd = date.toJD() + offset * (period === 'w' ? this.daysInWeek() : 1);
+ var d = date.calendar().fromJD(jd);
+ this._validateLevel--;
+ return [d.year(), d.month(), d.day()];
+ }
+ try {
+ var y = date.year() + (period === 'y' ? offset : 0);
+ var m = date.monthOfYear() + (period === 'm' ? offset : 0);
+ var d = date.day();// + (period === 'd' ? offset : 0) +
+ //(period === 'w' ? offset * this.daysInWeek() : 0);
+ var resyncYearMonth = function(calendar) {
+ while (m < calendar.minMonth) {
+ y--;
+ m += calendar.monthsInYear(y);
+ }
+ var yearMonths = calendar.monthsInYear(y);
+ while (m > yearMonths - 1 + calendar.minMonth) {
+ y++;
+ m -= yearMonths;
+ yearMonths = calendar.monthsInYear(y);
+ }
+ };
+ if (period === 'y') {
+ if (date.month() !== this.fromMonthOfYear(y, m)) { // Hebrew
+ m = this.newDate(y, date.month(), this.minDay).monthOfYear();
+ }
+ m = Math.min(m, this.monthsInYear(y));
+ d = Math.min(d, this.daysInMonth(y, this.fromMonthOfYear(y, m)));
+ }
+ else if (period === 'm') {
+ resyncYearMonth(this);
+ d = Math.min(d, this.daysInMonth(y, this.fromMonthOfYear(y, m)));
+ }
+ var ymd = [y, this.fromMonthOfYear(y, m), d];
+ this._validateLevel--;
+ return ymd;
+ }
+ catch (e) {
+ this._validateLevel--;
+ throw e;
+ }
+ },
+
+ /** Correct a candidate date after adding period(s) to a date.
+ Handle no year zero if necessary.
+ @memberof BaseCalendar
+ @private
+ @param date {CDate} The starting date.
+ @param ymd {number[]} The added date.
+ @param offset {number} The number of periods to adjust by.
+ @param period {string} One of 'y' for year, 'm' for month, 'w' for week, 'd' for day.
+ @return {CDate} The updated date. */
+ _correctAdd: function(date, ymd, offset, period) {
+ if (!this.hasYearZero && (period === 'y' || period === 'm')) {
+ if (ymd[0] === 0 || // In year zero
+ (date.year() > 0) !== (ymd[0] > 0)) { // Crossed year zero
+ var adj = {y: [1, 1, 'y'], m: [1, this.monthsInYear(-1), 'm'],
+ w: [this.daysInWeek(), this.daysInYear(-1), 'd'],
+ d: [1, this.daysInYear(-1), 'd']}[period];
+ var dir = (offset < 0 ? -1 : +1);
+ ymd = this._add(date, offset * adj[0] + dir * adj[1], adj[2]);
+ }
+ }
+ return date.date(ymd[0], ymd[1], ymd[2]);
+ },
+
+ /** Set a portion of the date.
+ @memberof BaseCalendar
+ @param date {CDate} The starting date.
+ @param value {number} The new value for the period.
+ @param period {string} One of 'y' for year, 'm' for month, 'd' for day.
+ @return {CDate} The updated date.
+ @throws Error if an invalid date or a different calendar used. */
+ set: function(date, value, period) {
+ this._validate(date, this.minMonth, this.minDay,
+ _exports.local.invalidDate || _exports.regionalOptions[''].invalidDate);
+ var y = (period === 'y' ? value : date.year());
+ var m = (period === 'm' ? value : date.month());
+ var d = (period === 'd' ? value : date.day());
+ if (period === 'y' || period === 'm') {
+ d = Math.min(d, this.daysInMonth(y, m));
+ }
+ return date.date(y, m, d);
+ },
+
+ /** Determine whether a date is valid for this calendar.
+ @memberof BaseCalendar
+ @param year {number} The year to examine.
+ @param month {number} The month to examine.
+ @param day {number} The day to examine.
+ @return {boolean} true if a valid date, false if not. */
+ isValid: function(year, month, day) {
+ this._validateLevel++;
+ var valid = (this.hasYearZero || year !== 0);
+ if (valid) {
+ var date = this.newDate(year, month, this.minDay);
+ valid = (month >= this.minMonth && month - this.minMonth < this.monthsInYear(date)) &&
+ (day >= this.minDay && day - this.minDay < this.daysInMonth(date));
+ }
+ this._validateLevel--;
+ return valid;
+ },
+
+ /** Convert the date to a standard (Gregorian) JavaScript Date.
+ @memberof BaseCalendar
+ @param year {CDate|number} The date to convert or the year to convert.
+ @param [month] {number} The month to convert.
+ @param [day] {number} The day to convert.
+ @return {Date} The equivalent JavaScript date.
+ @throws Error if an invalid date or a different calendar used. */
+ toJSDate: function(year, month, day) {
+ var date = this._validate(year, month, day,
+ _exports.local.invalidDate || _exports.regionalOptions[''].invalidDate);
+ return _exports.instance().fromJD(this.toJD(date)).toJSDate();
+ },
+
+ /** Convert the date from a standard (Gregorian) JavaScript Date.
+ @memberof BaseCalendar
+ @param jsd {Date} The JavaScript date.
+ @return {CDate} The equivalent calendar date. */
+ fromJSDate: function(jsd) {
+ return this.fromJD(_exports.instance().fromJSDate(jsd).toJD());
+ },
+
+ /** Check that a candidate date is from the same calendar and is valid.
+ @memberof BaseCalendar
+ @private
+ @param year {CDate|number} The date to validate or the year to validate.
+ @param [month] {number} The month to validate.
+ @param [day] {number} The day to validate.
+ @param error {string} Rrror message if invalid.
+ @throws Error if different calendars used or invalid date. */
+ _validate: function(year, month, day, error) {
+ if (year.year) {
+ if (this._validateLevel === 0 && this.name !== year.calendar().name) {
+ throw (_exports.local.differentCalendars || _exports.regionalOptions[''].differentCalendars).
+ replace(/\{0\}/, this.local.name).replace(/\{1\}/, year.calendar().local.name);
+ }
+ return year;
+ }
+ try {
+ this._validateLevel++;
+ if (this._validateLevel === 1 && !this.isValid(year, month, day)) {
+ throw error.replace(/\{0\}/, this.local.name);
+ }
+ var date = this.newDate(year, month, day);
+ this._validateLevel--;
+ return date;
+ }
+ catch (e) {
+ this._validateLevel--;
+ throw e;
+ }
+ }
+});
+
+/** Implementation of the Proleptic Gregorian Calendar.
+ See http://en.wikipedia.org/wiki/Gregorian_calendar
+ and http://en.wikipedia.org/wiki/Proleptic_Gregorian_calendar.
+ @class GregorianCalendar
+ @augments BaseCalendar
+ @param [language=''] {string} The language code (default English) for localisation. */
+function GregorianCalendar(language) {
+ this.local = this.regionalOptions[language] || this.regionalOptions[''];
+}
+
+GregorianCalendar.prototype = new BaseCalendar;
+
+assign(GregorianCalendar.prototype, {
+ /** The calendar name.
+ @memberof GregorianCalendar */
+ name: 'Gregorian',
+ /** Julian date of start of Gregorian epoch: 1 January 0001 CE.
+ @memberof GregorianCalendar */
+ jdEpoch: 1721425.5,
+ /** Days per month in a common year.
+ @memberof GregorianCalendar */
+ daysPerMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],
+ /** true if has a year zero, false if not.
+ @memberof GregorianCalendar */
+ hasYearZero: false,
+ /** The minimum month number.
+ @memberof GregorianCalendar */
+ minMonth: 1,
+ /** The first month in the year.
+ @memberof GregorianCalendar */
+ firstMonth: 1,
+ /** The minimum day number.
+ @memberof GregorianCalendar */
+ minDay: 1,
+
+ /** Localisations for the plugin.
+ Entries are objects indexed by the language code ('' being the default US/English).
+ Each object has the following attributes.
+ @memberof GregorianCalendar
+ @property name {string} The calendar name.
+ @property epochs {string[]} The epoch names.
+ @property monthNames {string[]} The long names of the months of the year.
+ @property monthNamesShort {string[]} The short names of the months of the year.
+ @property dayNames {string[]} The long names of the days of the week.
+ @property dayNamesShort {string[]} The short names of the days of the week.
+ @property dayNamesMin {string[]} The minimal names of the days of the week.
+ @property dateFormat {string} The date format for this calendar.
+ See the options on formatDate for details.
+ @property firstDay {number} The number of the first day of the week, starting at 0.
+ @property isRTL {number} true if this localisation reads right-to-left. */
+ regionalOptions: { // Localisations
+ '': {
+ name: 'Gregorian',
+ epochs: ['BCE', 'CE'],
+ monthNames: ['January', 'February', 'March', 'April', 'May', 'June',
+ 'July', 'August', 'September', 'October', 'November', 'December'],
+ monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
+ dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
+ dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
+ dayNamesMin: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],
+ digits: null,
+ dateFormat: 'mm/dd/yyyy',
+ firstDay: 0,
+ isRTL: false
+ }
+ },
+
+ /** Determine whether this date is in a leap year.
+ @memberof GregorianCalendar
+ @param year {CDate|number} The date to examine or the year to examine.
+ @return {boolean} true if this is a leap year, false if not.
+ @throws Error if an invalid year or a different calendar used. */
+ leapYear: function(year) {
+ var date = this._validate(year, this.minMonth, this.minDay,
+ _exports.local.invalidYear || _exports.regionalOptions[''].invalidYear);
+ var year = date.year() + (date.year() < 0 ? 1 : 0); // No year zero
+ return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);
+ },
+
+ /** Determine the week of the year for a date - ISO 8601.
+ @memberof GregorianCalendar
+ @param year {CDate|number} The date to examine or the year to examine.
+ @param [month] {number} The month to examine.
+ @param [day] {number} The day to examine.
+ @return {number} The week of the year, starting from 1.
+ @throws Error if an invalid date or a different calendar used. */
+ weekOfYear: function(year, month, day) {
+ // Find Thursday of this week starting on Monday
+ var checkDate = this.newDate(year, month, day);
+ checkDate.add(4 - (checkDate.dayOfWeek() || 7), 'd');
+ return Math.floor((checkDate.dayOfYear() - 1) / 7) + 1;
+ },
+
+ /** Retrieve the number of days in a month.
+ @memberof GregorianCalendar
+ @param year {CDate|number} The date to examine or the year of the month.
+ @param [month] {number} The month.
+ @return {number} The number of days in this month.
+ @throws Error if an invalid month/year or a different calendar used. */
+ daysInMonth: function(year, month) {
+ var date = this._validate(year, month, this.minDay,
+ _exports.local.invalidMonth || _exports.regionalOptions[''].invalidMonth);
+ return this.daysPerMonth[date.month() - 1] +
+ (date.month() === 2 && this.leapYear(date.year()) ? 1 : 0);
+ },
+
+ /** Determine whether this date is a week day.
+ @memberof GregorianCalendar
+ @param year {CDate|number} The date to examine or the year to examine.
+ @param [month] {number} The month to examine.
+ @param [day] {number} The day to examine.
+ @return {boolean} true if a week day, false if not.
+ @throws Error if an invalid date or a different calendar used. */
+ weekDay: function(year, month, day) {
+ return (this.dayOfWeek(year, month, day) || 7) < 6;
+ },
+
+ /** Retrieve the Julian date equivalent for this date,
+ i.e. days since January 1, 4713 BCE Greenwich noon.
+ @memberof GregorianCalendar
+ @param year {CDate|number} The date to convert or the year to convert.
+ @param [month] {number} The month to convert.
+ @param [day] {number} The day to convert.
+ @return {number} The equivalent Julian date.
+ @throws Error if an invalid date or a different calendar used. */
+ toJD: function(year, month, day) {
+ var date = this._validate(year, month, day,
+ _exports.local.invalidDate || _exports.regionalOptions[''].invalidDate);
+ year = date.year();
+ month = date.month();
+ day = date.day();
+ if (year < 0) { year++; } // No year zero
+ // Jean Meeus algorithm, "Astronomical Algorithms", 1991
+ if (month < 3) {
+ month += 12;
+ year--;
+ }
+ var a = Math.floor(year / 100);
+ var b = 2 - a + Math.floor(a / 4);
+ return Math.floor(365.25 * (year + 4716)) +
+ Math.floor(30.6001 * (month + 1)) + day + b - 1524.5;
+ },
+
+ /** Create a new date from a Julian date.
+ @memberof GregorianCalendar
+ @param jd {number} The Julian date to convert.
+ @return {CDate} The equivalent date. */
+ fromJD: function(jd) {
+ // Jean Meeus algorithm, "Astronomical Algorithms", 1991
+ var z = Math.floor(jd + 0.5);
+ var a = Math.floor((z - 1867216.25) / 36524.25);
+ a = z + 1 + a - Math.floor(a / 4);
+ var b = a + 1524;
+ var c = Math.floor((b - 122.1) / 365.25);
+ var d = Math.floor(365.25 * c);
+ var e = Math.floor((b - d) / 30.6001);
+ var day = b - d - Math.floor(e * 30.6001);
+ var month = e - (e > 13.5 ? 13 : 1);
+ var year = c - (month > 2.5 ? 4716 : 4715);
+ if (year <= 0) { year--; } // No year zero
+ return this.newDate(year, month, day);
+ },
+
+ /** Convert this date to a standard (Gregorian) JavaScript Date.
+ @memberof GregorianCalendar
+ @param year {CDate|number} The date to convert or the year to convert.
+ @param [month] {number} The month to convert.
+ @param [day] {number} The day to convert.
+ @return {Date} The equivalent JavaScript date.
+ @throws Error if an invalid date or a different calendar used. */
+ toJSDate: function(year, month, day) {
+ var date = this._validate(year, month, day,
+ _exports.local.invalidDate || _exports.regionalOptions[''].invalidDate);
+ var jsd = new Date(date.year(), date.month() - 1, date.day());
+ jsd.setHours(0);
+ jsd.setMinutes(0);
+ jsd.setSeconds(0);
+ jsd.setMilliseconds(0);
+ // Hours may be non-zero on daylight saving cut-over:
+ // > 12 when midnight changeover, but then cannot generate
+ // midnight datetime, so jump to 1AM, otherwise reset.
+ jsd.setHours(jsd.getHours() > 12 ? jsd.getHours() + 2 : 0);
+ return jsd;
+ },
+
+ /** Create a new date from a standard (Gregorian) JavaScript Date.
+ @memberof GregorianCalendar
+ @param jsd {Date} The JavaScript date to convert.
+ @return {CDate} The equivalent date. */
+ fromJSDate: function(jsd) {
+ return this.newDate(jsd.getFullYear(), jsd.getMonth() + 1, jsd.getDate());
+ }
+});
+
+// Singleton manager
+var _exports = module.exports = new Calendars();
+
+// Date template
+_exports.cdate = CDate;
+
+// Base calendar template
+_exports.baseCalendar = BaseCalendar;
+
+// Gregorian calendar implementation
+_exports.calendars.gregorian = GregorianCalendar;
+
diff --git a/dist/plus.js b/dist/plus.js
new file mode 100644
index 0000000..811a120
--- /dev/null
+++ b/dist/plus.js
@@ -0,0 +1,452 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Calendars extras for jQuery v2.0.2.
+ Written by Keith Wood (wood.keith{at}optusnet.com.au) August 2009.
+ Available under the MIT (http://keith-wood.name/licence.html) license.
+ Please attribute the author if you use it. */
+
+var assign = require('object-assign');
+var main = require('./main');
+
+
+assign(main.regionalOptions[''], {
+ invalidArguments: 'Invalid arguments',
+ invalidFormat: 'Cannot format a date from another calendar',
+ missingNumberAt: 'Missing number at position {0}',
+ unknownNameAt: 'Unknown name at position {0}',
+ unexpectedLiteralAt: 'Unexpected literal at position {0}',
+ unexpectedText: 'Additional text found at end'
+});
+main.local = main.regionalOptions[''];
+
+assign(main.cdate.prototype, {
+
+ /** Format this date.
+ Found in the jquery.calendars.plus.js module.
+ @memberof CDate
+ @param [format] {string} The date format to use (see formatDate).
+ @param [settings] {object} Options for the formatDate function.
+ @return {string} The formatted date. */
+ formatDate: function(format, settings) {
+ if (typeof format !== 'string') {
+ settings = format;
+ format = '';
+ }
+ return this._calendar.formatDate(format || '', this, settings);
+ }
+});
+
+assign(main.baseCalendar.prototype, {
+
+ UNIX_EPOCH: main.instance().newDate(1970, 1, 1).toJD(),
+ SECS_PER_DAY: 24 * 60 * 60,
+ TICKS_EPOCH: main.instance().jdEpoch, // 1 January 0001 CE
+ TICKS_PER_DAY: 24 * 60 * 60 * 10000000,
+
+ /** Date form for ATOM (RFC 3339/ISO 8601).
+ Found in the jquery.calendars.plus.js module.
+ @memberof BaseCalendar */
+ ATOM: 'yyyy-mm-dd',
+ /** Date form for cookies.
+ Found in the jquery.calendars.plus.js module.
+ @memberof BaseCalendar */
+ COOKIE: 'D, dd M yyyy',
+ /** Date form for full date.
+ Found in the jquery.calendars.plus.js module.
+ @memberof BaseCalendar */
+ FULL: 'DD, MM d, yyyy',
+ /** Date form for ISO 8601.
+ Found in the jquery.calendars.plus.js module.
+ @memberof BaseCalendar */
+ ISO_8601: 'yyyy-mm-dd',
+ /** Date form for Julian date.
+ Found in the jquery.calendars.plus.js module.
+ @memberof BaseCalendar */
+ JULIAN: 'J',
+ /** Date form for RFC 822.
+ Found in the jquery.calendars.plus.js module.
+ @memberof BaseCalendar */
+ RFC_822: 'D, d M yy',
+ /** Date form for RFC 850.
+ Found in the jquery.calendars.plus.js module.
+ @memberof BaseCalendar */
+ RFC_850: 'DD, dd-M-yy',
+ /** Date form for RFC 1036.
+ Found in the jquery.calendars.plus.js module.
+ @memberof BaseCalendar */
+ RFC_1036: 'D, d M yy',
+ /** Date form for RFC 1123.
+ Found in the jquery.calendars.plus.js module.
+ @memberof BaseCalendar */
+ RFC_1123: 'D, d M yyyy',
+ /** Date form for RFC 2822.
+ Found in the jquery.calendars.plus.js module.
+ @memberof BaseCalendar */
+ RFC_2822: 'D, d M yyyy',
+ /** Date form for RSS (RFC 822).
+ Found in the jquery.calendars.plus.js module.
+ @memberof BaseCalendar */
+ RSS: 'D, d M yy',
+ /** Date form for Windows ticks.
+ Found in the jquery.calendars.plus.js module.
+ @memberof BaseCalendar */
+ TICKS: '!',
+ /** Date form for Unix timestamp.
+ Found in the jquery.calendars.plus.js module.
+ @memberof BaseCalendar */
+ TIMESTAMP: '@',
+ /** Date form for W3c (ISO 8601).
+ Found in the jquery.calendars.plus.js module.
+ @memberof BaseCalendar */
+ W3C: 'yyyy-mm-dd',
+
+ /** Format a date object into a string value.
+ The format can be combinations of the following:
+
+
d - day of month (no leading zero)
+
dd - day of month (two digit)
+
o - day of year (no leading zeros)
+
oo - day of year (three digit)
+
D - day name short
+
DD - day name long
+
w - week of year (no leading zero)
+
ww - week of year (two digit)
+
m - month of year (no leading zero)
+
mm - month of year (two digit)
+
M - month name short
+
MM - month name long
+
yy - year (two digit)
+
yyyy - year (four digit)
+
YYYY - formatted year
+
J - Julian date (days since January 1, 4713 BCE Greenwich noon)
+
@ - Unix timestamp (s since 01/01/1970)
+
! - Windows ticks (100ns since 01/01/0001)
+
'...' - literal text
+
'' - single quote
+
+ Found in the jquery.calendars.plus.js module.
+ @memberof BaseCalendar
+ @param [format] {string} The desired format of the date (defaults to calendar format).
+ @param date {CDate} The date value to format.
+ @param [settings] {object} Addition options, whose attributes include:
+ @property [dayNamesShort] {string[]} Abbreviated names of the days from Sunday.
+ @property [dayNames] {string[]} Names of the days from Sunday.
+ @property [monthNamesShort] {string[]} Abbreviated names of the months.
+ @property [monthNames] {string[]} Names of the months.
+ @property [calculateWeek] {CalendarsPickerCalculateWeek} Function that determines week of the year.
+ @property [localNumbers=false] {boolean} true to localise numbers (if available),
+ false to use normal Arabic numerals.
+ @return {string} The date in the above format.
+ @throws Errors if the date is from a different calendar. */
+ formatDate: function(format, date, settings) {
+ if (typeof format !== 'string') {
+ settings = date;
+ date = format;
+ format = '';
+ }
+ if (!date) {
+ return '';
+ }
+ if (date.calendar() !== this) {
+ throw main.local.invalidFormat || main.regionalOptions[''].invalidFormat;
+ }
+ format = format || this.local.dateFormat;
+ settings = settings || {};
+ var dayNamesShort = settings.dayNamesShort || this.local.dayNamesShort;
+ var dayNames = settings.dayNames || this.local.dayNames;
+ var monthNamesShort = settings.monthNamesShort || this.local.monthNamesShort;
+ var monthNames = settings.monthNames || this.local.monthNames;
+ var calculateWeek = settings.calculateWeek || this.local.calculateWeek;
+ // Check whether a format character is doubled
+ var doubled = function(match, step) {
+ var matches = 1;
+ while (iFormat + matches < format.length && format.charAt(iFormat + matches) === match) {
+ matches++;
+ }
+ iFormat += matches - 1;
+ return Math.floor(matches / (step || 1)) > 1;
+ };
+ // Format a number, with leading zeroes if necessary
+ var formatNumber = function(match, value, len, step) {
+ var num = '' + value;
+ if (doubled(match, step)) {
+ while (num.length < len) {
+ num = '0' + num;
+ }
+ }
+ return num;
+ };
+ // Format a name, short or long as requested
+ var formatName = function(match, value, shortNames, longNames) {
+ return (doubled(match) ? longNames[value] : shortNames[value]);
+ };
+ // Localise numbers if requested and available
+ var digits = this.local.digits;
+ var localiseNumbers = function(value) {
+ return (settings.localNumbers && digits ? digits(value) : value);
+ };
+ var output = '';
+ var literal = false;
+ for (var iFormat = 0; iFormat < format.length; iFormat++) {
+ if (literal) {
+ if (format.charAt(iFormat) === "'" && !doubled("'")) {
+ literal = false;
+ }
+ else {
+ output += format.charAt(iFormat);
+ }
+ }
+ else {
+ switch (format.charAt(iFormat)) {
+ case 'd': output += localiseNumbers(formatNumber('d', date.day(), 2)); break;
+ case 'D': output += formatName('D', date.dayOfWeek(),
+ dayNamesShort, dayNames); break;
+ case 'o': output += formatNumber('o', date.dayOfYear(), 3); break;
+ case 'w': output += formatNumber('w', date.weekOfYear(), 2); break;
+ case 'm': output += localiseNumbers(formatNumber('m', date.month(), 2)); break;
+ case 'M': output += formatName('M', date.month() - this.minMonth,
+ monthNamesShort, monthNames); break;
+ case 'y':
+ output += (doubled('y', 2) ? date.year() :
+ (date.year() % 100 < 10 ? '0' : '') + date.year() % 100);
+ break;
+ case 'Y':
+ doubled('Y', 2);
+ output += date.formatYear();
+ break;
+ case 'J': output += date.toJD(); break;
+ case '@': output += (date.toJD() - this.UNIX_EPOCH) * this.SECS_PER_DAY; break;
+ case '!': output += (date.toJD() - this.TICKS_EPOCH) * this.TICKS_PER_DAY; break;
+ case "'":
+ if (doubled("'")) {
+ output += "'";
+ }
+ else {
+ literal = true;
+ }
+ break;
+ default:
+ output += format.charAt(iFormat);
+ }
+ }
+ }
+ return output;
+ },
+
+ /** Parse a string value into a date object.
+ See formatDate for the possible formats, plus:
+
+
* - ignore rest of string
+
+ Found in the jquery.calendars.plus.js module.
+ @memberof BaseCalendar
+ @param format {string} The expected format of the date ('' for default calendar format).
+ @param value {string} The date in the above format.
+ @param [settings] {object} Additional options whose attributes include:
+ @property [shortYearCutoff] {number} The cutoff year for determining the century.
+ @property [dayNamesShort] {string[]} Abbreviated names of the days from Sunday.
+ @property [dayNames] {string[]} Names of the days from Sunday.
+ @property [monthNamesShort] {string[]} Abbreviated names of the months.
+ @property [monthNames] {string[]} Names of the months.
+ @return {CDate} The extracted date value or null if value is blank.
+ @throws Errors if the format and/or value are missing,
+ if the value doesn't match the format, or if the date is invalid. */
+ parseDate: function(format, value, settings) {
+ if (value == null) {
+ throw main.local.invalidArguments || main.regionalOptions[''].invalidArguments;
+ }
+ value = (typeof value === 'object' ? value.toString() : value + '');
+ if (value === '') {
+ return null;
+ }
+ format = format || this.local.dateFormat;
+ settings = settings || {};
+ var shortYearCutoff = settings.shortYearCutoff || this.shortYearCutoff;
+ shortYearCutoff = (typeof shortYearCutoff !== 'string' ? shortYearCutoff :
+ this.today().year() % 100 + parseInt(shortYearCutoff, 10));
+ var dayNamesShort = settings.dayNamesShort || this.local.dayNamesShort;
+ var dayNames = settings.dayNames || this.local.dayNames;
+ var monthNamesShort = settings.monthNamesShort || this.local.monthNamesShort;
+ var monthNames = settings.monthNames || this.local.monthNames;
+ var jd = -1;
+ var year = -1;
+ var month = -1;
+ var day = -1;
+ var doy = -1;
+ var shortYear = false;
+ var literal = false;
+ // Check whether a format character is doubled
+ var doubled = function(match, step) {
+ var matches = 1;
+ while (iFormat + matches < format.length && format.charAt(iFormat + matches) === match) {
+ matches++;
+ }
+ iFormat += matches - 1;
+ return Math.floor(matches / (step || 1)) > 1;
+ };
+ // Extract a number from the string value
+ var getNumber = function(match, step) {
+ var isDoubled = doubled(match, step);
+ var size = [2, 3, isDoubled ? 4 : 2, isDoubled ? 4 : 2, 10, 11, 20]['oyYJ@!'.indexOf(match) + 1];
+ var digits = new RegExp('^-?\\d{1,' + size + '}');
+ var num = value.substring(iValue).match(digits);
+ if (!num) {
+ throw (main.local.missingNumberAt || main.regionalOptions[''].missingNumberAt).
+ replace(/\{0\}/, iValue);
+ }
+ iValue += num[0].length;
+ return parseInt(num[0], 10);
+ };
+ // Extract a name from the string value and convert to an index
+ var calendar = this;
+ var getName = function(match, shortNames, longNames, step) {
+ var names = (doubled(match, step) ? longNames : shortNames);
+ for (var i = 0; i < names.length; i++) {
+ if (value.substr(iValue, names[i].length).toLowerCase() === names[i].toLowerCase()) {
+ iValue += names[i].length;
+ return i + calendar.minMonth;
+ }
+ }
+ throw (main.local.unknownNameAt || main.regionalOptions[''].unknownNameAt).
+ replace(/\{0\}/, iValue);
+ };
+ // Confirm that a literal character matches the string value
+ var checkLiteral = function() {
+ if (value.charAt(iValue) !== format.charAt(iFormat)) {
+ throw (main.local.unexpectedLiteralAt ||
+ main.regionalOptions[''].unexpectedLiteralAt).replace(/\{0\}/, iValue);
+ }
+ iValue++;
+ };
+ var iValue = 0;
+ for (var iFormat = 0; iFormat < format.length; iFormat++) {
+ if (literal) {
+ if (format.charAt(iFormat) === "'" && !doubled("'")) {
+ literal = false;
+ }
+ else {
+ checkLiteral();
+ }
+ }
+ else {
+ switch (format.charAt(iFormat)) {
+ case 'd': day = getNumber('d'); break;
+ case 'D': getName('D', dayNamesShort, dayNames); break;
+ case 'o': doy = getNumber('o'); break;
+ case 'w': getNumber('w'); break;
+ case 'm': month = getNumber('m'); break;
+ case 'M': month = getName('M', monthNamesShort, monthNames); break;
+ case 'y':
+ var iSave = iFormat;
+ shortYear = !doubled('y', 2);
+ iFormat = iSave;
+ year = getNumber('y', 2);
+ break;
+ case 'Y': year = getNumber('Y', 2); break;
+ case 'J':
+ jd = getNumber('J') + 0.5;
+ if (value.charAt(iValue) === '.') {
+ iValue++;
+ getNumber('J');
+ }
+ break;
+ case '@': jd = getNumber('@') / this.SECS_PER_DAY + this.UNIX_EPOCH; break;
+ case '!': jd = getNumber('!') / this.TICKS_PER_DAY + this.TICKS_EPOCH; break;
+ case '*': iValue = value.length; break;
+ case "'":
+ if (doubled("'")) {
+ checkLiteral();
+ }
+ else {
+ literal = true;
+ }
+ break;
+ default: checkLiteral();
+ }
+ }
+ }
+ if (iValue < value.length) {
+ throw main.local.unexpectedText || main.regionalOptions[''].unexpectedText;
+ }
+ if (year === -1) {
+ year = this.today().year();
+ }
+ else if (year < 100 && shortYear) {
+ year += (shortYearCutoff === -1 ? 1900 : this.today().year() -
+ this.today().year() % 100 - (year <= shortYearCutoff ? 0 : 100));
+ }
+ if (doy > -1) {
+ month = 1;
+ day = doy;
+ for (var dim = this.daysInMonth(year, month); day > dim; dim = this.daysInMonth(year, month)) {
+ month++;
+ day -= dim;
+ }
+ }
+ return (jd > -1 ? this.fromJD(jd) : this.newDate(year, month, day));
+ },
+
+ /** A date may be specified as an exact value or a relative one.
+ Found in the jquery.calendars.plus.js module.
+ @memberof BaseCalendar
+ @param dateSpec {CDate|number|string} The date as an object or string in the given format or
+ an offset - numeric days from today, or string amounts and periods, e.g. '+1m +2w'.
+ @param defaultDate {CDate} The date to use if no other supplied, may be null.
+ @param currentDate {CDate} The current date as a possible basis for relative dates,
+ if null today is used (optional)
+ @param [dateFormat] {string} The expected date format - see formatDate.
+ @param [settings] {object} Additional options whose attributes include:
+ @property [shortYearCutoff] {number} The cutoff year for determining the century.
+ @property [dayNamesShort] {string[]} Abbreviated names of the days from Sunday.
+ @property [dayNames] {string[]} Names of the days from Sunday.
+ @property [monthNamesShort] {string[]} Abbreviated names of the months.
+ @property [monthNames] {string[]} Names of the months.
+ @return {CDate} The decoded date. */
+ determineDate: function(dateSpec, defaultDate, currentDate, dateFormat, settings) {
+ if (currentDate && typeof currentDate !== 'object') {
+ settings = dateFormat;
+ dateFormat = currentDate;
+ currentDate = null;
+ }
+ if (typeof dateFormat !== 'string') {
+ settings = dateFormat;
+ dateFormat = '';
+ }
+ var calendar = this;
+ var offsetString = function(offset) {
+ try {
+ return calendar.parseDate(dateFormat, offset, settings);
+ }
+ catch (e) {
+ // Ignore
+ }
+ offset = offset.toLowerCase();
+ var date = (offset.match(/^c/) && currentDate ?
+ currentDate.newDate() : null) || calendar.today();
+ var pattern = /([+-]?[0-9]+)\s*(d|w|m|y)?/g;
+ var matches = pattern.exec(offset);
+ while (matches) {
+ date.add(parseInt(matches[1], 10), matches[2] || 'd');
+ matches = pattern.exec(offset);
+ }
+ return date;
+ };
+ defaultDate = (defaultDate ? defaultDate.newDate() : null);
+ dateSpec = (dateSpec == null ? defaultDate :
+ (typeof dateSpec === 'string' ? offsetString(dateSpec) : (typeof dateSpec === 'number' ?
+ (isNaN(dateSpec) || dateSpec === Infinity || dateSpec === -Infinity ? defaultDate :
+ calendar.today().add(dateSpec, 'd')) : calendar.newDate(dateSpec))));
+ return dateSpec;
+ }
+});
+
diff --git a/dist/regional/af.js b/dist/regional/af.js
new file mode 100644
index 0000000..f6dd92a
--- /dev/null
+++ b/dist/regional/af.js
@@ -0,0 +1,37 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Afrikaans localisation for Gregorian/Julian calendars for jQuery.
+ Written by Renier Pretorius and Ruediger Thiede. */
+var main = require('../main');
+var _gregorian = main.calendars.gregorian;
+var _julian = main.calendars.julian;
+
+_gregorian.prototype.regionalOptions['af'] = {
+ name: 'Gregorian',
+ epochs: ['BCE', 'CE'],
+ monthNames: ['Januarie','Februarie','Maart','April','Mei','Junie',
+ 'Julie','Augustus','September','Oktober','November','Desember'],
+ monthNamesShort: ['Jan', 'Feb', 'Mrt', 'Apr', 'Mei', 'Jun',
+ 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Des'],
+ dayNames: ['Sondag', 'Maandag', 'Dinsdag', 'Woensdag', 'Donderdag', 'Vrydag', 'Saterdag'],
+ dayNamesShort: ['Son', 'Maan', 'Dins', 'Woens', 'Don', 'Vry', 'Sat'],
+ dayNamesMin: ['So','Ma','Di','Wo','Do','Vr','Sa'],
+ digits: null,
+ dateFormat: 'dd/mm/yyyy',
+ firstDay: 1,
+ isRTL: false
+};
+if (_julian) {
+ _julian.prototype.regionalOptions['af'] =
+ _gregorian.prototype.regionalOptions['af'];
+}
diff --git a/dist/regional/am.js b/dist/regional/am.js
new file mode 100644
index 0000000..86eb653
--- /dev/null
+++ b/dist/regional/am.js
@@ -0,0 +1,37 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Amharic (አማርኛ) localisation for Gregorian/Julian calendars for jQuery.
+ Leyu Sisay. */
+var main = require('../main');
+var _gregorian = main.calendars.gregorian;
+var _julian = main.calendars.julian;
+
+_gregorian.prototype.regionalOptions['am'] = {
+ name: 'Gregorian',
+ epochs: ['BCE', 'CE'],
+ monthNames: ['ጃንዋሪ','ፈብርዋሪ','ማርች','አፕሪል','ሜይ','ጁን',
+ 'ጁላይ','ኦገስት','ሴፕቴምበር','ኦክቶበር','ኖቬምበር','ዲሴምበር'],
+ monthNamesShort: ['ጃንዋ', 'ፈብር', 'ማርች', 'አፕሪ', 'ሜይ', 'ጁን',
+ 'ጁላይ', 'ኦገስ', 'ሴፕቴ', 'ኦክቶ', 'ኖቬም', 'ዲሴም'],
+ dayNames: ['ሰንዴይ', 'መንዴይ', 'ትዩስዴይ', 'ዌንስዴይ', 'ተርሰዴይ', 'ፍራይዴይ', 'ሳተርዴይ'],
+ dayNamesShort: ['ሰንዴ', 'መንዴ', 'ትዩስ', 'ዌንስ', 'ተርሰ', 'ፍራይ', 'ሳተር'],
+ dayNamesMin: ['ሰን', 'መን', 'ትዩ', 'ዌን', 'ተር', 'ፍራ', 'ሳተ'],
+ digits: null,
+ dateFormat: 'dd/mm/yyyy',
+ firstDay: 1,
+ isRTL: false
+};
+if (_julian) {
+ _julian.prototype.regionalOptions['am'] =
+ _gregorian.prototype.regionalOptions['am'];
+}
diff --git a/dist/regional/ar-DZ.js b/dist/regional/ar-DZ.js
new file mode 100644
index 0000000..25ff2f1
--- /dev/null
+++ b/dist/regional/ar-DZ.js
@@ -0,0 +1,36 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Algerian (and Tunisian) Arabic localisation for Gregorian/Julian calendars for jQuery.
+ Mohamed Cherif BOUCHELAGHEM -- cherifbouchelaghem@yahoo.fr */
+var main = require('../main');
+var _gregorian = main.calendars.gregorian;
+var _julian = main.calendars.julian;
+
+_gregorian.prototype.regionalOptions['ar-DZ'] = {
+ name: 'Gregorian',
+ epochs: ['BCE', 'CE'],
+ monthNames: ['جانفي', 'فيفري', 'مارس', 'أفريل', 'ماي', 'جوان',
+ 'جويلية', 'أوت', 'سبتمبر','أكتوبر', 'نوفمبر', 'ديسمبر'],
+ monthNamesShort: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'],
+ dayNames: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
+ dayNamesShort: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
+ dayNamesMin: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
+ digits: null,
+ dateFormat: 'dd/mm/yyyy',
+ firstDay: 6,
+ isRTL: true
+};
+if (_julian) {
+ _julian.prototype.regionalOptions['ar-DZ'] =
+ _gregorian.prototype.regionalOptions['ar-DZ'];
+}
diff --git a/dist/regional/ar-EG.js b/dist/regional/ar-EG.js
new file mode 100644
index 0000000..fb02116
--- /dev/null
+++ b/dist/regional/ar-EG.js
@@ -0,0 +1,37 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Arabic localisation for Gregorian/Julian calendars for jQuery.
+ Mahmoud Khaled -- mahmoud.khaled@badrit.com
+ NOTE: monthNames are the new months names */
+var main = require('../main');
+var _gregorian = main.calendars.gregorian;
+var _julian = main.calendars.julian;
+
+_gregorian.prototype.regionalOptions['ar-EG'] = {
+ name: 'Gregorian',
+ epochs: ['BCE', 'CE'],
+ monthNames: ['يناير', 'فبراير', 'مارس', 'إبريل', 'مايو', 'يونية',
+ 'يوليو', 'أغسطس', 'سبتمبر', 'أكتوبر', 'نوفمبر', 'ديسمبر'],
+ monthNamesShort: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'],
+ dayNames: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
+ dayNamesShort: ['أحد', 'اثنين', 'ثلاثاء', 'أربعاء', 'خميس', 'جمعة', 'سبت'],
+ dayNamesMin: ['أحد', 'اثنين', 'ثلاثاء', 'أربعاء', 'خميس', 'جمعة', 'سبت'],
+ digits: null,
+ dateFormat: 'dd/mm/yyyy',
+ firstDay: 6,
+ isRTL: true
+};
+if (_julian) {
+ _julian.prototype.regionalOptions['ar-EG'] =
+ _gregorian.prototype.regionalOptions['ar-EG'];
+}
diff --git a/dist/regional/ar.js b/dist/regional/ar.js
new file mode 100644
index 0000000..fd5b51f
--- /dev/null
+++ b/dist/regional/ar.js
@@ -0,0 +1,38 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Arabic localisation for Gregorian/Julian calendars for jQuery.
+ Khaled Al Horani -- خالد الحوراني -- koko.dw@gmail.com. */
+/* NOTE: monthNames are the original months names and they are the Arabic names,
+ not the new months name فبراير - يناير and there isn't any Arabic roots for these months */
+var main = require('../main');
+var _gregorian = main.calendars.gregorian;
+var _julian = main.calendars.julian;
+
+_gregorian.prototype.regionalOptions['ar'] = {
+ name: 'Gregorian',
+ epochs: ['BCE', 'CE'],
+ monthNames: ['كانون الثاني', 'شباط', 'آذار', 'نيسان', 'آذار', 'حزيران',
+ 'تموز', 'آب', 'أيلول', 'تشرين الأول', 'تشرين الثاني', 'كانون الأول'],
+ monthNamesShort: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'],
+ dayNames: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
+ dayNamesShort: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
+ dayNamesMin: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
+ digits: main.substituteDigits(['٠', '١', '٢', '٣', '٤', '٥', '٦', '٧', '٨', '٩']),
+ dateFormat: 'dd/mm/yyyy',
+ firstDay: 6,
+ isRTL: true
+};
+if (_julian) {
+ _julian.prototype.regionalOptions['ar'] =
+ _gregorian.prototype.regionalOptions['ar'];
+}
diff --git a/dist/regional/az.js b/dist/regional/az.js
new file mode 100644
index 0000000..d35888d
--- /dev/null
+++ b/dist/regional/az.js
@@ -0,0 +1,37 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Azerbaijani localisation for Gregorian/Julian calendars for jQuery.
+ Written by Jamil Najafov (necefov33@gmail.com). */
+var main = require('../main');
+var _gregorian = main.calendars.gregorian;
+var _julian = main.calendars.julian;
+
+_gregorian.prototype.regionalOptions['az'] = {
+ name: 'Gregorian',
+ epochs: ['BCE', 'CE'],
+ monthNames: ['Yanvar','Fevral','Mart','Aprel','May','İyun',
+ 'İyul','Avqust','Sentyabr','Oktyabr','Noyabr','Dekabr'],
+ monthNamesShort: ['Yan','Fev','Mar','Apr','May','İyun',
+ 'İyul','Avq','Sen','Okt','Noy','Dek'],
+ dayNames: ['Bazar','Bazar ertəsi','Çərşənbə axşamı','Çərşənbə','Cümə axşamı','Cümə','Şənbə'],
+ dayNamesShort: ['B','Be','Ça','Ç','Ca','C','Ş'],
+ dayNamesMin: ['B','B','Ç','С','Ç','C','Ş'],
+ digits: null,
+ dateFormat: 'dd.mm.yyyy',
+ firstDay: 1,
+ isRTL: false
+};
+if (_julian) {
+ _julian.prototype.regionalOptions['az'] =
+ _gregorian.prototype.regionalOptions['az'];
+}
diff --git a/dist/regional/bg.js b/dist/regional/bg.js
new file mode 100644
index 0000000..96c9bd8
--- /dev/null
+++ b/dist/regional/bg.js
@@ -0,0 +1,37 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Bulgarian localisation for Gregorian/Julian calendars for jQuery.
+ Written by Stoyan Kyosev (http://svest.org). */
+var main = require('../main');
+var _gregorian = main.calendars.gregorian;
+var _julian = main.calendars.julian;
+
+_gregorian.prototype.regionalOptions['bg'] = {
+ name: 'Gregorian',
+ epochs: ['BCE', 'CE'],
+ monthNames: ['Януари','Февруари','Март','Април','Май','Юни',
+ 'Юли','Август','Септември','Октомври','Ноември','Декември'],
+ monthNamesShort: ['Яну','Фев','Мар','Апр','Май','Юни',
+ 'Юли','Авг','Сеп','Окт','Нов','Дек'],
+ dayNames: ['Неделя','Понеделник','Вторник','Сряда','Четвъртък','Петък','Събота'],
+ dayNamesShort: ['Нед','Пон','Вто','Сря','Чет','Пет','Съб'],
+ dayNamesMin: ['Не','По','Вт','Ср','Че','Пе','Съ'],
+ digits: null,
+ dateFormat: 'dd.mm.yyyy',
+ firstDay: 1,
+ isRTL: false
+};
+if (_julian) {
+ _julian.prototype.regionalOptions['bg'] =
+ _gregorian.prototype.regionalOptions['bg'];
+}
diff --git a/dist/regional/bs.js b/dist/regional/bs.js
new file mode 100644
index 0000000..2db001e
--- /dev/null
+++ b/dist/regional/bs.js
@@ -0,0 +1,37 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Bosnian localisation for Gregorian/Julian calendars for jQuery.
+ Kenan Konjo. */
+var main = require('../main');
+var _gregorian = main.calendars.gregorian;
+var _julian = main.calendars.julian;
+
+_gregorian.prototype.regionalOptions['bs'] = {
+ name: 'Gregorian',
+ epochs: ['BCE', 'CE'],
+ monthNames: ['Januar','Februar','Mart','April','Maj','Juni',
+ 'Juli','August','Septembar','Oktobar','Novembar','Decembar'],
+ monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
+ 'Jul','Aug','Sep','Okt','Nov','Dec'],
+ dayNames: ['Nedelja','Ponedeljak','Utorak','Srijeda','Četvrtak','Petak','Subota'],
+ dayNamesShort: ['Ned','Pon','Uto','Sri','Čet','Pet','Sub'],
+ dayNamesMin: ['Ne','Po','Ut','Sr','Če','Pe','Su'],
+ digits: null,
+ dateFormat: 'dd.mm.yy',
+ firstDay: 1,
+ isRTL: false
+};
+if (_julian) {
+ _julian.prototype.regionalOptions['bs'] =
+ _gregorian.prototype.regionalOptions['bs'];
+}
diff --git a/dist/regional/ca.js b/dist/regional/ca.js
new file mode 100644
index 0000000..488d5e6
--- /dev/null
+++ b/dist/regional/ca.js
@@ -0,0 +1,37 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Catalan localisation for Gregorian/Julian calendars for jQuery.
+ Writers: (joan.leon@gmail.com). */
+var main = require('../main');
+var _gregorian = main.calendars.gregorian;
+var _julian = main.calendars.julian;
+
+_gregorian.prototype.regionalOptions['ca'] = {
+ name: 'Gregorian',
+ epochs: ['BCE', 'CE'],
+ monthNames: ['Gener','Febrer','Març','Abril','Maig','Juny',
+ 'Juliol','Agost','Setembre','Octubre','Novembre','Desembre'],
+ monthNamesShort: ['Gen','Feb','Mar','Abr','Mai','Jun',
+ 'Jul','Ago','Set','Oct','Nov','Des'],
+ dayNames: ['Diumenge','Dilluns','Dimarts','Dimecres','Dijous','Divendres','Dissabte'],
+ dayNamesShort: ['Dug','Dln','Dmt','Dmc','Djs','Dvn','Dsb'],
+ dayNamesMin: ['Dg','Dl','Dt','Dc','Dj','Dv','Ds'],
+ digits: null,
+ dateFormat: 'dd/mm/yyyy',
+ firstDay: 1,
+ isRTL: false
+};
+if (_julian) {
+ _julian.prototype.regionalOptions['ca'] =
+ _gregorian.prototype.regionalOptions['ca'];
+}
diff --git a/dist/regional/cs.js b/dist/regional/cs.js
new file mode 100644
index 0000000..2fa5528
--- /dev/null
+++ b/dist/regional/cs.js
@@ -0,0 +1,37 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Czech localisation for Gregorian/Julian calendars for jQuery.
+ Written by Tomas Muller (tomas@tomas-muller.net). */
+var main = require('../main');
+var _gregorian = main.calendars.gregorian;
+var _julian = main.calendars.julian;
+
+_gregorian.prototype.regionalOptions['cs'] = {
+ name: 'Gregorian',
+ epochs: ['BCE', 'CE'],
+ monthNames: ['leden','únor','březen','duben','květen','červen',
+ 'červenec','srpen','září','říjen','listopad','prosinec'],
+ monthNamesShort: ['led','úno','bře','dub','kvě','čer',
+ 'čvc','srp','zář','říj','lis','pro'],
+ dayNames: ['neděle', 'pondělí', 'úterý', 'středa', 'čtvrtek', 'pátek', 'sobota'],
+ dayNamesShort: ['ne', 'po', 'út', 'st', 'čt', 'pá', 'so'],
+ dayNamesMin: ['ne','po','út','st','čt','pá','so'],
+ digits: null,
+ dateFormat: 'dd.mm.yyyy',
+ firstDay: 1,
+ isRTL: false
+};
+if (_julian) {
+ _julian.prototype.regionalOptions['cs'] =
+ _gregorian.prototype.regionalOptions['cs'];
+}
diff --git a/dist/regional/da.js b/dist/regional/da.js
new file mode 100644
index 0000000..ab1a99d
--- /dev/null
+++ b/dist/regional/da.js
@@ -0,0 +1,37 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Danish localisation for Gregorian/Julian calendars for jQuery.
+ Written by Jan Christensen ( deletestuff@gmail.com). */
+var main = require('../main');
+var _gregorian = main.calendars.gregorian;
+var _julian = main.calendars.julian;
+
+_gregorian.prototype.regionalOptions['da'] = {
+ name: 'Gregorian',
+ epochs: ['BCE', 'CE'],
+ monthNames: ['Januar','Februar','Marts','April','Maj','Juni',
+ 'Juli','August','September','Oktober','November','December'],
+ monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
+ 'Jul','Aug','Sep','Okt','Nov','Dec'],
+ dayNames: ['Søndag','Mandag','Tirsdag','Onsdag','Torsdag','Fredag','Lørdag'],
+ dayNamesShort: ['Søn','Man','Tir','Ons','Tor','Fre','Lør'],
+ dayNamesMin: ['Sø','Ma','Ti','On','To','Fr','Lø'],
+ digits: null,
+ dateFormat: 'dd-mm-yyyy',
+ firstDay: 0,
+ isRTL: false
+};
+if (_julian) {
+ _julian.prototype.regionalOptions['da'] =
+ _gregorian.prototype.regionalOptions['da'];
+}
diff --git a/dist/regional/de-CH.js b/dist/regional/de-CH.js
new file mode 100644
index 0000000..431acc3
--- /dev/null
+++ b/dist/regional/de-CH.js
@@ -0,0 +1,37 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Swiss-German localisation for Gregorian/Julian calendars for jQuery.
+ Written by Douglas Jose & Juerg Meier. */
+var main = require('../main');
+var _gregorian = main.calendars.gregorian;
+var _julian = main.calendars.julian;
+
+_gregorian.prototype.regionalOptions['de-CH'] = {
+ name: 'Gregorian',
+ epochs: ['BCE', 'CE'],
+ monthNames: ['Januar','Februar','März','April','Mai','Juni',
+ 'Juli','August','September','Oktober','November','Dezember'],
+ monthNamesShort: ['Jan','Feb','Mär','Apr','Mai','Jun',
+ 'Jul','Aug','Sep','Okt','Nov','Dez'],
+ dayNames: ['Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag'],
+ dayNamesShort: ['So','Mo','Di','Mi','Do','Fr','Sa'],
+ dayNamesMin: ['So','Mo','Di','Mi','Do','Fr','Sa'],
+ digits: null,
+ dateFormat: 'dd.mm.yyyy',
+ firstDay: 1,
+ isRTL: false
+};
+if (_julian) {
+ _julian.prototype.regionalOptions['de-CH'] =
+ _gregorian.prototype.regionalOptions['de-CH'];
+}
diff --git a/dist/regional/de.js b/dist/regional/de.js
new file mode 100644
index 0000000..43fed90
--- /dev/null
+++ b/dist/regional/de.js
@@ -0,0 +1,37 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ German localisation for Gregorian/Julian calendars for jQuery.
+ Written by Milian Wolff (mail@milianw.de). */
+var main = require('../main');
+var _gregorian = main.calendars.gregorian;
+var _julian = main.calendars.julian;
+
+_gregorian.prototype.regionalOptions['de'] = {
+ name: 'Gregorian',
+ epochs: ['BCE', 'CE'],
+ monthNames: ['Januar','Februar','März','April','Mai','Juni',
+ 'Juli','August','September','Oktober','November','Dezember'],
+ monthNamesShort: ['Jan','Feb','Mär','Apr','Mai','Jun',
+ 'Jul','Aug','Sep','Okt','Nov','Dez'],
+ dayNames: ['Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag'],
+ dayNamesShort: ['So','Mo','Di','Mi','Do','Fr','Sa'],
+ dayNamesMin: ['So','Mo','Di','Mi','Do','Fr','Sa'],
+ digits: null,
+ dateFormat: 'dd.mm.yyyy',
+ firstDay: 1,
+ isRTL: false
+};
+if (_julian) {
+ _julian.prototype.regionalOptions['de'] =
+ _gregorian.prototype.regionalOptions['de'];
+}
diff --git a/dist/regional/el.js b/dist/regional/el.js
new file mode 100644
index 0000000..b7cf6f0
--- /dev/null
+++ b/dist/regional/el.js
@@ -0,0 +1,37 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Greek localisation for Gregorian/Julian calendars for jQuery.
+ Written by Alex Cicovic (http://www.alexcicovic.com). */
+var main = require('../main');
+var _gregorian = main.calendars.gregorian;
+var _julian = main.calendars.julian;
+
+_gregorian.prototype.regionalOptions['el'] = {
+ name: 'Gregorian',
+ epochs: ['BCE', 'CE'],
+ monthNames: ['Ιανουάριος','Φεβρουάριος','Μάρτιος','Απρίλιος','Μάιος','Ιούνιος',
+ 'Ιούλιος','Αύγουστος','Σεπτέμβριος','Οκτώβριος','Νοέμβριος','Δεκέμβριος'],
+ monthNamesShort: ['Ιαν','Φεβ','Μαρ','Απρ','Μαι','Ιουν',
+ 'Ιουλ','Αυγ','Σεπ','Οκτ','Νοε','Δεκ'],
+ dayNames: ['Κυριακή','Δευτέρα','Τρίτη','Τετάρτη','Πέμπτη','Παρασκευή','Σάββατο'],
+ dayNamesShort: ['Κυρ','Δευ','Τρι','Τετ','Πεμ','Παρ','Σαβ'],
+ dayNamesMin: ['Κυ','Δε','Τρ','Τε','Πε','Πα','Σα'],
+ digits: null,
+ dateFormat: 'dd/mm/yyyy',
+ firstDay: 1,
+ isRTL: false
+};
+if (_julian) {
+ _julian.prototype.regionalOptions['el'] =
+ _gregorian.prototype.regionalOptions['el'];
+}
diff --git a/dist/regional/en-AU.js b/dist/regional/en-AU.js
new file mode 100644
index 0000000..9e6f2de
--- /dev/null
+++ b/dist/regional/en-AU.js
@@ -0,0 +1,37 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ English/Australia localisation for Gregorian/Julian calendars for jQuery.
+ Based on en-GB. */
+var main = require('../main');
+var _gregorian = main.calendars.gregorian;
+var _julian = main.calendars.julian;
+
+_gregorian.prototype.regionalOptions['en-AU'] = {
+ name: 'Gregorian',
+ epochs: ['BCE', 'CE'],
+ monthNames: ['January','February','March','April','May','June',
+ 'July','August','September','October','November','December'],
+ monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
+ 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
+ dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
+ dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
+ dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'],
+ digits: null,
+ dateFormat: 'dd/mm/yyyy',
+ firstDay: 1,
+ isRTL: false
+};
+if (_julian) {
+ _julian.prototype.regionalOptions['en-AU'] =
+ _gregorian.prototype.regionalOptions['en-AU'];
+}
diff --git a/dist/regional/en-GB.js b/dist/regional/en-GB.js
new file mode 100644
index 0000000..7dc3eb1
--- /dev/null
+++ b/dist/regional/en-GB.js
@@ -0,0 +1,37 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ English/UK localisation for Gregorian/Julian calendars for jQuery.
+ Stuart. */
+var main = require('../main');
+var _gregorian = main.calendars.gregorian;
+var _julian = main.calendars.julian;
+
+_gregorian.prototype.regionalOptions['en-GB'] = {
+ name: 'Gregorian',
+ epochs: ['BCE', 'CE'],
+ monthNames: ['January','February','March','April','May','June',
+ 'July','August','September','October','November','December'],
+ monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
+ 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
+ dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
+ dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
+ dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'],
+ digits: null,
+ dateFormat: 'dd/mm/yyyy',
+ firstDay: 1,
+ isRTL: false
+};
+if (_julian) {
+ _julian.prototype.regionalOptions['en-GB'] =
+ _gregorian.prototype.regionalOptions['en-GB'];
+}
diff --git a/dist/regional/en-NZ.js b/dist/regional/en-NZ.js
new file mode 100644
index 0000000..4e9333f
--- /dev/null
+++ b/dist/regional/en-NZ.js
@@ -0,0 +1,37 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ English/New Zealand localisation for Gregorian/Julian calendars for jQuery.
+ Based on en-GB. */
+var main = require('../main');
+var _gregorian = main.calendars.gregorian;
+var _julian = main.calendars.julian;
+
+_gregorian.prototype.regionalOptions['en-NZ'] = {
+ name: 'Gregorian',
+ epochs: ['BCE', 'CE'],
+ monthNames: ['January','February','March','April','May','June',
+ 'July','August','September','October','November','December'],
+ monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
+ 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
+ dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
+ dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
+ dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'],
+ digits: null,
+ dateFormat: 'dd/mm/yyyy',
+ firstDay: 1,
+ isRTL: false
+};
+if (_julian) {
+ _julian.prototype.regionalOptions['en-NZ'] =
+ _gregorian.prototype.regionalOptions['en-NZ'];
+}
diff --git a/dist/regional/eo.js b/dist/regional/eo.js
new file mode 100644
index 0000000..0248711
--- /dev/null
+++ b/dist/regional/eo.js
@@ -0,0 +1,37 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Esperanto localisation for Gregorian/Julian calendars for jQuery.
+ Written by Olivier M. (olivierweb@ifrance.com). */
+var main = require('../main');
+var _gregorian = main.calendars.gregorian;
+var _julian = main.calendars.julian;
+
+_gregorian.prototype.regionalOptions['eo'] = {
+ name: 'Gregorian',
+ epochs: ['BCE', 'CE'],
+ monthNames: ['Januaro','Februaro','Marto','Aprilo','Majo','Junio',
+ 'Julio','Aŭgusto','Septembro','Oktobro','Novembro','Decembro'],
+ monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
+ 'Jul','Aŭg','Sep','Okt','Nov','Dec'],
+ dayNames: ['Dimanĉo','Lundo','Mardo','Merkredo','Ĵaŭdo','Vendredo','Sabato'],
+ dayNamesShort: ['Dim','Lun','Mar','Mer','Ĵaŭ','Ven','Sab'],
+ dayNamesMin: ['Di','Lu','Ma','Me','Ĵa','Ve','Sa'],
+ digits: null,
+ dateFormat: 'dd/mm/yyyy',
+ firstDay: 0,
+ isRTL: false
+};
+if (_julian) {
+ _julian.prototype.regionalOptions['eo'] =
+ _gregorian.prototype.regionalOptions['eo'];
+}
diff --git a/dist/regional/es-AR.js b/dist/regional/es-AR.js
new file mode 100644
index 0000000..8e2eca3
--- /dev/null
+++ b/dist/regional/es-AR.js
@@ -0,0 +1,37 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Spanish/Argentina localisation for Gregorian/Julian calendars for jQuery.
+ Written by Esteban Acosta Villafane (esteban.acosta@globant.com) of Globant (http://www.globant.com). */
+var main = require('../main');
+var _gregorian = main.calendars.gregorian;
+var _julian = main.calendars.julian;
+
+_gregorian.prototype.regionalOptions['es-AR'] = {
+ name: 'Gregorian',
+ epochs: ['BCE', 'CE'],
+ monthNames: ['Enero','Febrero','Marzo','Abril','Mayo','Junio',
+ 'Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre'],
+ monthNamesShort: ['Ene','Feb','Mar','Abr','May','Jun',
+ 'Jul','Ago','Sep','Oct','Nov','Dic'],
+ dayNames: ['Domingo','Lunes','Martes','Miércoles','Jueves','Viernes','Sábado'],
+ dayNamesShort: ['Dom','Lun','Mar','Mié','Juv','Vie','Sáb'],
+ dayNamesMin: ['Do','Lu','Ma','Mi','Ju','Vi','Sá'],
+ digits: null,
+ dateFormat: 'dd/mm/yyyy',
+ firstDay: 0,
+ isRTL: false
+};
+if (_julian) {
+ _julian.prototype.regionalOptions['es-AR'] =
+ _gregorian.prototype.regionalOptions['es-AR'];
+}
diff --git a/dist/regional/es-PE.js b/dist/regional/es-PE.js
new file mode 100644
index 0000000..6a72b1a
--- /dev/null
+++ b/dist/regional/es-PE.js
@@ -0,0 +1,37 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Spanish/Perú localisation for Gregorian/Julian calendars for jQuery.
+ Written by Fischer Tirado (fishdev@globant.com) of ASIX (http://www.asixonline.com). */
+var main = require('../main');
+var _gregorian = main.calendars.gregorian;
+var _julian = main.calendars.julian;
+
+_gregorian.prototype.regionalOptions['es-PE'] = {
+ name: 'Gregorian',
+ epochs: ['BCE', 'CE'],
+ monthNames: ['Enero','Febrero','Marzo','Abril','Mayo','Junio',
+ 'Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre'],
+ monthNamesShort: ['Ene','Feb','Mar','Abr','May','Jun',
+ 'Jul','Ago','Sep','Oct','Nov','Dic'],
+ dayNames: ['Domingo','Lunes','Martes','Miércoles','Jueves','Viernes','Sábado'],
+ dayNamesShort: ['Dom','Lun','Mar','Mié','Jue','Vie','Sab'],
+ dayNamesMin: ['Do','Lu','Ma','Mi','Ju','Vi','Sa'],
+ digits: null,
+ dateFormat: 'dd/mm/yyyy',
+ firstDay: 0,
+ isRTL: false
+};
+if (_julian) {
+ _julian.prototype.regionalOptions['es-PE'] =
+ _gregorian.prototype.regionalOptions['es-PE'];
+}
diff --git a/dist/regional/es.js b/dist/regional/es.js
new file mode 100644
index 0000000..2c13ab6
--- /dev/null
+++ b/dist/regional/es.js
@@ -0,0 +1,37 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Spanish localisation for Gregorian/Julian calendars for jQuery.
+ Traducido por Vester (xvester@gmail.com). */
+var main = require('../main');
+var _gregorian = main.calendars.gregorian;
+var _julian = main.calendars.julian;
+
+_gregorian.prototype.regionalOptions['es'] = {
+ name: 'Gregorian',
+ epochs: ['BCE', 'CE'],
+ monthNames: ['Enero','Febrero','Marzo','Abril','Mayo','Junio',
+ 'Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre'],
+ monthNamesShort: ['Ene','Feb','Mar','Abr','May','Jun',
+ 'Jul','Ago','Sep','Oct','Nov','Dic'],
+ dayNames: ['Domingo','Lunes','Martes','Miércoles','Jueves','Viernes','Sábado'],
+ dayNamesShort: ['Dom','Lun','Mar','Mié','Juv','Vie','Sáb'],
+ dayNamesMin: ['Do','Lu','Ma','Mi','Ju','Vi','Sá'],
+ digits: null,
+ dateFormat: 'dd/mm/yyyy',
+ firstDay: 1,
+ isRTL: false
+};
+if (_julian) {
+ _julian.prototype.regionalOptions['es'] =
+ _gregorian.prototype.regionalOptions['es'];
+}
diff --git a/dist/regional/et.js b/dist/regional/et.js
new file mode 100644
index 0000000..c2c5194
--- /dev/null
+++ b/dist/regional/et.js
@@ -0,0 +1,37 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Estonian localisation for Gregorian/Julian calendars for jQuery.
+ Written by Mart Sõmermaa (mrts.pydev at gmail com). */
+var main = require('../main');
+var _gregorian = main.calendars.gregorian;
+var _julian = main.calendars.julian;
+
+_gregorian.prototype.regionalOptions['et'] = {
+ name: 'Gregorian',
+ epochs: ['BCE', 'CE'],
+ monthNames: ['Jaanuar','Veebruar','Märts','Aprill','Mai','Juuni',
+ 'Juuli','August','September','Oktoober','November','Detsember'],
+ monthNamesShort: ['Jaan', 'Veebr', 'Märts', 'Apr', 'Mai', 'Juuni',
+ 'Juuli', 'Aug', 'Sept', 'Okt', 'Nov', 'Dets'],
+ dayNames: ['Pühapäev', 'Esmaspäev', 'Teisipäev', 'Kolmapäev', 'Neljapäev', 'Reede', 'Laupäev'],
+ dayNamesShort: ['Pühap', 'Esmasp', 'Teisip', 'Kolmap', 'Neljap', 'Reede', 'Laup'],
+ dayNamesMin: ['P','E','T','K','N','R','L'],
+ digits: null,
+ dateFormat: 'dd.mm.yyyy',
+ firstDay: 1,
+ isRTL: false
+};
+if (_julian) {
+ _julian.prototype.regionalOptions['et'] =
+ _gregorian.prototype.regionalOptions['et'];
+}
diff --git a/dist/regional/eu.js b/dist/regional/eu.js
new file mode 100644
index 0000000..cc3e267
--- /dev/null
+++ b/dist/regional/eu.js
@@ -0,0 +1,37 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Basque localisation for Gregorian/Julian calendars for jQuery.
+ Karrikas-ek itzulia (karrikas@karrikas.com). */
+var main = require('../main');
+var _gregorian = main.calendars.gregorian;
+var _julian = main.calendars.julian;
+
+_gregorian.prototype.regionalOptions['eu'] = {
+ name: 'Gregorian',
+ epochs: ['BCE', 'CE'],
+ monthNames: ['Urtarrila','Otsaila','Martxoa','Apirila','Maiatza','Ekaina',
+ 'Uztaila','Abuztua','Iraila','Urria','Azaroa','Abendua'],
+ monthNamesShort: ['Urt','Ots','Mar','Api','Mai','Eka',
+ 'Uzt','Abu','Ira','Urr','Aza','Abe'],
+ dayNames: ['Igandea','Astelehena','Asteartea','Asteazkena','Osteguna','Ostirala','Larunbata'],
+ dayNamesShort: ['Iga','Ast','Ast','Ast','Ost','Ost','Lar'],
+ dayNamesMin: ['Ig','As','As','As','Os','Os','La'],
+ digits: null,
+ dateFormat: 'yyyy/mm/dd',
+ firstDay: 1,
+ isRTL: false
+};
+if (_julian) {
+ _julian.prototype.regionalOptions['eu'] =
+ _gregorian.prototype.regionalOptions['eu'];
+}
diff --git a/dist/regional/fa.js b/dist/regional/fa.js
new file mode 100644
index 0000000..dc587d4
--- /dev/null
+++ b/dist/regional/fa.js
@@ -0,0 +1,36 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Farsi/Persian localisation for Gregorian/Julian calendars for jQuery.
+ Javad Mowlanezhad -- jmowla@gmail.com */
+var main = require('../main');
+var _gregorian = main.calendars.gregorian;
+var _julian = main.calendars.julian;
+
+_gregorian.prototype.regionalOptions['fa'] = {
+ name: 'Gregorian',
+ epochs: ['BCE', 'CE'],
+ monthNames: ['فروردين','ارديبهشت','خرداد','تير','مرداد','شهريور',
+ 'مهر','آبان','آذر','دي','بهمن','اسفند'],
+ monthNamesShort: ['1','2','3','4','5','6','7','8','9','10','11','12'],
+ dayNames: ['يکشنبه','دوشنبه','سهشنبه','چهارشنبه','پنجشنبه','جمعه','شنبه'],
+ dayNamesShort: ['ي','د','س','چ','پ','ج', 'ش'],
+ dayNamesMin: ['ي','د','س','چ','پ','ج', 'ش'],
+ digits: main.substituteDigits(['۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹']),
+ dateFormat: 'yyyy/mm/dd',
+ firstDay: 6,
+ isRTL: true
+};
+if (_julian) {
+ _julian.prototype.regionalOptions['fa'] =
+ _gregorian.prototype.regionalOptions['fa'];
+}
diff --git a/dist/regional/fi.js b/dist/regional/fi.js
new file mode 100644
index 0000000..3bc6784
--- /dev/null
+++ b/dist/regional/fi.js
@@ -0,0 +1,37 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Finnish localisation for Gregorian/Julian calendars for jQuery.
+ Written by Harri Kilpiö (harrikilpio@gmail.com). */
+var main = require('../main');
+var _gregorian = main.calendars.gregorian;
+var _julian = main.calendars.julian;
+
+_gregorian.prototype.regionalOptions['fi'] = {
+ name: 'Gregorian',
+ epochs: ['BCE', 'CE'],
+ monthNames: ['Tammikuu','Helmikuu','Maaliskuu','Huhtikuu','Toukokuu','Kesäkuu',
+ 'Heinäkuu','Elokuu','Syyskuu','Lokakuu','Marraskuu','Joulukuu'],
+ monthNamesShort: ['Tammi','Helmi','Maalis','Huhti','Touko','Kesä',
+ 'Heinä','Elo','Syys','Loka','Marras','Joulu'],
+ dayNamesShort: ['Su','Ma','Ti','Ke','To','Pe','Su'],
+ dayNames: ['Sunnuntai','Maanantai','Tiistai','Keskiviikko','Torstai','Perjantai','Lauantai'],
+ dayNamesMin: ['Su','Ma','Ti','Ke','To','Pe','La'],
+ digits: null,
+ dateFormat: 'dd.mm.yyyy',
+ firstDay: 1,
+ isRTL: false
+};
+if (_julian) {
+ _julian.prototype.regionalOptions['fi'] =
+ _gregorian.prototype.regionalOptions['fi'];
+}
diff --git a/dist/regional/fo.js b/dist/regional/fo.js
new file mode 100644
index 0000000..874dfbc
--- /dev/null
+++ b/dist/regional/fo.js
@@ -0,0 +1,37 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Faroese localisation for Gregorian/Julian calendars for jQuery.
+ Written by Sverri Mohr Olsen, sverrimo@gmail.com */
+var main = require('../main');
+var _gregorian = main.calendars.gregorian;
+var _julian = main.calendars.julian;
+
+_gregorian.prototype.regionalOptions['fo'] = {
+ name: 'Gregorianskur',
+ epochs: ['BCE', 'CE'],
+ monthNames: ['Januar','Februar','Mars','Apríl','Mei','Juni',
+ 'Juli','August','September','Oktober','November','Desember'],
+ monthNamesShort: ['Jan','Feb','Mar','Apr','Mei','Jun',
+ 'Jul','Aug','Sep','Okt','Nov','Des'],
+ dayNames: ['Sunnudagur','Mánadagur','Týsdagur','Mikudagur','Hósdagur','Fríggjadagur','Leyardagur'],
+ dayNamesShort: ['Sun','Mán','Týs','Mik','Hós','Frí','Ley'],
+ dayNamesMin: ['Su','Má','Tý','Mi','Hó','Fr','Le'],
+ digits: null,
+ dateFormat: 'dd-mm-yyyy',
+ firstDay: 0,
+ isRTL: false
+};
+if (_julian) {
+ _julian.prototype.regionalOptions['fo'] =
+ _gregorian.prototype.regionalOptions['fo'];
+}
diff --git a/dist/regional/fr-CH.js b/dist/regional/fr-CH.js
new file mode 100644
index 0000000..5e71823
--- /dev/null
+++ b/dist/regional/fr-CH.js
@@ -0,0 +1,37 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Swiss French localisation for Gregorian/Julian calendars for jQuery.
+ Written by Martin Voelkle (martin.voelkle@e-tc.ch). */
+var main = require('../main');
+var _gregorian = main.calendars.gregorian;
+var _julian = main.calendars.julian;
+
+_gregorian.prototype.regionalOptions['fr-CH'] = {
+ name: 'Gregorian',
+ epochs: ['BCE', 'CE'],
+ monthNames: ['Janvier','Février','Mars','Avril','Mai','Juin',
+ 'Juillet','Août','Septembre','Octobre','Novembre','Décembre'],
+ monthNamesShort: ['Jan','Fév','Mar','Avr','Mai','Jun',
+ 'Jul','Aoû','Sep','Oct','Nov','Déc'],
+ dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'],
+ dayNamesShort: ['Dim','Lun','Mar','Mer','Jeu','Ven','Sam'],
+ dayNamesMin: ['Di','Lu','Ma','Me','Je','Ve','Sa'],
+ digits: null,
+ dateFormat: 'dd.mm.yyyy',
+ firstDay: 1,
+ isRTL: false
+};
+if (_julian) {
+ _julian.prototype.regionalOptions['fr-CH'] =
+ _gregorian.prototype.regionalOptions['fr-CH'];
+}
diff --git a/dist/regional/fr.js b/dist/regional/fr.js
new file mode 100644
index 0000000..1060681
--- /dev/null
+++ b/dist/regional/fr.js
@@ -0,0 +1,37 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ French localisation for Gregorian/Julian calendars for jQuery.
+ Stéphane Nahmani (sholby@sholby.net). */
+var main = require('../main');
+var _gregorian = main.calendars.gregorian;
+var _julian = main.calendars.julian;
+
+_gregorian.prototype.regionalOptions['fr'] = {
+ name: 'Gregorian',
+ epochs: ['BCE', 'CE'],
+ monthNames: ['Janvier','Février','Mars','Avril','Mai','Juin',
+ 'Juillet','Août','Septembre','Octobre','Novembre','Décembre'],
+ monthNamesShort: ['Jan','Fév','Mar','Avr','Mai','Jun',
+ 'Jul','Aoû','Sep','Oct','Nov','Déc'],
+ dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'],
+ dayNamesShort: ['Dim','Lun','Mar','Mer','Jeu','Ven','Sam'],
+ dayNamesMin: ['Di','Lu','Ma','Me','Je','Ve','Sa'],
+ digits: null,
+ dateFormat: 'dd/mm/yyyy',
+ firstDay: 1,
+ isRTL: false
+};
+if (_julian) {
+ _julian.prototype.regionalOptions['fr'] =
+ _gregorian.prototype.regionalOptions['fr'];
+}
diff --git a/dist/regional/gl.js b/dist/regional/gl.js
new file mode 100644
index 0000000..6f7b3b2
--- /dev/null
+++ b/dist/regional/gl.js
@@ -0,0 +1,37 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Iniciacion en galego para a extensión 'UI date picker' para jQuery.
+ Traducido por Manuel (McNuel@gmx.net). */
+var main = require('../main');
+var _gregorian = main.calendars.gregorian;
+var _julian = main.calendars.julian;
+
+_gregorian.prototype.regionalOptions['gl'] = {
+ name: 'Gregorian',
+ epochs: ['BCE', 'CE'],
+ monthNames: ['Xaneiro','Febreiro','Marzo','Abril','Maio','Xuño',
+ 'Xullo','Agosto','Setembro','Outubro','Novembro','Decembro'],
+ monthNamesShort: ['Xan','Feb','Mar','Abr','Mai','Xuñ',
+ 'Xul','Ago','Set','Out','Nov','Dec'],
+ dayNames: ['Domingo','Luns','Martes','Mércores','Xoves','Venres','Sábado'],
+ dayNamesShort: ['Dom','Lun','Mar','Mér','Xov','Ven','Sáb'],
+ dayNamesMin: ['Do','Lu','Ma','Me','Xo','Ve','Sá'],
+ digits: null,
+ dateFormat: 'dd/mm/yyyy',
+ firstDay: 1,
+ isRTL: false
+};
+if (_julian) {
+ _julian.prototype.regionalOptions['gl'] =
+ _gregorian.prototype.regionalOptions['gl'];
+}
diff --git a/dist/regional/gu.js b/dist/regional/gu.js
new file mode 100644
index 0000000..cb78f5c
--- /dev/null
+++ b/dist/regional/gu.js
@@ -0,0 +1,37 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Gujarati (ગુજરાતી) localisation for Gregorian/Julian calendars for jQuery.
+ Naymesh Mistry (naymesh@yahoo.com). */
+var main = require('../main');
+var _gregorian = main.calendars.gregorian;
+var _julian = main.calendars.julian;
+
+_gregorian.prototype.regionalOptions['gu'] = {
+ name: 'Gregorian',
+ epochs: ['BCE', 'CE'],
+ monthNames: ['જાન્યુઆરી','ફેબ્રુઆરી','માર્ચ','એપ્રિલ','મે','જૂન',
+ 'જુલાઈ','ઑગસ્ટ','સપ્ટેમ્બર','ઑક્ટોબર','નવેમ્બર','ડિસેમ્બર'],
+ monthNamesShort: ['જાન્યુ','ફેબ્રુ','માર્ચ','એપ્રિલ','મે','જૂન',
+ 'જુલાઈ','ઑગસ્ટ','સપ્ટે','ઑક્ટો','નવે','ડિસે'],
+ dayNames: ['રવિવાર','સોમવાર','મંગળવાર','બુધવાર','ગુરુવાર','શુક્રવાર','શનિવાર'],
+ dayNamesShort: ['રવિ','સોમ','મંગળ','બુધ','ગુરુ','શુક્ર','શનિ'],
+ dayNamesMin: ['ર','સો','મં','બુ','ગુ','શુ','શ'],
+ digits: main.substituteDigits(['૦', '૧', '૨', '૩', '૪', '૫', '૬', '૭', '૮', '૯']),
+ dateFormat: 'dd-M-yyyy',
+ firstDay: 1,
+ isRTL: false
+};
+if (_julian) {
+ _julian.prototype.regionalOptions['gu'] =
+ _gregorian.prototype.regionalOptions['gu'];
+}
diff --git a/dist/regional/he.js b/dist/regional/he.js
new file mode 100644
index 0000000..4fff3ff
--- /dev/null
+++ b/dist/regional/he.js
@@ -0,0 +1,37 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Hebrew localisation for Gregorian/Julian calendars for jQuery.
+ Written by Amir Hardon (ahardon at gmail dot com). */
+var main = require('../main');
+var _gregorian = main.calendars.gregorian;
+var _julian = main.calendars.julian;
+
+_gregorian.prototype.regionalOptions['he'] = {
+ name: 'Gregorian',
+ epochs: ['BCE', 'CE'],
+ monthNames: ['ינואר','פברואר','מרץ','אפריל','מאי','יוני',
+ 'יולי','אוגוסט','ספטמבר','אוקטובר','נובמבר','דצמבר'],
+ monthNamesShort: ['1','2','3','4','5','6',
+ '7','8','9','10','11','12'],
+ dayNames: ['ראשון','שני','שלישי','רביעי','חמישי','שישי','שבת'],
+ dayNamesShort: ['א\'','ב\'','ג\'','ד\'','ה\'','ו\'','שבת'],
+ dayNamesMin: ['א\'','ב\'','ג\'','ד\'','ה\'','ו\'','שבת'],
+ digits: null,
+ dateFormat: 'dd/mm/yyyy',
+ firstDay: 0,
+ isRTL: true
+};
+if (_julian) {
+ _julian.prototype.regionalOptions['he'] =
+ _gregorian.prototype.regionalOptions['he'];
+}
diff --git a/dist/regional/hi-IN.js b/dist/regional/hi-IN.js
new file mode 100644
index 0000000..80f3051
--- /dev/null
+++ b/dist/regional/hi-IN.js
@@ -0,0 +1,35 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Hindi INDIA localisation for Gregorian/Julian calendars for jQuery.
+ Written by Pawan Kumar Singh. */
+var main = require('../main');
+var _gregorian = main.calendars.gregorian;
+var _julian = main.calendars.julian;
+
+_gregorian.prototype.regionalOptions['hi-IN'] = {
+ name: 'Gregorian',
+ epochs: ['BCE', 'CE'],
+ monthNames: ['जनवरी',' फरवरी', 'मार्च', 'अप्रैल', 'मई', 'जून','जुलाई', 'अगस्त', 'सितम्बर', 'अक्टूबर', 'नवम्बर', 'दिसम्बर'],
+ monthNamesShort: ['जन', 'फर', 'मार्च','अप्रै', 'मई', 'जून','जुलाई', 'अग', 'सित', 'अक्टू', 'नव', 'दिस'],
+ dayNames: ['रविवार', 'सोमवार', 'मंगलवार', 'बुधवार', 'गुरुवार', 'शुक्रवार', 'शनिवार'],
+ dayNamesShort: ['रवि', 'सोम', 'मंगल', 'बुध', 'गुरु', 'शुक्र', 'शनि'],
+ dayNamesMin: ['र','सो','मं','बु','गु','शु','श'],
+ digits: null,
+ dateFormat: 'dd/mm/yyyy',
+ firstDay: 1,
+ isRTL: false
+};
+if (_julian) {
+ _julian.prototype.regionalOptions['hi-IN'] =
+ _gregorian.prototype.regionalOptions['hi-IN'];
+}
diff --git a/dist/regional/hr.js b/dist/regional/hr.js
new file mode 100644
index 0000000..b422e99
--- /dev/null
+++ b/dist/regional/hr.js
@@ -0,0 +1,37 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Croatian localisation for Gregorian/Julian calendars for jQuery.
+ Written by Vjekoslav Nesek. */
+var main = require('../main');
+var _gregorian = main.calendars.gregorian;
+var _julian = main.calendars.julian;
+
+_gregorian.prototype.regionalOptions['hr'] = {
+ name: 'Gregorian',
+ epochs: ['BCE', 'CE'],
+ monthNames: ['Siječanj','Veljača','Ožujak','Travanj','Svibanj','Lipanj',
+ 'Srpanj','Kolovoz','Rujan','Listopad','Studeni','Prosinac'],
+ monthNamesShort: ['Sij','Velj','Ožu','Tra','Svi','Lip',
+ 'Srp','Kol','Ruj','Lis','Stu','Pro'],
+ dayNames: ['Nedjelja','Ponedjeljak','Utorak','Srijeda','Četvrtak','Petak','Subota'],
+ dayNamesShort: ['Ned','Pon','Uto','Sri','Čet','Pet','Sub'],
+ dayNamesMin: ['Ne','Po','Ut','Sr','Če','Pe','Su'],
+ digits: null,
+ dateFormat: 'dd.mm.yyyy.',
+ firstDay: 1,
+ isRTL: false
+};
+if (_julian) {
+ _julian.prototype.regionalOptions['hr'] =
+ _gregorian.prototype.regionalOptions['hr'];
+}
diff --git a/dist/regional/hu.js b/dist/regional/hu.js
new file mode 100644
index 0000000..2a3d3d2
--- /dev/null
+++ b/dist/regional/hu.js
@@ -0,0 +1,37 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Hungarian localisation for Gregorian/Julian calendars for jQuery.
+ Written by Istvan Karaszi (jquerycalendar@spam.raszi.hu). */
+var main = require('../main');
+var _gregorian = main.calendars.gregorian;
+var _julian = main.calendars.julian;
+
+_gregorian.prototype.regionalOptions['hu'] = {
+ name: 'Gregorian',
+ epochs: ['BCE', 'CE'],
+ monthNames: ['Január', 'Február', 'Március', 'Április', 'Május', 'Június',
+ 'Július', 'Augusztus', 'Szeptember', 'Október', 'November', 'December'],
+ monthNamesShort: ['Jan', 'Feb', 'Már', 'Ápr', 'Máj', 'Jún',
+ 'Júl', 'Aug', 'Szep', 'Okt', 'Nov', 'Dec'],
+ dayNames: ['Vasárnap', 'Hétfö', 'Kedd', 'Szerda', 'Csütörtök', 'Péntek', 'Szombat'],
+ dayNamesShort: ['Vas', 'Hét', 'Ked', 'Sze', 'Csü', 'Pén', 'Szo'],
+ dayNamesMin: ['V', 'H', 'K', 'Sze', 'Cs', 'P', 'Szo'],
+ digits: null,
+ dateFormat: 'yyyy-mm-dd',
+ firstDay: 1,
+ isRTL: false
+};
+if (_julian) {
+ _julian.prototype.regionalOptions['hu'] =
+ _gregorian.prototype.regionalOptions['hu'];
+}
diff --git a/dist/regional/hy.js b/dist/regional/hy.js
new file mode 100644
index 0000000..5e5bd9c
--- /dev/null
+++ b/dist/regional/hy.js
@@ -0,0 +1,37 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Armenian localisation for Gregorian/Julian calendars for jQuery.
+ Written by Levon Zakaryan (levon.zakaryan@gmail.com). */
+var main = require('../main');
+var _gregorian = main.calendars.gregorian;
+var _julian = main.calendars.julian;
+
+_gregorian.prototype.regionalOptions['hy'] = {
+ name: 'Gregorian',
+ epochs: ['BCE', 'CE'],
+ monthNames: ['Հունվար','Փետրվար','Մարտ','Ապրիլ','Մայիս','Հունիս',
+ 'Հուլիս','Օգոստոս','Սեպտեմբեր','Հոկտեմբեր','Նոյեմբեր','Դեկտեմբեր'],
+ monthNamesShort: ['Հունվ','Փետր','Մարտ','Ապր','Մայիս','Հունիս',
+ 'Հուլ','Օգս','Սեպ','Հոկ','Նոյ','Դեկ'],
+ dayNames: ['կիրակի','եկուշաբթի','երեքշաբթի','չորեքշաբթի','հինգշաբթի','ուրբաթ','շաբաթ'],
+ dayNamesShort: ['կիր','երկ','երք','չրք','հնգ','ուրբ','շբթ'],
+ dayNamesMin: ['կիր','երկ','երք','չրք','հնգ','ուրբ','շբթ'],
+ digits: null,
+ dateFormat: 'dd.mm.yyyy',
+ firstDay: 1,
+ isRTL: false
+};
+if (_julian) {
+ _julian.prototype.regionalOptions['hy'] =
+ _gregorian.prototype.regionalOptions['hy'];
+}
diff --git a/dist/regional/id.js b/dist/regional/id.js
new file mode 100644
index 0000000..784543f
--- /dev/null
+++ b/dist/regional/id.js
@@ -0,0 +1,37 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Indonesian localisation for Gregorian/Julian calendars for jQuery.
+ Written by Deden Fathurahman (dedenf@gmail.com). */
+var main = require('../main');
+var _gregorian = main.calendars.gregorian;
+var _julian = main.calendars.julian;
+
+_gregorian.prototype.regionalOptions['id'] = {
+ name: 'Gregorian',
+ epochs: ['BCE', 'CE'],
+ monthNames: ['Januari','Februari','Maret','April','Mei','Juni',
+ 'Juli','Agustus','September','Oktober','Nopember','Desember'],
+ monthNamesShort: ['Jan','Feb','Mar','Apr','Mei','Jun',
+ 'Jul','Agus','Sep','Okt','Nop','Des'],
+ dayNames: ['Minggu','Senin','Selasa','Rabu','Kamis','Jumat','Sabtu'],
+ dayNamesShort: ['Min','Sen','Sel','Rab','kam','Jum','Sab'],
+ dayNamesMin: ['Mg','Sn','Sl','Rb','Km','jm','Sb'],
+ digits: null,
+ dateFormat: 'dd/mm/yyyy',
+ firstDay: 0,
+ isRTL: false
+};
+if (_julian) {
+ _julian.prototype.regionalOptions['id'] =
+ _gregorian.prototype.regionalOptions['id'];
+}
diff --git a/dist/regional/is.js b/dist/regional/is.js
new file mode 100644
index 0000000..a7cfff6
--- /dev/null
+++ b/dist/regional/is.js
@@ -0,0 +1,37 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Icelandic localisation for Gregorian/Julian calendars for jQuery.
+ Written by Haukur H. Thorsson (haukur@eskill.is). */
+var main = require('../main');
+var _gregorian = main.calendars.gregorian;
+var _julian = main.calendars.julian;
+
+_gregorian.prototype.regionalOptions['is'] = {
+ name: 'Gregorian',
+ epochs: ['BCE', 'CE'],
+ monthNames: ['Janúar','Febrúar','Mars','Apríl','Maí','Júní',
+ 'Júlí','Ágúst','September','Október','Nóvember','Desember'],
+ monthNamesShort: ['Jan','Feb','Mar','Apr','Maí','Jún',
+ 'Júl','Ágú','Sep','Okt','Nóv','Des'],
+ dayNames: ['Sunnudagur','Mánudagur','Þriðjudagur','Miðvikudagur','Fimmtudagur','Föstudagur','Laugardagur'],
+ dayNamesShort: ['Sun','Mán','Þri','Mið','Fim','Fös','Lau'],
+ dayNamesMin: ['Su','Má','Þr','Mi','Fi','Fö','La'],
+ digits: null,
+ dateFormat: 'dd/mm/yyyy',
+ firstDay: 0,
+ isRTL: false
+};
+if (_julian) {
+ _julian.prototype.regionalOptions['is'] =
+ _gregorian.prototype.regionalOptions['is'];
+}
diff --git a/dist/regional/it.js b/dist/regional/it.js
new file mode 100644
index 0000000..d8bba57
--- /dev/null
+++ b/dist/regional/it.js
@@ -0,0 +1,37 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Italian localisation for Gregorian/Julian calendars for jQuery.
+ Written by Apaella (apaella@gmail.com). */
+var main = require('../main');
+var _gregorian = main.calendars.gregorian;
+var _julian = main.calendars.julian;
+
+_gregorian.prototype.regionalOptions['it'] = {
+ name: 'Gregorian',
+ epochs: ['BCE', 'CE'],
+ monthNames: ['Gennaio','Febbraio','Marzo','Aprile','Maggio','Giugno',
+ 'Luglio','Agosto','Settembre','Ottobre','Novembre','Dicembre'],
+ monthNamesShort: ['Gen','Feb','Mar','Apr','Mag','Giu',
+ 'Lug','Ago','Set','Ott','Nov','Dic'],
+ dayNames: ['Domenica','Lunedì','Martedì','Mercoledì','Giovedì','Venerdì','Sabato'],
+ dayNamesShort: ['Dom','Lun','Mar','Mer','Gio','Ven','Sab'],
+ dayNamesMin: ['Do','Lu','Ma','Me','Gio','Ve','Sa'],
+ digits: null,
+ dateFormat: 'dd/mm/yyyy',
+ firstDay: 1,
+ isRTL: false
+};
+if (_julian) {
+ _julian.prototype.regionalOptions['it'] =
+ _gregorian.prototype.regionalOptions['it'];
+}
diff --git a/dist/regional/ja.js b/dist/regional/ja.js
new file mode 100644
index 0000000..c7480e7
--- /dev/null
+++ b/dist/regional/ja.js
@@ -0,0 +1,38 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Japanese localisation for Gregorian/Julian calendars for jQuery.
+ Written by Kentaro SATO (kentaro@ranvis.com). */
+var main = require('../main');
+var _gregorian = main.calendars.gregorian;
+var _julian = main.calendars.julian;
+
+_gregorian.prototype.regionalOptions['ja'] = {
+ name: 'Gregorian',
+ epochs: ['BCE', 'CE'],
+ monthNames: ['1月','2月','3月','4月','5月','6月',
+ '7月','8月','9月','10月','11月','12月'],
+ monthNamesShort: ['1月','2月','3月','4月','5月','6月',
+ '7月','8月','9月','10月','11月','12月'],
+ dayNames: ['日曜日','月曜日','火曜日','水曜日','木曜日','金曜日','土曜日'],
+ dayNamesShort: ['日','月','火','水','木','金','土'],
+ dayNamesMin: ['日','月','火','水','木','金','土'],
+ digits: main.substituteChineseDigits(
+ ['〇', '一', '二', '三', '四', '五', '六', '七', '八', '九'], ['', '十', '百', '千']),
+ dateFormat: 'yyyy/mm/dd',
+ firstDay: 0,
+ isRTL: false
+};
+if (_julian) {
+ _julian.prototype.regionalOptions['ja'] =
+ _gregorian.prototype.regionalOptions['ja'];
+}
diff --git a/dist/regional/ka.js b/dist/regional/ka.js
new file mode 100644
index 0000000..9e4ae79
--- /dev/null
+++ b/dist/regional/ka.js
@@ -0,0 +1,37 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Georgian localisation for Gregorian/Julian calendars for jQuery.
+ Andrei Gorbushkin. */
+var main = require('../main');
+var _gregorian = main.calendars.gregorian;
+var _julian = main.calendars.julian;
+
+_gregorian.prototype.regionalOptions['ka'] = {
+ name: 'Gregorian',
+ epochs: ['BCE', 'CE'],
+ monthNames: ['იანვარი','თებერვალი','მარტი','აპრილი','მაისი','ივნისი',
+ 'ივლისი','აგვისტო','სექტემბერი','ოქტომბერი','ნოემბერი','დეკემბერი'],
+ monthNamesShort: ['იან', 'თებ', 'მარ', 'აპრ', 'მაისი', 'ივნ',
+ 'ივლ', 'აგვ', 'სექ', 'ოქტ', 'ნოე', 'დეკ'],
+ dayNames: ['კვირა', 'ორშაბათი', 'სამშაბათი', 'ოთხშაბათი', 'ხუთშაბათი', 'პარასკევი', 'შაბათი'],
+ dayNamesShort: ['კვ', 'ორშ', 'სამ', 'ოთხ', 'ხუთ', 'პარ', 'შაბ'],
+ dayNamesMin: ['კვ','ორ','სმ','ოთ', 'ხშ', 'პრ','შბ'],
+ digits: null,
+ dateFormat: 'dd/mm/yyyy',
+ firstDay: 1,
+ isRTL: false
+};
+if (_julian) {
+ _julian.prototype.regionalOptions['ka'] =
+ _gregorian.prototype.regionalOptions['ka'];
+}
diff --git a/dist/regional/km.js b/dist/regional/km.js
new file mode 100644
index 0000000..7b734cb
--- /dev/null
+++ b/dist/regional/km.js
@@ -0,0 +1,37 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Khmer initialisation for Gregorian/Julian calendars for jQuery.
+ Written by Sovichet Tep (sovichet.tep@gmail.com). */
+var main = require('../main');
+var _gregorian = main.calendars.gregorian;
+var _julian = main.calendars.julian;
+
+_gregorian.prototype.regionalOptions['km'] = {
+ name: 'Gregorian',
+ epochs: ['BCE', 'CE'],
+ monthNames: ['ខែមករា','ខែកុម្ភៈ','ខែមិនា','ខែមេសា','ខែឧសភា','ខែមិថុនា',
+ 'ខែកក្កដា','ខែសីហា','ខែកញ្ញា','ខែតុលា','ខែវិច្ឆិកា','ខែធ្នូ'],
+ monthNamesShort: ['មក', 'កុ', 'មិនា', 'មេ', 'ឧស', 'មិថុ',
+ 'កក្ក', 'សី', 'កញ្ញា', 'តុលា', 'វិច្ឆិ', 'ធ្នូ'],
+ dayNames: ['ថ្ងៃអាទិត្យ', 'ថ្ងៃចន្ទ', 'ថ្ងៃអង្គារ', 'ថ្ងៃពុធ', 'ថ្ងៃព្រហស្បត្តិ៍', 'ថ្ងៃសុក្រ', 'ថ្ងៃសៅរ៍'],
+ dayNamesShort: ['អា', 'ចន្ទ', 'អង្គ', 'ពុធ', 'ព្រហ', 'សុ', 'សៅរ៍'],
+ dayNamesMin: ['អា','ច','អ','ពុ','ព្រ','សុ','ស'],
+ digits: null,
+ dateFormat: 'dd/mm/yyyy',
+ firstDay: 1,
+ isRTL: false
+};
+if (_julian) {
+ _julian.prototype.regionalOptions['km'] =
+ _gregorian.prototype.regionalOptions['km'];
+}
diff --git a/dist/regional/ko.js b/dist/regional/ko.js
new file mode 100644
index 0000000..3763ba4
--- /dev/null
+++ b/dist/regional/ko.js
@@ -0,0 +1,37 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Korean localisation for Gregorian/Julian calendars for jQuery.
+ Written by DaeKwon Kang (ncrash.dk@gmail.com), Edited by Genie. */
+var main = require('../main');
+var _gregorian = main.calendars.gregorian;
+var _julian = main.calendars.julian;
+
+_gregorian.prototype.regionalOptions['ko'] = {
+ name: 'Gregorian',
+ epochs: ['BCE', 'CE'],
+ monthNames: ['1월','2월','3월','4월','5월','6월',
+ '7월','8월','9월','10월','11월','12월'],
+ monthNamesShort: ['1월','2월','3월','4월','5월','6월',
+ '7월','8월','9월','10월','11월','12월'],
+ dayNames: ['일요일','월요일','화요일','수요일','목요일','금요일','토요일'],
+ dayNamesShort: ['일','월','화','수','목','금','토'],
+ dayNamesMin: ['일','월','화','수','목','금','토'],
+ digits: null,
+ dateFormat: 'yyyy-mm-dd',
+ firstDay: 0,
+ isRTL: false
+};
+if (_julian) {
+ _julian.prototype.regionalOptions['ko'] =
+ _gregorian.prototype.regionalOptions['ko'];
+}
diff --git a/dist/regional/lt.js b/dist/regional/lt.js
new file mode 100644
index 0000000..25b7222
--- /dev/null
+++ b/dist/regional/lt.js
@@ -0,0 +1,37 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Lithuanian localisation for Gregorian/Julian calendars for jQuery.
+ Arturas Paleicikas . */
+var main = require('../main');
+var _gregorian = main.calendars.gregorian;
+var _julian = main.calendars.julian;
+
+_gregorian.prototype.regionalOptions['lt'] = {
+ name: 'Gregorian',
+ epochs: ['BCE', 'CE'],
+ monthNames: ['Sausis','Vasaris','Kovas','Balandis','Gegužė','Birželis',
+ 'Liepa','Rugpjūtis','Rugsėjis','Spalis','Lapkritis','Gruodis'],
+ monthNamesShort: ['Sau','Vas','Kov','Bal','Geg','Bir',
+ 'Lie','Rugp','Rugs','Spa','Lap','Gru'],
+ dayNames: ['sekmadienis','pirmadienis','antradienis','trečiadienis','ketvirtadienis','penktadienis','šeštadienis'],
+ dayNamesShort: ['sek','pir','ant','tre','ket','pen','šeš'],
+ dayNamesMin: ['Se','Pr','An','Tr','Ke','Pe','Še'],
+ digits: null,
+ dateFormat: 'yyyy-mm-dd',
+ firstDay: 1,
+ isRTL: false
+};
+if (_julian) {
+ _julian.prototype.regionalOptions['lt'] =
+ _gregorian.prototype.regionalOptions['lt'];
+}
diff --git a/dist/regional/lv.js b/dist/regional/lv.js
new file mode 100644
index 0000000..68d32cc
--- /dev/null
+++ b/dist/regional/lv.js
@@ -0,0 +1,37 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Latvian localisation for Gregorian/Julian calendars for jQuery.
+ Arturas Paleicikas . */
+var main = require('../main');
+var _gregorian = main.calendars.gregorian;
+var _julian = main.calendars.julian;
+
+_gregorian.prototype.regionalOptions['lv'] = {
+ name: 'Gregorian',
+ epochs: ['BCE', 'CE'],
+ monthNames: ['Janvāris','Februāris','Marts','Aprīlis','Maijs','Jūnijs',
+ 'Jūlijs','Augusts','Septembris','Oktobris','Novembris','Decembris'],
+ monthNamesShort: ['Jan','Feb','Mar','Apr','Mai','Jūn',
+ 'Jūl','Aug','Sep','Okt','Nov','Dec'],
+ dayNames: ['svētdiena','pirmdiena','otrdiena','trešdiena','ceturtdiena','piektdiena','sestdiena'],
+ dayNamesShort: ['svt','prm','otr','tre','ctr','pkt','sst'],
+ dayNamesMin: ['Sv','Pr','Ot','Tr','Ct','Pk','Ss'],
+ digits: null,
+ dateFormat: 'dd-mm-yyyy',
+ firstDay: 1,
+ isRTL: false
+};
+if (_julian) {
+ _julian.prototype.regionalOptions['lv'] =
+ _gregorian.prototype.regionalOptions['lv'];
+}
diff --git a/dist/regional/me-ME.js b/dist/regional/me-ME.js
new file mode 100644
index 0000000..a754593
--- /dev/null
+++ b/dist/regional/me-ME.js
@@ -0,0 +1,37 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Montenegrin localisation for Gregorian/Julian calendars for jQuery.
+ By Miloš Milošević - fleka d.o.o. */
+var main = require('../main');
+var _gregorian = main.calendars.gregorian;
+var _julian = main.calendars.julian;
+
+_gregorian.prototype.regionalOptions['me-ME'] = {
+ name: 'Gregorijanski',
+ epochs: ['pne', 'ne'],
+ monthNames: ['Januar','Februar','Mart','April','Maj','Jun',
+ 'Jul','Avgust','Septembar','Oktobar','Novembar','Decembar'],
+ monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'Maj', 'Jun',
+ 'Jul', 'Avg', 'Sep', 'Okt', 'Nov', 'Dec'],
+ dayNames: ['Neđelja', 'Poneđeljak', 'Utorak', 'Srijeda', 'Četvrtak', 'Petak', 'Subota'],
+ dayNamesShort: ['Neđ', 'Pon', 'Uto', 'Sri', 'Čet', 'Pet', 'Sub'],
+ dayNamesMin: ['Ne','Po','Ut','Sr','Če','Pe','Su'],
+ digits: null,
+ dateFormat: 'dd/mm/yyyy',
+ firstDay: 1,
+ isRTL: false
+};
+if (_julian) {
+ _julian.prototype.regionalOptions['me-ME'] =
+ _gregorian.prototype.regionalOptions['me-ME'];
+}
diff --git a/dist/regional/me.js b/dist/regional/me.js
new file mode 100644
index 0000000..6c8e9d3
--- /dev/null
+++ b/dist/regional/me.js
@@ -0,0 +1,37 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Montenegrin localisation for Gregorian/Julian calendars for jQuery.
+ By Miloš Milošević - fleka d.o.o. */
+var main = require('../main');
+var _gregorian = main.calendars.gregorian;
+var _julian = main.calendars.julian;
+
+_gregorian.prototype.regionalOptions['me'] = {
+ name: 'Грегоријански',
+ epochs: ['пне', 'не'],
+ monthNames: ['Јануар','Фебруар','Март','Април','Мај','Јун',
+ 'Јул','Август','Септембар','Октобар','Новембар','Децембар'],
+ monthNamesShort: ['Јан', 'Феб', 'Мар', 'Апр', 'Мај', 'Јун',
+ 'Јул', 'Авг', 'Сеп', 'Окт', 'Нов', 'Дец'],
+ dayNames: ['Неђеља', 'Понеђељак', 'Уторак', 'Сриједа', 'Четвртак', 'Петак', 'Субота'],
+ dayNamesShort: ['Неђ', 'Пон', 'Уто', 'Сри', 'Чет', 'Пет', 'Суб'],
+ dayNamesMin: ['Не','По','Ут','Ср','Че','Пе','Су'],
+ digits: null,
+ dateFormat: 'dd/mm/yyyy',
+ firstDay: 1,
+ isRTL: false
+};
+if (_julian) {
+ _julian.prototype.regionalOptions['me'] =
+ _gregorian.prototype.regionalOptions['me'];
+}
diff --git a/dist/regional/mk.js b/dist/regional/mk.js
new file mode 100644
index 0000000..8a68af9
--- /dev/null
+++ b/dist/regional/mk.js
@@ -0,0 +1,37 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Македонски MK localisation for Gregorian/Julian calendars for jQuery.
+ Hajan Selmani (hajan [at] live [dot] com). */
+var main = require('../main');
+var _gregorian = main.calendars.gregorian;
+var _julian = main.calendars.julian;
+
+_gregorian.prototype.regionalOptions['mk'] = {
+ name: 'Gregorian',
+ epochs: ['BCE', 'CE'],
+ monthNames: ['Јануари','Февруари','Март','Април','Мај','Јуни',
+ 'Јули','Август','Септември','Октомври','Ноември','Декември'],
+ monthNamesShort: ['Јан', 'Фев', 'Мар', 'Апр', 'Мај', 'Јун',
+ 'Јул', 'Авг', 'Сеп', 'Окт', 'Нов', 'Дек'],
+ dayNames: ['Недела', 'Понеделник', 'Вторник', 'Среда', 'Четврток', 'Петок', 'Сабота'],
+ dayNamesShort: ['Нед', 'Пон', 'Вто', 'Сре', 'Чет', 'Пет', 'Саб'],
+ dayNamesMin: ['Не','По','Вт','Ср','Че','Пе','Са'],
+ digits: null,
+ dateFormat: 'dd/mm/yyyy',
+ firstDay: 1,
+ isRTL: false
+};
+if (_julian) {
+ _julian.prototype.regionalOptions['mk'] =
+ _gregorian.prototype.regionalOptions['mk'];
+}
diff --git a/dist/regional/ml.js b/dist/regional/ml.js
new file mode 100644
index 0000000..5ab5e51
--- /dev/null
+++ b/dist/regional/ml.js
@@ -0,0 +1,37 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Malayalam localisation for Gregorian/Julian calendars for jQuery.
+ Saji Nediyanchath (saji89@gmail.com). */
+var main = require('../main');
+var _gregorian = main.calendars.gregorian;
+var _julian = main.calendars.julian;
+
+_gregorian.prototype.regionalOptions['ml'] = {
+ name: 'Gregorian',
+ epochs: ['BCE', 'CE'],
+ monthNames: ['ജനുവരി','ഫെബ്രുവരി','മാര്ച്ച്','ഏപ്രില്','മേയ്','ജൂണ്',
+ 'ജൂലൈ','ആഗസ്റ്റ്','സെപ്റ്റംബര്','ഒക്ടോബര്','നവംബര്','ഡിസംബര്'],
+ monthNamesShort: ['ജനു', 'ഫെബ്', 'മാര്', 'ഏപ്രി', 'മേയ്', 'ജൂണ്',
+ 'ജൂലാ', 'ആഗ', 'സെപ്', 'ഒക്ടോ', 'നവം', 'ഡിസ'],
+ dayNames: ['ഞായര്', 'തിങ്കള്', 'ചൊവ്വ', 'ബുധന്', 'വ്യാഴം', 'വെള്ളി', 'ശനി'],
+ dayNamesShort: ['ഞായ', 'തിങ്ക', 'ചൊവ്വ', 'ബുധ', 'വ്യാഴം', 'വെള്ളി', 'ശനി'],
+ dayNamesMin: ['ഞാ','തി','ചൊ','ബു','വ്യാ','വെ','ശ'],
+ digits: null,
+ dateFormat: 'dd/mm/yyyy',
+ firstDay: 1,
+ isRTL: false
+};
+if (_julian) {
+ _julian.prototype.regionalOptions['ml'] =
+ _gregorian.prototype.regionalOptions['ml'];
+}
diff --git a/dist/regional/ms.js b/dist/regional/ms.js
new file mode 100644
index 0000000..ddbd6ee
--- /dev/null
+++ b/dist/regional/ms.js
@@ -0,0 +1,37 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Malaysian localisation for Gregorian/Julian calendars for jQuery.
+ Written by Mohd Nawawi Mohamad Jamili (nawawi@ronggeng.net). */
+var main = require('../main');
+var _gregorian = main.calendars.gregorian;
+var _julian = main.calendars.julian;
+
+_gregorian.prototype.regionalOptions['ms'] = {
+ name: 'Gregorian',
+ epochs: ['BCE', 'CE'],
+ monthNames: ['Januari','Februari','Mac','April','Mei','Jun',
+ 'Julai','Ogos','September','Oktober','November','Disember'],
+ monthNamesShort: ['Jan','Feb','Mac','Apr','Mei','Jun',
+ 'Jul','Ogo','Sep','Okt','Nov','Dis'],
+ dayNames: ['Ahad','Isnin','Selasa','Rabu','Khamis','Jumaat','Sabtu'],
+ dayNamesShort: ['Aha','Isn','Sel','Rab','Kha','Jum','Sab'],
+ dayNamesMin: ['Ah','Is','Se','Ra','Kh','Ju','Sa'],
+ digits: null,
+ dateFormat: 'dd/mm/yyyy',
+ firstDay: 0,
+ isRTL: false
+};
+if (_julian) {
+ _julian.prototype.regionalOptions['ms'] =
+ _gregorian.prototype.regionalOptions['ms'];
+}
diff --git a/dist/regional/mt.js b/dist/regional/mt.js
new file mode 100644
index 0000000..76a91e4
--- /dev/null
+++ b/dist/regional/mt.js
@@ -0,0 +1,37 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Maltese localisation for Gregorian/Julian calendars for jQuery.
+ Written by Chritian Sciberras (uuf6429@gmail.com). */
+var main = require('../main');
+var _gregorian = main.calendars.gregorian;
+var _julian = main.calendars.julian;
+
+_gregorian.prototype.regionalOptions['mt'] = {
+ name: 'Gregorian',
+ epochs: ['BCE', 'CE'],
+ monthNames: ['Jannar','Frar','Marzu','April','Mejju','Ġunju',
+ 'Lulju','Awissu','Settembru','Ottubru','Novembru','Diċembru'],
+ monthNamesShort: ['Jan', 'Fra', 'Mar', 'Apr', 'Mej', 'Ġun',
+ 'Lul', 'Awi', 'Set', 'Ott', 'Nov', 'Diċ'],
+ dayNames: ['Il-Ħadd', 'It-Tnejn', 'It-Tlieta', 'L-Erbgħa', 'Il-Ħamis', 'Il-Ġimgħa', 'Is-Sibt'],
+ dayNamesShort: ['Ħad', 'Tne', 'Tli', 'Erb', 'Ħam', 'Ġim', 'Sib'],
+ dayNamesMin: ['Ħ','T','T','E','Ħ','Ġ','S'],
+ digits: null,
+ dateFormat: 'dd/mm/yyyy',
+ firstDay: 1,
+ isRTL: false
+};
+if (_julian) {
+ _julian.prototype.regionalOptions['mt'] =
+ _gregorian.prototype.regionalOptions['mt'];
+}
diff --git a/dist/regional/nl-BE.js b/dist/regional/nl-BE.js
new file mode 100644
index 0000000..0ae80b8
--- /dev/null
+++ b/dist/regional/nl-BE.js
@@ -0,0 +1,37 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Dutch/Belgian localisation for Gregorian/Julian calendars for jQuery.
+ Written by Mathias Bynens . */
+var main = require('../main');
+var _gregorian = main.calendars.gregorian;
+var _julian = main.calendars.julian;
+
+_gregorian.prototype.regionalOptions['nl-BE'] = {
+ name: 'Gregorian',
+ epochs: ['BCE', 'CE'],
+ monthNames: ['januari', 'februari', 'maart', 'april', 'mei', 'juni',
+ 'juli', 'augustus', 'september', 'oktober', 'november', 'december'],
+ monthNamesShort: ['jan', 'feb', 'maa', 'apr', 'mei', 'jun',
+ 'jul', 'aug', 'sep', 'okt', 'nov', 'dec'],
+ dayNames: ['zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag'],
+ dayNamesShort: ['zon', 'maa', 'din', 'woe', 'don', 'vri', 'zat'],
+ dayNamesMin: ['zo', 'ma', 'di', 'wo', 'do', 'vr', 'za'],
+ digits: null,
+ dateFormat: 'dd/mm/yyyy',
+ firstDay: 1,
+ isRTL: false
+};
+if (_julian) {
+ _julian.prototype.regionalOptions['nl-BE'] =
+ _gregorian.prototype.regionalOptions['nl-BE'];
+}
diff --git a/dist/regional/nl.js b/dist/regional/nl.js
new file mode 100644
index 0000000..87f8218
--- /dev/null
+++ b/dist/regional/nl.js
@@ -0,0 +1,37 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Dutch localisation for Gregorian/Julian calendars for jQuery.
+ Written by Mathias Bynens . */
+var main = require('../main');
+var _gregorian = main.calendars.gregorian;
+var _julian = main.calendars.julian;
+
+_gregorian.prototype.regionalOptions['nl'] = {
+ name: 'Gregorian',
+ epochs: ['BCE', 'CE'],
+ monthNames: ['januari', 'februari', 'maart', 'april', 'mei', 'juni',
+ 'juli', 'augustus', 'september', 'oktober', 'november', 'december'],
+ monthNamesShort: ['jan', 'feb', 'maa', 'apr', 'mei', 'jun',
+ 'jul', 'aug', 'sep', 'okt', 'nov', 'dec'],
+ dayNames: ['zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag'],
+ dayNamesShort: ['zon', 'maa', 'din', 'woe', 'don', 'vri', 'zat'],
+ dayNamesMin: ['zo', 'ma', 'di', 'wo', 'do', 'vr', 'za'],
+ digits: null,
+ dateFormat: 'dd-mm-yyyy',
+ firstDay: 1,
+ isRTL: false
+};
+if (_julian) {
+ _julian.prototype.regionalOptions['nl'] =
+ _gregorian.prototype.regionalOptions['nl'];
+}
diff --git a/dist/regional/no.js b/dist/regional/no.js
new file mode 100644
index 0000000..992dc1a
--- /dev/null
+++ b/dist/regional/no.js
@@ -0,0 +1,37 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Norwegian localisation for Gregorian/Julian calendars for jQuery.
+ Written by Naimdjon Takhirov (naimdjon@gmail.com). */
+var main = require('../main');
+var _gregorian = main.calendars.gregorian;
+var _julian = main.calendars.julian;
+
+_gregorian.prototype.regionalOptions['no'] = {
+ name: 'Gregorian',
+ epochs: ['BCE', 'CE'],
+ monthNames: ['Januar','Februar','Mars','April','Mai','Juni',
+ 'Juli','August','September','Oktober','November','Desember'],
+ monthNamesShort: ['Jan','Feb','Mar','Apr','Mai','Jun',
+ 'Jul','Aug','Sep','Okt','Nov','Des'],
+ dayNamesShort: ['Søn','Man','Tir','Ons','Tor','Fre','Lør'],
+ dayNames: ['Søndag','Mandag','Tirsdag','Onsdag','Torsdag','Fredag','Lørdag'],
+ dayNamesMin: ['Sø','Ma','Ti','On','To','Fr','Lø'],
+ digits: null,
+ dateFormat: 'dd.mm.yyyy',
+ firstDay: 1,
+ isRTL: false
+};
+if (_julian) {
+ _julian.prototype.regionalOptions['no'] =
+ _gregorian.prototype.regionalOptions['no'];
+}
diff --git a/dist/regional/pa.js b/dist/regional/pa.js
new file mode 100644
index 0000000..9706894
--- /dev/null
+++ b/dist/regional/pa.js
@@ -0,0 +1,36 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Punjabi localisation for Gregorian/Julian calendars for jQuery.
+ Sarbjit Singh (sanbroz@gmail.com). */
+var main = require('../main');
+var _gregorian = main.calendars.gregorian;
+var _julian = main.calendars.julian;
+
+_gregorian.prototype.regionalOptions['pa'] = {
+ name: 'Gregorian',
+ epochs: ['BCE', 'CE'],
+ monthNames: ['ਜਨਵਰੀ','ਫ਼ਰਵਰੀ','ਮਾਰਚ','ਅਪ੍ਰੈਲ','ਮਈ','ਜੂਨ',
+ 'ਜੁਲਾਈ','ਅਗਸਤ','ਸਤੰਬਰ','ਅਕਤੂਬਰ','ਨਵੰਬਰ','ਦਸੰਬਰ'],
+ monthNamesShort: ['ਜਨ', 'ਫ਼ਰ', 'ਮਾਰ', 'ਅਪ੍ਰੈ', 'ਮਈ', 'ਜੂਨ', 'ਜੁਲਾ', 'ਅਗ', 'ਸਤੰ', 'ਅਕ', 'ਨਵੰ', 'ਦਸੰ'],
+ dayNames: ['ਐਤਵਾਰ', 'ਸੋਮਵਾਰ', 'ਮੰਗਲਵਾਰ', 'ਬੁੱਧਵਾਰ', 'ਵੀਰਵਾਰ', 'ਸ਼ੁੱਕਰਵਾਰ', 'ਸ਼ਨਿੱਚਰਵਾਰ'],
+ dayNamesShort: ['ਐਤ', 'ਸੋਮ', 'ਮੰਗਲ', 'ਬੁੱਧ', 'ਵੀਰ', 'ਸ਼ੁੱਕਰ', 'ਸ਼ਨਿੱਚਰ'],
+ dayNamesMin: ['ਐ', 'ਸੋ', 'ਮੰ', 'ਬੁੱ', 'ਵੀ', 'ਸ਼ੁੱ', 'ਸ਼'],
+ digits: main.substituteDigits(['੦', '੧', '੨', '੩', '੪', '੫', '੬', '੭', '੮', '੯']),
+ dateFormat: 'dd-mm-yyyy',
+ firstDay: 1,
+ isRTL: false
+};
+if (_julian) {
+ _julian.prototype.regionalOptions['pa'] =
+ _gregorian.prototype.regionalOptions['pa'];
+}
diff --git a/dist/regional/pl.js b/dist/regional/pl.js
new file mode 100644
index 0000000..47e20a8
--- /dev/null
+++ b/dist/regional/pl.js
@@ -0,0 +1,37 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Polish localisation for Gregorian/Julian calendars for jQuery.
+ Written by Jacek Wysocki (jacek.wysocki@gmail.com). */
+var main = require('../main');
+var _gregorian = main.calendars.gregorian;
+var _julian = main.calendars.julian;
+
+_gregorian.prototype.regionalOptions['pl'] = {
+ name: 'Gregorian',
+ epochs: ['BCE', 'CE'],
+ monthNames: ['Styczeń','Luty','Marzec','Kwiecień','Maj','Czerwiec',
+ 'Lipiec','Sierpień','Wrzesień','Październik','Listopad','Grudzień'],
+ monthNamesShort: ['Sty','Lu','Mar','Kw','Maj','Cze',
+ 'Lip','Sie','Wrz','Pa','Lis','Gru'],
+ dayNames: ['Niedziela','Poniedzialek','Wtorek','Środa','Czwartek','Piątek','Sobota'],
+ dayNamesShort: ['Nie','Pn','Wt','Śr','Czw','Pt','So'],
+ dayNamesMin: ['N','Pn','Wt','Śr','Cz','Pt','So'],
+ digits: null,
+ dateFormat: 'yyyy-mm-dd',
+ firstDay: 1,
+ isRTL: false
+};
+if (_julian) {
+ _julian.prototype.regionalOptions['pl'] =
+ _gregorian.prototype.regionalOptions['pl'];
+}
diff --git a/dist/regional/pt-BR.js b/dist/regional/pt-BR.js
new file mode 100644
index 0000000..c9f282b
--- /dev/null
+++ b/dist/regional/pt-BR.js
@@ -0,0 +1,37 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Brazilian Portuguese localisation for Gregorian/Julian calendars for jQuery.
+ Written by Leonildo Costa Silva (leocsilva@gmail.com). */
+var main = require('../main');
+var _gregorian = main.calendars.gregorian;
+var _julian = main.calendars.julian;
+
+_gregorian.prototype.regionalOptions['pt-BR'] = {
+ name: 'Gregorian',
+ epochs: ['BCE', 'CE'],
+ monthNames: ['Janeiro','Fevereiro','Março','Abril','Maio','Junho',
+ 'Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'],
+ monthNamesShort: ['Jan','Fev','Mar','Abr','Mai','Jun',
+ 'Jul','Ago','Set','Out','Nov','Dez'],
+ dayNames: ['Domingo','Segunda-feira','Terça-feira','Quarta-feira','Quinta-feira','Sexta-feira','Sábado'],
+ dayNamesShort: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'],
+ dayNamesMin: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'],
+ digits: null,
+ dateFormat: 'dd/mm/yyyy',
+ firstDay: 0,
+ isRTL: false
+};
+if (_julian) {
+ _julian.prototype.regionalOptions['pt-BR'] =
+ _gregorian.prototype.regionalOptions['pt-BR'];
+}
diff --git a/dist/regional/rm.js b/dist/regional/rm.js
new file mode 100644
index 0000000..0ed3edd
--- /dev/null
+++ b/dist/regional/rm.js
@@ -0,0 +1,37 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Romansh localisation for Gregorian/Julian calendars for jQuery.
+ Yvonne Gienal (yvonne.gienal@educa.ch). */
+var main = require('../main');
+var _gregorian = main.calendars.gregorian;
+var _julian = main.calendars.julian;
+
+_gregorian.prototype.regionalOptions['rm'] = {
+ name: 'Gregorian',
+ epochs: ['BCE', 'CE'],
+ monthNames: ['Schaner','Favrer','Mars','Avrigl','Matg','Zercladur',
+ 'Fanadur','Avust','Settember','October','November','December'],
+ monthNamesShort: ['Scha','Fev','Mar','Avr','Matg','Zer',
+ 'Fan','Avu','Sett','Oct','Nov','Dec'],
+ dayNames: ['Dumengia','Glindesdi','Mardi','Mesemna','Gievgia','Venderdi','Sonda'],
+ dayNamesShort: ['Dum','Gli','Mar','Mes','Gie','Ven','Som'],
+ dayNamesMin: ['Du','Gl','Ma','Me','Gi','Ve','So'],
+ digits: null,
+ dateFormat: 'dd/mm/yyyy',
+ firstDay: 1,
+ isRTL: false
+};
+if (_julian) {
+ _julian.prototype.regionalOptions['rm'] =
+ _gregorian.prototype.regionalOptions['rm'];
+}
diff --git a/dist/regional/ro.js b/dist/regional/ro.js
new file mode 100644
index 0000000..23d9d52
--- /dev/null
+++ b/dist/regional/ro.js
@@ -0,0 +1,37 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Romanian localisation for Gregorian/Julian calendars for jQuery.
+ Written by Edmond L. (ll_edmond@walla.com) and Ionut G. Stan (ionut.g.stan@gmail.com). */
+var main = require('../main');
+var _gregorian = main.calendars.gregorian;
+var _julian = main.calendars.julian;
+
+_gregorian.prototype.regionalOptions['ro'] = {
+ name: 'Gregorian',
+ epochs: ['BCE', 'CE'],
+ monthNames: ['Ianuarie','Februarie','Martie','Aprilie','Mai','Iunie',
+ 'Iulie','August','Septembrie','Octombrie','Noiembrie','Decembrie'],
+ monthNamesShort: ['Ian', 'Feb', 'Mar', 'Apr', 'Mai', 'Iun',
+ 'Iul', 'Aug', 'Sep', 'Oct', 'Noi', 'Dec'],
+ dayNames: ['Duminică', 'Luni', 'Marti', 'Miercuri', 'Joi', 'Vineri', 'Sâmbătă'],
+ dayNamesShort: ['Dum', 'Lun', 'Mar', 'Mie', 'Joi', 'Vin', 'Sâm'],
+ dayNamesMin: ['Du','Lu','Ma','Mi','Jo','Vi','Sâ'],
+ digits: null,
+ dateFormat: 'dd.mm.yyyy',
+ firstDay: 1,
+ isRTL: false
+};
+if (_julian) {
+ _julian.prototype.regionalOptions['ro'] =
+ _gregorian.prototype.regionalOptions['ro'];
+}
diff --git a/dist/regional/ru.js b/dist/regional/ru.js
new file mode 100644
index 0000000..a0f9fef
--- /dev/null
+++ b/dist/regional/ru.js
@@ -0,0 +1,37 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Russian localisation for Gregorian/Julian calendars for jQuery.
+ Written by Andrew Stromnov (stromnov@gmail.com). */
+var main = require('../main');
+var _gregorian = main.calendars.gregorian;
+var _julian = main.calendars.julian;
+
+_gregorian.prototype.regionalOptions['ru'] = {
+ name: 'Gregorian',
+ epochs: ['BCE', 'CE'],
+ monthNames: ['Январь','Февраль','Март','Апрель','Май','Июнь',
+ 'Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'],
+ monthNamesShort: ['Янв','Фев','Мар','Апр','Май','Июн',
+ 'Июл','Авг','Сен','Окт','Ноя','Дек'],
+ dayNames: ['воскресенье','понедельник','вторник','среда','четверг','пятница','суббота'],
+ dayNamesShort: ['вск','пнд','втр','срд','чтв','птн','сбт'],
+ dayNamesMin: ['Вс','Пн','Вт','Ср','Чт','Пт','Сб'],
+ digits: null,
+ dateFormat: 'dd.mm.yyyy',
+ firstDay: 1,
+ isRTL: false
+};
+if (_julian) {
+ _julian.prototype.regionalOptions['ru'] =
+ _gregorian.prototype.regionalOptions['ru'];
+}
diff --git a/dist/regional/sk.js b/dist/regional/sk.js
new file mode 100644
index 0000000..c579508
--- /dev/null
+++ b/dist/regional/sk.js
@@ -0,0 +1,37 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Slovak localisation for Gregorian/Julian calendars for jQuery.
+ Written by Vojtech Rinik (vojto@hmm.sk). */
+var main = require('../main');
+var _gregorian = main.calendars.gregorian;
+var _julian = main.calendars.julian;
+
+_gregorian.prototype.regionalOptions['sk'] = {
+ name: 'Gregorian',
+ epochs: ['BCE', 'CE'],
+ monthNames: ['Január','Február','Marec','Apríl','Máj','Jún',
+ 'Júl','August','September','Október','November','December'],
+ monthNamesShort: ['Jan','Feb','Mar','Apr','Máj','Jún',
+ 'Júl','Aug','Sep','Okt','Nov','Dec'],
+ dayNames: ['Nedel\'a','Pondelok','Utorok','Streda','Štvrtok','Piatok','Sobota'],
+ dayNamesShort: ['Ned','Pon','Uto','Str','Štv','Pia','Sob'],
+ dayNamesMin: ['Ne','Po','Ut','St','Št','Pia','So'],
+ digits: null,
+ dateFormat: 'dd.mm.yyyy',
+ firstDay: 0,
+ isRTL: false
+};
+if (_julian) {
+ _julian.prototype.regionalOptions['sk'] =
+ _gregorian.prototype.regionalOptions['sk'];
+}
diff --git a/dist/regional/sl.js b/dist/regional/sl.js
new file mode 100644
index 0000000..7e37fae
--- /dev/null
+++ b/dist/regional/sl.js
@@ -0,0 +1,38 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Slovenian localisation for Gregorian/Julian calendars for jQuery.
+ Written by Jaka Jancar (jaka@kubje.org). */
+/* c = č, s = š z = ž C = Č S = Š Z = Ž */
+var main = require('../main');
+var _gregorian = main.calendars.gregorian;
+var _julian = main.calendars.julian;
+
+_gregorian.prototype.regionalOptions['sl'] = {
+ name: 'Gregorian',
+ epochs: ['BCE', 'CE'],
+ monthNames: ['Januar','Februar','Marec','April','Maj','Junij',
+ 'Julij','Avgust','September','Oktober','November','December'],
+ monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
+ 'Jul','Avg','Sep','Okt','Nov','Dec'],
+ dayNames: ['Nedelja','Ponedeljek','Torek','Sreda','Četrtek','Petek','Sobota'],
+ dayNamesShort: ['Ned','Pon','Tor','Sre','Čet','Pet','Sob'],
+ dayNamesMin: ['Ne','Po','To','Sr','Če','Pe','So'],
+ digits: null,
+ dateFormat: 'dd.mm.yyyy',
+ firstDay: 1,
+ isRTL: false
+};
+if (_julian) {
+ _julian.prototype.regionalOptions['sl'] =
+ _gregorian.prototype.regionalOptions['sl'];
+}
diff --git a/dist/regional/sq.js b/dist/regional/sq.js
new file mode 100644
index 0000000..75081bf
--- /dev/null
+++ b/dist/regional/sq.js
@@ -0,0 +1,37 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Albanian localisation for Gregorian/Julian calendars for jQuery.
+ Written by Flakron Bytyqi (flakron@gmail.com). */
+var main = require('../main');
+var _gregorian = main.calendars.gregorian;
+var _julian = main.calendars.julian;
+
+_gregorian.prototype.regionalOptions['sq'] = {
+ name: 'Gregorian',
+ epochs: ['BCE', 'CE'],
+ monthNames: ['Janar','Shkurt','Mars','Prill','Maj','Qershor',
+ 'Korrik','Gusht','Shtator','Tetor','Nëntor','Dhjetor'],
+ monthNamesShort: ['Jan','Shk','Mar','Pri','Maj','Qer',
+ 'Kor','Gus','Sht','Tet','Nën','Dhj'],
+ dayNames: ['E Diel','E Hënë','E Martë','E Mërkurë','E Enjte','E Premte','E Shtune'],
+ dayNamesShort: ['Di','Hë','Ma','Më','En','Pr','Sh'],
+ dayNamesMin: ['Di','Hë','Ma','Më','En','Pr','Sh'],
+ digits: null,
+ dateFormat: 'dd.mm.yyyy',
+ firstDay: 1,
+ isRTL: false
+};
+if (_julian) {
+ _julian.prototype.regionalOptions['sq'] =
+ _gregorian.prototype.regionalOptions['sq'];
+}
diff --git a/dist/regional/sr-SR.js b/dist/regional/sr-SR.js
new file mode 100644
index 0000000..90d7a20
--- /dev/null
+++ b/dist/regional/sr-SR.js
@@ -0,0 +1,36 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Serbian localisation for Gregorian/Julian calendars for jQuery.
+ Written by Dejan Dimić. */
+var main = require('../main');
+var _gregorian = main.calendars.gregorian;
+var _julian = main.calendars.julian;
+
+_gregorian.prototype.regionalOptions['sr-SR'] = {
+ name: 'Gregorian',
+ epochs: ['BCE', 'CE'],
+ monthNames: ['Januar','Februar','Mart','April','Maj','Jun',
+ 'Jul','Avgust','Septembar','Oktobar','Novembar','Decembar'],
+ monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun','Jul','Avg','Sep','Okt','Nov','Dec'],
+ dayNames: ['Nedelja','Ponedeljak','Utorak','Sreda','Četvrtak','Petak','Subota'],
+ dayNamesShort: ['Ned','Pon','Uto','Sre','Čet','Pet','Sub'],
+ dayNamesMin: ['Ne','Po','Ut','Sr','Če','Pe','Su'],
+ digits: null,
+ dateFormat: 'dd/mm/yyyy',
+ firstDay: 1,
+ isRTL: false
+};
+if (_julian) {
+ _julian.prototype.regionalOptions['sr-SR'] =
+ _gregorian.prototype.regionalOptions['sr-SR'];
+}
diff --git a/dist/regional/sr.js b/dist/regional/sr.js
new file mode 100644
index 0000000..b0a99e1
--- /dev/null
+++ b/dist/regional/sr.js
@@ -0,0 +1,36 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Serbian localisation for Gregorian/Julian calendars for jQuery.
+ Written by Dejan Dimić. */
+var main = require('../main');
+var _gregorian = main.calendars.gregorian;
+var _julian = main.calendars.julian;
+
+_gregorian.prototype.regionalOptions['sr'] = {
+ name: 'Gregorian',
+ epochs: ['BCE', 'CE'],
+ monthNames: ['Јануар','Фебруар','Март','Април','Мај','Јун',
+ 'Јул','Август','Септембар','Октобар','Новембар','Децембар'],
+ monthNamesShort: ['Јан','Феб','Мар','Апр','Мај','Јун','Јул','Авг','Сеп','Окт','Нов','Дец'],
+ dayNames: ['Недеља','Понедељак','Уторак','Среда','Четвртак','Петак','Субота'],
+ dayNamesShort: ['Нед','Пон','Уто','Сре','Чет','Пет','Суб'],
+ dayNamesMin: ['Не','По','Ут','Ср','Че','Пе','Су'],
+ digits: null,
+ dateFormat: 'dd/mm/yyyy',
+ firstDay: 1,
+ isRTL: false
+};
+if (_julian) {
+ _julian.prototype.regionalOptions['sr'] =
+ _gregorian.prototype.regionalOptions['sr'];
+}
diff --git a/dist/regional/sv.js b/dist/regional/sv.js
new file mode 100644
index 0000000..02c4552
--- /dev/null
+++ b/dist/regional/sv.js
@@ -0,0 +1,37 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Swedish localisation for Gregorian/Julian calendars for jQuery.
+ Written by Anders Ekdahl (anders@nomadiz.se). */
+var main = require('../main');
+var _gregorian = main.calendars.gregorian;
+var _julian = main.calendars.julian;
+
+_gregorian.prototype.regionalOptions['sv'] = {
+ name: 'Gregorian',
+ epochs: ['BCE', 'CE'],
+ monthNames: ['Januari','Februari','Mars','April','Maj','Juni',
+ 'Juli','Augusti','September','Oktober','November','December'],
+ monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
+ 'Jul','Aug','Sep','Okt','Nov','Dec'],
+ dayNames: ['Söndag','Måndag','Tisdag','Onsdag','Torsdag','Fredag','Lördag'],
+ dayNamesShort: ['Sön','Mån','Tis','Ons','Tor','Fre','Lör'],
+ dayNamesMin: ['Sö','Må','Ti','On','To','Fr','Lö'],
+ digits: null,
+ dateFormat: 'yyyy-mm-dd',
+ firstDay: 1,
+ isRTL: false
+};
+if (_julian) {
+ _julian.prototype.regionalOptions['sv'] =
+ _gregorian.prototype.regionalOptions['sv'];
+}
diff --git a/dist/regional/ta.js b/dist/regional/ta.js
new file mode 100644
index 0000000..a5167eb
--- /dev/null
+++ b/dist/regional/ta.js
@@ -0,0 +1,37 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Tamil (UTF-8) localisation for Gregorian/Julian calendars for jQuery.
+ Written by S A Sureshkumar (saskumar@live.com). */
+var main = require('../main');
+var _gregorian = main.calendars.gregorian;
+var _julian = main.calendars.julian;
+
+_gregorian.prototype.regionalOptions['ta'] = {
+ name: 'Gregorian',
+ epochs: ['BCE', 'CE'],
+ monthNames: ['தை','மாசி','பங்குனி','சித்திரை','வைகாசி','ஆனி',
+ 'ஆடி','ஆவணி','புரட்டாசி','ஐப்பசி','கார்த்திகை','மார்கழி'],
+ monthNamesShort: ['தை','மாசி','பங்','சித்','வைகா','ஆனி',
+ 'ஆடி','ஆவ','புர','ஐப்','கார்','மார்'],
+ dayNames: ['ஞாயிற்றுக்கிழமை','திங்கட்கிழமை','செவ்வாய்க்கிழமை','புதன்கிழமை','வியாழக்கிழமை','வெள்ளிக்கிழமை','சனிக்கிழமை'],
+ dayNamesShort: ['ஞாயிறு','திங்கள்','செவ்வாய்','புதன்','வியாழன்','வெள்ளி','சனி'],
+ dayNamesMin: ['ஞா','தி','செ','பு','வி','வெ','ச'],
+ digits: null,
+ dateFormat: 'dd/mm/yyyy',
+ firstDay: 1,
+ isRTL: false
+};
+if (_julian) {
+ _julian.prototype.regionalOptions['ta'] =
+ _gregorian.prototype.regionalOptions['ta'];
+}
diff --git a/dist/regional/th.js b/dist/regional/th.js
new file mode 100644
index 0000000..91123df
--- /dev/null
+++ b/dist/regional/th.js
@@ -0,0 +1,37 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Thai localisation for Gregorian/Julian calendars for jQuery.
+ Written by pipo (pipo@sixhead.com). */
+var main = require('../main');
+var _gregorian = main.calendars.gregorian;
+var _julian = main.calendars.julian;
+
+_gregorian.prototype.regionalOptions['th'] = {
+ name: 'Gregorian',
+ epochs: ['BCE', 'CE'],
+ monthNames: ['มกราคม','กุมภาพันธ์','มีนาคม','เมษายน','พฤษภาคม','มิถุนายน',
+ 'กรกฎาคม','สิงหาคม','กันยายน','ตุลาคม','พฤศจิกายน','ธันวาคม'],
+ monthNamesShort: ['ม.ค.','ก.พ.','มี.ค.','เม.ย.','พ.ค.','มิ.ย.',
+ 'ก.ค.','ส.ค.','ก.ย.','ต.ค.','พ.ย.','ธ.ค.'],
+ dayNames: ['อาทิตย์','จันทร์','อังคาร','พุธ','พฤหัสบดี','ศุกร์','เสาร์'],
+ dayNamesShort: ['อา.','จ.','อ.','พ.','พฤ.','ศ.','ส.'],
+ dayNamesMin: ['อา.','จ.','อ.','พ.','พฤ.','ศ.','ส.'],
+ digits: null,
+ dateFormat: 'dd/mm/yyyy',
+ firstDay: 0,
+ isRTL: false
+};
+if (_julian) {
+ _julian.prototype.regionalOptions['th'] =
+ _gregorian.prototype.regionalOptions['th'];
+}
diff --git a/dist/regional/tr.js b/dist/regional/tr.js
new file mode 100644
index 0000000..3cb7dac
--- /dev/null
+++ b/dist/regional/tr.js
@@ -0,0 +1,37 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Turkish localisation for Gregorian/Julian calendars for jQuery.
+ Written by Izzet Emre Erkan (kara@karalamalar.net). */
+var main = require('../main');
+var _gregorian = main.calendars.gregorian;
+var _julian = main.calendars.julian;
+
+_gregorian.prototype.regionalOptions['tr'] = {
+ name: 'Gregorian',
+ epochs: ['BCE', 'CE'],
+ monthNames: ['Ocak','Şubat','Mart','Nisan','Mayıs','Haziran',
+ 'Temmuz','Ağustos','Eylül','Ekim','Kasım','Aralık'],
+ monthNamesShort: ['Oca','Şub','Mar','Nis','May','Haz',
+ 'Tem','Ağu','Eyl','Eki','Kas','Ara'],
+ dayNames: ['Pazar','Pazartesi','Salı','Çarşamba','Perşembe','Cuma','Cumartesi'],
+ dayNamesShort: ['Pz','Pt','Sa','Ça','Pe','Cu','Ct'],
+ dayNamesMin: ['Pz','Pt','Sa','Ça','Pe','Cu','Ct'],
+ digits: null,
+ dateFormat: 'dd.mm.yyyy',
+ firstDay: 1,
+ isRTL: false
+};
+if (_julian) {
+ _julian.prototype.regionalOptions['tr'] =
+ _gregorian.prototype.regionalOptions['tr'];
+}
diff --git a/dist/regional/tt.js b/dist/regional/tt.js
new file mode 100644
index 0000000..e1fed12
--- /dev/null
+++ b/dist/regional/tt.js
@@ -0,0 +1,37 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Tatar localisation for Gregorian/Julian calendars for jQuery.
+ Written by Ирек Хаҗиев (khazirek@gmail.com). */
+var main = require('../main');
+var _gregorian = main.calendars.gregorian;
+var _julian = main.calendars.julian;
+
+_gregorian.prototype.regionalOptions['tt'] = {
+ name: 'Gregorian',
+ epochs: ['BCE', 'CE'],
+ monthNames: ['Гынвар','Февраль','Март','Апрель','Май','Июнь',
+ 'Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'],
+ monthNamesShort: ['Гыйн','Фев','Мар','Апр','Май','Июн',
+ 'Июл','Авг','Сен','Окт','Ноя','Дек'],
+ dayNames: ['якшәмбе','дүшәмбе','сишәмбе','чәршәмбе','пәнҗешәмбе','җомга','шимбә'],
+ dayNamesShort: ['якш','дүш','сиш','чәр','пән','җом','шим'],
+ dayNamesMin: ['Як','Дү','Си','Чә','Пә','Җо','Ши'],
+ digits: null,
+ dateFormat: 'dd.mm.yyyy',
+ firstDay: 1,
+ isRTL: false
+};
+if (_julian) {
+ _julian.prototype.regionalOptions['tt'] =
+ _gregorian.prototype.regionalOptions['tt'];
+}
diff --git a/dist/regional/uk.js b/dist/regional/uk.js
new file mode 100644
index 0000000..ba7254d
--- /dev/null
+++ b/dist/regional/uk.js
@@ -0,0 +1,37 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Ukrainian localisation for Gregorian/Julian calendars for jQuery.
+ Written by Maxim Drogobitskiy (maxdao@gmail.com). */
+var main = require('../main');
+var _gregorian = main.calendars.gregorian;
+var _julian = main.calendars.julian;
+
+_gregorian.prototype.regionalOptions['uk'] = {
+ name: 'Gregorian',
+ epochs: ['BCE', 'CE'],
+ monthNames: ['Січень','Лютий','Березень','Квітень','Травень','Червень',
+ 'Липень','Серпень','Вересень','Жовтень','Листопад','Грудень'],
+ monthNamesShort: ['Січ','Лют','Бер','Кві','Тра','Чер',
+ 'Лип','Сер','Вер','Жов','Лис','Гру'],
+ dayNames: ['неділя','понеділок','вівторок','середа','четвер','п\'ятниця','субота'],
+ dayNamesShort: ['нед','пнд','вів','срд','чтв','птн','сбт'],
+ dayNamesMin: ['Нд','Пн','Вт','Ср','Чт','Пт','Сб'],
+ digits: null,
+ dateFormat: 'dd/mm/yyyy',
+ firstDay: 1,
+ isRTL: false
+};
+if (_julian) {
+ _julian.prototype.regionalOptions['uk'] =
+ _gregorian.prototype.regionalOptions['uk'];
+}
diff --git a/dist/regional/ur.js b/dist/regional/ur.js
new file mode 100644
index 0000000..a6a7c5d
--- /dev/null
+++ b/dist/regional/ur.js
@@ -0,0 +1,39 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Urdu localisation for Gregorian/Julian calendars for jQuery.
+ Mansoor Munib -- mansoormunib@gmail.com
+ Thanks to Habib Ahmed, ObaidUllah Anwar. */
+var main = require('../main');
+var _gregorian = main.calendars.gregorian;
+var _julian = main.calendars.julian;
+
+_gregorian.prototype.regionalOptions['ur'] = {
+ name: 'Gregorian',
+ epochs: ['BCE', 'CE'],
+ monthNames: ['جنوری','فروری','مارچ','اپریل','مئی','جون',
+ 'جولائی','اگست','ستمبر','اکتوبر','نومبر','دسمبر'],
+ monthNamesShort: ['1','2','3','4','5','6',
+ '7','8','9','10','11','12'],
+ dayNames: ['اتوار','پير','منگل','بدھ','جمعرات','جمعہ','ہفتہ'],
+ dayNamesShort: ['اتوار','پير','منگل','بدھ','جمعرات','جمعہ','ہفتہ'],
+ dayNamesMin: ['اتوار','پير','منگل','بدھ','جمعرات','جمعہ','ہفتہ'],
+ digits: main.substituteDigits(['٠', '١', '٢', '٣', '۴', '۵', '۶', '۷', '٨', '٩']),
+ dateFormat: 'dd/mm/yyyy',
+ firstDay: 0,
+ firstDay: 1,
+ isRTL: true
+};
+if (_julian) {
+ _julian.prototype.regionalOptions['ur'] =
+ _gregorian.prototype.regionalOptions['ur'];
+}
diff --git a/dist/regional/vi.js b/dist/regional/vi.js
new file mode 100644
index 0000000..c327838
--- /dev/null
+++ b/dist/regional/vi.js
@@ -0,0 +1,37 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Vietnamese localisation for Gregorian/Julian calendars for jQuery.
+ Translated by Le Thanh Huy (lthanhhuy@cit.ctu.edu.vn). */
+var main = require('../main');
+var _gregorian = main.calendars.gregorian;
+var _julian = main.calendars.julian;
+
+_gregorian.prototype.regionalOptions['vi'] = {
+ name: 'Gregorian',
+ epochs: ['BCE', 'CE'],
+ monthNames: ['Tháng Một', 'Tháng Hai', 'Tháng Ba', 'Tháng Tư', 'Tháng Năm', 'Tháng Sáu',
+ 'Tháng Bảy', 'Tháng Tám', 'Tháng Chín', 'Tháng Mười', 'Tháng Mười Một', 'Tháng Mười Hai'],
+ monthNamesShort: ['Tháng 1', 'Tháng 2', 'Tháng 3', 'Tháng 4', 'Tháng 5', 'Tháng 6',
+ 'Tháng 7', 'Tháng 8', 'Tháng 9', 'Tháng 10', 'Tháng 11', 'Tháng 12'],
+ dayNames: ['Chủ Nhật', 'Thứ Hai', 'Thứ Ba', 'Thứ Tư', 'Thứ Năm', 'Thứ Sáu', 'Thứ Bảy'],
+ dayNamesShort: ['CN', 'T2', 'T3', 'T4', 'T5', 'T6', 'T7'],
+ dayNamesMin: ['CN', 'T2', 'T3', 'T4', 'T5', 'T6', 'T7'],
+ digits: null,
+ dateFormat: 'dd/mm/yyyy',
+ firstDay: 0,
+ isRTL: false
+};
+if (_julian) {
+ _julian.prototype.regionalOptions['vi'] =
+ _gregorian.prototype.regionalOptions['vi'];
+}
diff --git a/dist/regional/zh-CN.js b/dist/regional/zh-CN.js
new file mode 100644
index 0000000..cdfce3c
--- /dev/null
+++ b/dist/regional/zh-CN.js
@@ -0,0 +1,38 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Simplified Chinese localisation for Gregorian/Julian calendars for jQuery.
+ Written by Cloudream (cloudream@gmail.com). */
+var main = require('../main');
+var _gregorian = main.calendars.gregorian;
+var _julian = main.calendars.julian;
+
+_gregorian.prototype.regionalOptions['zh-CN'] = {
+ name: 'Gregorian',
+ epochs: ['BCE', 'CE'],
+ monthNames: ['一月','二月','三月','四月','五月','六月',
+ '七月','八月','九月','十月','十一月','十二月'],
+ monthNamesShort: ['一','二','三','四','五','六',
+ '七','八','九','十','十一','十二'],
+ dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'],
+ dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'],
+ dayNamesMin: ['日','一','二','三','四','五','六'],
+ digits: main.substituteChineseDigits(
+ ['〇', '一', '二', '三', '四', '五', '六', '七', '八', '九'], ['', '十', '百', '千']),
+ dateFormat: 'yyyy-mm-dd',
+ firstDay: 1,
+ isRTL: false
+};
+if (_julian) {
+ _julian.prototype.regionalOptions['zh-CN'] =
+ _gregorian.prototype.regionalOptions['zh-CN'];
+}
diff --git a/dist/regional/zh-HK.js b/dist/regional/zh-HK.js
new file mode 100644
index 0000000..63f9f5a
--- /dev/null
+++ b/dist/regional/zh-HK.js
@@ -0,0 +1,38 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Hong Kong Chinese localisation for Gregorian/Julian calendars for jQuery.
+ Written by SCCY (samuelcychan@gmail.com). */
+var main = require('../main');
+var _gregorian = main.calendars.gregorian;
+var _julian = main.calendars.julian;
+
+_gregorian.prototype.regionalOptions['zh-HK'] = {
+ name: 'Gregorian',
+ epochs: ['BCE', 'CE'],
+ monthNames: ['一月','二月','三月','四月','五月','六月',
+ '七月','八月','九月','十月','十一月','十二月'],
+ monthNamesShort: ['一','二','三','四','五','六',
+ '七','八','九','十','十一','十二'],
+ dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'],
+ dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'],
+ dayNamesMin: ['日','一','二','三','四','五','六'],
+ digits: main.substituteChineseDigits(
+ ['〇', '一', '二', '三', '四', '五', '六', '七', '八', '九'], ['', '十', '百', '千']),
+ dateFormat: 'dd-mm-yyyy',
+ firstDay: 0,
+ isRTL: false
+};
+if (_julian) {
+ _julian.prototype.regionalOptions['zh-HK'] =
+ _gregorian.prototype.regionalOptions['zh-HK'];
+}
diff --git a/dist/regional/zh-TW.js b/dist/regional/zh-TW.js
new file mode 100644
index 0000000..ed482e5
--- /dev/null
+++ b/dist/regional/zh-TW.js
@@ -0,0 +1,38 @@
+/*
+ * World Calendars
+ * https://github.com/alexcjohnson/world-calendars
+ *
+ * Batch-converted from kbwood/calendars
+ * Many thanks to Keith Wood and all of the contributors to the original project!
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* http://keith-wood.name/calendars.html
+ Traditional Chinese localisation for Gregorian/Julian calendars for jQuery.
+ Written by Ressol (ressol@gmail.com). */
+var main = require('../main');
+var _gregorian = main.calendars.gregorian;
+var _julian = main.calendars.julian;
+
+_gregorian.prototype.regionalOptions['zh-TW'] = {
+ name: 'Gregorian',
+ epochs: ['BCE', 'CE'],
+ monthNames: ['一月','二月','三月','四月','五月','六月',
+ '七月','八月','九月','十月','十一月','十二月'],
+ monthNamesShort: ['一','二','三','四','五','六',
+ '七','八','九','十','十一','十二'],
+ dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'],
+ dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'],
+ dayNamesMin: ['日','一','二','三','四','五','六'],
+ digits: main.substituteChineseDigits(
+ ['〇', '一', '二', '三', '四', '五', '六', '七', '八', '九'], ['', '十', '百', '千']),
+ dateFormat: 'yyyy/mm/dd',
+ firstDay: 1,
+ isRTL: false
+};
+if (_julian) {
+ _julian.prototype.regionalOptions['zh-TW'] =
+ _gregorian.prototype.regionalOptions['zh-TW'];
+}
diff --git a/jquery-src/README.md b/jquery-src/README.md
new file mode 100755
index 0000000..088a4d6
--- /dev/null
+++ b/jquery-src/README.md
@@ -0,0 +1,13 @@
+jQuery World Calendars
+======================
+
+This plugin provides support for various world calendars, including a datepicker.
+
+* Calendars: Gregorian, Julian, Taiwanese, Thai, Persian, Islamic, Umm al-Qura, Hebrew, Ethiopian, Coptic, Nepali, Mayan, Nanakshahi, and Discworld.
+* Parse and format dates in all these calendars.
+* Style the datepicker using one of five themes, or use any of the standard Themeroller themes.
+* Over 70 localisations for Gregorian/Julian calendars.
+
+Have a look at the plugin Web site, http://keith-wood.name/calendars.html, for demonstrations of its abilities.
+
+For documentation on the functionality see http://keith-wood.name/calendarsRef.html.
diff --git a/jquery-src/bower.json b/jquery-src/bower.json
new file mode 100755
index 0000000..c26134d
--- /dev/null
+++ b/jquery-src/bower.json
@@ -0,0 +1,46 @@
+{
+ "name": "kbwood_calendars",
+ "version": "2.0.2",
+ "description": "This plugin provides support for various world calendars, including a datepicker. * Calendars: Gregorian, Julian, Taiwanese, Thai, Persian, Islamic, Umm al-Qura, Hebrew, Ethiopian, Coptic, Nepali, Mayan, Nanakshahi, and Discworld. * Parse and format dates in all these calendars. * Style the datepicker using one of five themes, or use any of the standard Themeroller themes. * Over 70 localisations for Gregorian/Julian calendars.",
+ "keywords": [
+ "calendar",
+ "coptic",
+ "date",
+ "datepicker",
+ "discworld",
+ "ethiopian",
+ "gregorian",
+ "hebrew",
+ "i18n",
+ "input",
+ "islamic",
+ "julian",
+ "mayan",
+ "nanakshahi",
+ "nepali",
+ "persian",
+ "taiwanese",
+ "thai",
+ "ui",
+ "umm al-qura",
+ "validation"
+ ],
+ "license": "http://keith-wood.name/licence.html",
+ "authors": [
+ "Keith Wood"
+ ],
+ "main": "jquery.calendars.js",
+ "ignore": [
+ "*.gif",
+ "*.html",
+ "*.json",
+ "*.md",
+ "*.png",
+ "jquery.calendars-*.js",
+ "jquery.calendars.picker-*.js",
+ "jquery.*.min.js"
+ ],
+ "dependencies": {
+ "jquery": ">=1.7"
+ }
+}
\ No newline at end of file
diff --git a/jquery-src/calendar-blue.gif b/jquery-src/calendar-blue.gif
new file mode 100755
index 0000000..601cbd5
Binary files /dev/null and b/jquery-src/calendar-blue.gif differ
diff --git a/jquery-src/calendar-green.gif b/jquery-src/calendar-green.gif
new file mode 100755
index 0000000..9dae1a3
Binary files /dev/null and b/jquery-src/calendar-green.gif differ
diff --git a/jquery-src/calendar.gif b/jquery-src/calendar.gif
new file mode 100755
index 0000000..d0abaa7
Binary files /dev/null and b/jquery-src/calendar.gif differ
diff --git a/jquery-src/calendarsBasic.html b/jquery-src/calendarsBasic.html
new file mode 100755
index 0000000..16df4c4
--- /dev/null
+++ b/jquery-src/calendarsBasic.html
@@ -0,0 +1,69 @@
+
+
+
+
+jQuery Calendars
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
jQuery Calendars
+
This page demonstrates the very basics of the
+ jQuery Calendars plugin.
+ It contains the minimum requirements for using the plugin and
+ can be used as the basis for your own experimentation.
This page demonstrates the very basics of the
+ jQuery Calendars Datepicker plugin.
+ It contains the minimum requirements for using the plugin and
+ can be used as the basis for your own experimentation.
Provides support for various world calendars in a consistent manner.
+ @class Calendars
+ @example $.calendars.instance('julian').newDate(2014, 12, 25) */
+ $.extend(Calendars.prototype, {
+
+ /** Obtain a calendar implementation and localisation.
+ @memberof Calendars
+ @param [name='gregorian'] {string} The name of the calendar, e.g. 'gregorian', 'persian', 'islamic'.
+ @param [language=''] {string} The language code to use for localisation (default is English).
+ @return {Calendar} The calendar and localisation.
+ @throws Error if calendar not found. */
+ instance: function(name, language) {
+ name = (name || 'gregorian').toLowerCase();
+ language = language || '';
+ var cal = this._localCals[name + '-' + language];
+ if (!cal && this.calendars[name]) {
+ cal = new this.calendars[name](language);
+ this._localCals[name + '-' + language] = cal;
+ }
+ if (!cal) {
+ throw (this.local.invalidCalendar || this.regionalOptions[''].invalidCalendar).
+ replace(/\{0\}/, name);
+ }
+ return cal;
+ },
+
+ /** Create a new date - for today if no other parameters given.
+ @memberof Calendars
+ @param year {CDate|number} The date to copy or the year for the date.
+ @param [month] {number} The month for the date.
+ @param [day] {number} The day for the date.
+ @param [calendar='gregorian'] {BaseCalendar|string} The underlying calendar or the name of the calendar.
+ @param [language=''] {string} The language to use for localisation (default English).
+ @return {CDate} The new date.
+ @throws Error if an invalid date. */
+ newDate: function(year, month, day, calendar, language) {
+ calendar = (year != null && year.year ? year.calendar() : (typeof calendar === 'string' ?
+ this.instance(calendar, language) : calendar)) || this.instance();
+ return calendar.newDate(year, month, day);
+ },
+
+ /** A simple digit substitution function for localising numbers via the Calendar digits option.
+ @member Calendars
+ @param digits {string[]} The substitute digits, for 0 through 9.
+ @return {function} The substitution function. */
+ substituteDigits: function(digits) {
+ return function(value) {
+ return (value + '').replace(/[0-9]/g, function(digit) {
+ return digits[digit];
+ });
+ }
+ },
+
+ /** Digit substitution function for localising Chinese style numbers via the Calendar digits option.
+ @member Calendars
+ @param digits {string[]} The substitute digits, for 0 through 9.
+ @param powers {string[]} The characters denoting powers of 10, i.e. 1, 10, 100, 1000.
+ @return {function} The substitution function. */
+ substituteChineseDigits: function(digits, powers) {
+ return function(value) {
+ var localNumber = '';
+ var power = 0;
+ while (value > 0) {
+ var units = value % 10;
+ localNumber = (units === 0 ? '' : digits[units] + powers[power]) + localNumber;
+ power++;
+ value = Math.floor(value / 10);
+ }
+ if (localNumber.indexOf(digits[1] + powers[1]) === 0) {
+ localNumber = localNumber.substr(1);
+ }
+ return localNumber || digits[0];
+ }
+ }
+ });
+
+ /** Generic date, based on a particular calendar.
+ @class CDate
+ @param calendar {BaseCalendar} The underlying calendar implementation.
+ @param year {number} The year for this date.
+ @param month {number} The month for this date.
+ @param day {number} The day for this date.
+ @return {CDate} The date object.
+ @throws Error if an invalid date. */
+ function CDate(calendar, year, month, day) {
+ this._calendar = calendar;
+ this._year = year;
+ this._month = month;
+ this._day = day;
+ if (this._calendar._validateLevel === 0 &&
+ !this._calendar.isValid(this._year, this._month, this._day)) {
+ throw ($.calendars.local.invalidDate || $.calendars.regionalOptions[''].invalidDate).
+ replace(/\{0\}/, this._calendar.local.name);
+ }
+ }
+
+ /** Pad a numeric value with leading zeroes.
+ @private
+ @param value {number} The number to format.
+ @param length {number} The minimum length.
+ @return {string} The formatted number. */
+ function pad(value, length) {
+ value = '' + value;
+ return '000000'.substring(0, length - value.length) + value;
+ }
+
+ $.extend(CDate.prototype, {
+
+ /** Create a new date.
+ @memberof CDate
+ @param [year] {CDate|number} The date to copy or the year for the date (default this date).
+ @param [month] {number} The month for the date.
+ @param [day] {number} The day for the date.
+ @return {CDate} The new date.
+ @throws Error if an invalid date. */
+ newDate: function(year, month, day) {
+ return this._calendar.newDate((year == null ? this : year), month, day);
+ },
+
+ /** Set or retrieve the year for this date.
+ @memberof CDate
+ @param [year] {number} The year for the date.
+ @return {number|CDate} The date's year (if no parameter) or the updated date.
+ @throws Error if an invalid date. */
+ year: function(year) {
+ return (arguments.length === 0 ? this._year : this.set(year, 'y'));
+ },
+
+ /** Set or retrieve the month for this date.
+ @memberof CDate
+ @param [month] {number} The month for the date.
+ @return {number|CDate} The date's month (if no parameter) or the updated date.
+ @throws Error if an invalid date. */
+ month: function(month) {
+ return (arguments.length === 0 ? this._month : this.set(month, 'm'));
+ },
+
+ /** Set or retrieve the day for this date.
+ @memberof CDate
+ @param [day] {number} The day for the date.
+ @return {number|CData} The date's day (if no parameter) or the updated date.
+ @throws Error if an invalid date. */
+ day: function(day) {
+ return (arguments.length === 0 ? this._day : this.set(day, 'd'));
+ },
+
+ /** Set new values for this date.
+ @memberof CDate
+ @param year {number} The year for the date.
+ @param month {number} The month for the date.
+ @param day {number} The day for the date.
+ @return {CDate} The updated date.
+ @throws Error if an invalid date. */
+ date: function(year, month, day) {
+ if (!this._calendar.isValid(year, month, day)) {
+ throw ($.calendars.local.invalidDate || $.calendars.regionalOptions[''].invalidDate).
+ replace(/\{0\}/, this._calendar.local.name);
+ }
+ this._year = year;
+ this._month = month;
+ this._day = day;
+ return this;
+ },
+
+ /** Determine whether this date is in a leap year.
+ @memberof CDate
+ @return {boolean} true if this is a leap year, false if not. */
+ leapYear: function() {
+ return this._calendar.leapYear(this);
+ },
+
+ /** Retrieve the epoch designator for this date, e.g. BCE or CE.
+ @memberof CDate
+ @return {string} The current epoch. */
+ epoch: function() {
+ return this._calendar.epoch(this);
+ },
+
+ /** Format the year, if not a simple sequential number.
+ @memberof CDate
+ @return {string} The formatted year. */
+ formatYear: function() {
+ return this._calendar.formatYear(this);
+ },
+
+ /** Retrieve the month of the year for this date,
+ i.e. the month's position within a numbered year.
+ @memberof CDate
+ @return {number} The month of the year: minMonth to months per year. */
+ monthOfYear: function() {
+ return this._calendar.monthOfYear(this);
+ },
+
+ /** Retrieve the week of the year for this date.
+ @memberof CDate
+ @return {number} The week of the year: 1 to weeks per year. */
+ weekOfYear: function() {
+ return this._calendar.weekOfYear(this);
+ },
+
+ /** Retrieve the number of days in the year for this date.
+ @memberof CDate
+ @return {number} The number of days in this year. */
+ daysInYear: function() {
+ return this._calendar.daysInYear(this);
+ },
+
+ /** Retrieve the day of the year for this date.
+ @memberof CDate
+ @return {number} The day of the year: 1 to days per year. */
+ dayOfYear: function() {
+ return this._calendar.dayOfYear(this);
+ },
+
+ /** Retrieve the number of days in the month for this date.
+ @memberof CDate
+ @return {number} The number of days. */
+ daysInMonth: function() {
+ return this._calendar.daysInMonth(this);
+ },
+
+ /** Retrieve the day of the week for this date.
+ @memberof CDate
+ @return {number} The day of the week: 0 to number of days - 1. */
+ dayOfWeek: function() {
+ return this._calendar.dayOfWeek(this);
+ },
+
+ /** Determine whether this date is a week day.
+ @memberof CDate
+ @return {boolean} true if a week day, false if not. */
+ weekDay: function() {
+ return this._calendar.weekDay(this);
+ },
+
+ /** Retrieve additional information about this date.
+ @memberof CDate
+ @return {object} Additional information - contents depends on calendar. */
+ extraInfo: function() {
+ return this._calendar.extraInfo(this);
+ },
+
+ /** Add period(s) to a date.
+ @memberof CDate
+ @param offset {number} The number of periods to adjust by.
+ @param period {string} One of 'y' for year, 'm' for month, 'w' for week, 'd' for day.
+ @return {CDate} The updated date. */
+ add: function(offset, period) {
+ return this._calendar.add(this, offset, period);
+ },
+
+ /** Set a portion of the date.
+ @memberof CDate
+ @param value {number} The new value for the period.
+ @param period {string} One of 'y' for year, 'm' for month, 'd' for day.
+ @return {CDate} The updated date.
+ @throws Error if not a valid date. */
+ set: function(value, period) {
+ return this._calendar.set(this, value, period);
+ },
+
+ /** Compare this date to another date.
+ @memberof CDate
+ @param date {CDate} The other date.
+ @return {number} -1 if this date is before the other date,
+ 0 if they are equal, or +1 if this date is after the other date. */
+ compareTo: function(date) {
+ if (this._calendar.name !== date._calendar.name) {
+ throw ($.calendars.local.differentCalendars || $.calendars.regionalOptions[''].differentCalendars).
+ replace(/\{0\}/, this._calendar.local.name).replace(/\{1\}/, date._calendar.local.name);
+ }
+ var c = (this._year !== date._year ? this._year - date._year :
+ this._month !== date._month ? this.monthOfYear() - date.monthOfYear() :
+ this._day - date._day);
+ return (c === 0 ? 0 : (c < 0 ? -1 : +1));
+ },
+
+ /** Retrieve the calendar backing this date.
+ @memberof CDate
+ @return {BaseCalendar} The calendar implementation. */
+ calendar: function() {
+ return this._calendar;
+ },
+
+ /** Retrieve the Julian date equivalent for this date,
+ i.e. days since January 1, 4713 BCE Greenwich noon.
+ @memberof CDate
+ @return {number} The equivalent Julian date. */
+ toJD: function() {
+ return this._calendar.toJD(this);
+ },
+
+ /** Create a new date from a Julian date.
+ @memberof CDate
+ @param jd {number} The Julian date to convert.
+ @return {CDate} The equivalent date. */
+ fromJD: function(jd) {
+ return this._calendar.fromJD(jd);
+ },
+
+ /** Convert this date to a standard (Gregorian) JavaScript Date.
+ @memberof CDate
+ @return {Date} The equivalent JavaScript date. */
+ toJSDate: function() {
+ return this._calendar.toJSDate(this);
+ },
+
+ /** Create a new date from a standard (Gregorian) JavaScript Date.
+ @memberof CDate
+ @param jsd {Date} The JavaScript date to convert.
+ @return {CDate} The equivalent date. */
+ fromJSDate: function(jsd) {
+ return this._calendar.fromJSDate(jsd);
+ },
+
+ /** Convert to a string for display.
+ @memberof CDate
+ @return {string} This date as a string. */
+ toString: function() {
+ return (this.year() < 0 ? '-' : '') + pad(Math.abs(this.year()), 4) +
+ '-' + pad(this.month(), 2) + '-' + pad(this.day(), 2);
+ }
+ });
+
+ /** Basic functionality for all calendars.
+ Other calendars should extend this:
+
OtherCalendar.prototype = new BaseCalendar;
+ @class BaseCalendar */
+ function BaseCalendar() {
+ this.shortYearCutoff = '+10';
+ }
+
+ $.extend(BaseCalendar.prototype, {
+ _validateLevel: 0, // "Stack" to turn validation on/off
+
+ /** Create a new date within this calendar - today if no parameters given.
+ @memberof BaseCalendar
+ @param year {CDate|number} The date to duplicate or the year for the date.
+ @param [month] {number} The month for the date.
+ @param [day] {number} The day for the date.
+ @return {CDate} The new date.
+ @throws Error if not a valid date or a different calendar used. */
+ newDate: function(year, month, day) {
+ if (year == null) {
+ return this.today();
+ }
+ if (year.year) {
+ this._validate(year, month, day,
+ $.calendars.local.invalidDate || $.calendars.regionalOptions[''].invalidDate);
+ day = year.day();
+ month = year.month();
+ year = year.year();
+ }
+ return new CDate(this, year, month, day);
+ },
+
+ /** Create a new date for today.
+ @memberof BaseCalendar
+ @return {CDate} Today's date. */
+ today: function() {
+ return this.fromJSDate(new Date());
+ },
+
+ /** Retrieve the epoch designator for this date.
+ @memberof BaseCalendar
+ @param year {CDate|number} The date to examine or the year to examine.
+ @return {string} The current epoch.
+ @throws Error if an invalid year or a different calendar used. */
+ epoch: function(year) {
+ var date = this._validate(year, this.minMonth, this.minDay,
+ $.calendars.local.invalidYear || $.calendars.regionalOptions[''].invalidYear);
+ return (date.year() < 0 ? this.local.epochs[0] : this.local.epochs[1]);
+ },
+
+ /** Format the year, if not a simple sequential number
+ @memberof BaseCalendar
+ @param year {CDate|number} The date to format or the year to format.
+ @return {string} The formatted year.
+ @throws Error if an invalid year or a different calendar used. */
+ formatYear: function(year) {
+ var date = this._validate(year, this.minMonth, this.minDay,
+ $.calendars.local.invalidYear || $.calendars.regionalOptions[''].invalidYear);
+ return (date.year() < 0 ? '-' : '') + pad(Math.abs(date.year()), 4)
+ },
+
+ /** Retrieve the number of months in a year.
+ @memberof BaseCalendar
+ @param year {CDate|number} The date to examine or the year to examine.
+ @return {number} The number of months.
+ @throws Error if an invalid year or a different calendar used. */
+ monthsInYear: function(year) {
+ this._validate(year, this.minMonth, this.minDay,
+ $.calendars.local.invalidYear || $.calendars.regionalOptions[''].invalidYear);
+ return 12;
+ },
+
+ /** Calculate the month's ordinal position within the year -
+ for those calendars that don't start at month 1!
+ @memberof BaseCalendar
+ @param year {CDate|number} The date to examine or the year to examine.
+ @param month {number} The month to examine.
+ @return {number} The ordinal position, starting from minMonth.
+ @throws Error if an invalid year/month or a different calendar used. */
+ monthOfYear: function(year, month) {
+ var date = this._validate(year, month, this.minDay,
+ $.calendars.local.invalidMonth || $.calendars.regionalOptions[''].invalidMonth);
+ return (date.month() + this.monthsInYear(date) - this.firstMonth) %
+ this.monthsInYear(date) + this.minMonth;
+ },
+
+ /** Calculate actual month from ordinal position, starting from minMonth.
+ @memberof BaseCalendar
+ @param year {number} The year to examine.
+ @param ord {number} The month's ordinal position.
+ @return {number} The month's number.
+ @throws Error if an invalid year/month. */
+ fromMonthOfYear: function(year, ord) {
+ var m = (ord + this.firstMonth - 2 * this.minMonth) %
+ this.monthsInYear(year) + this.minMonth;
+ this._validate(year, m, this.minDay,
+ $.calendars.local.invalidMonth || $.calendars.regionalOptions[''].invalidMonth);
+ return m;
+ },
+
+ /** Retrieve the number of days in a year.
+ @memberof BaseCalendar
+ @param year {CDate|number} The date to examine or the year to examine.
+ @return {number} The number of days.
+ @throws Error if an invalid year or a different calendar used. */
+ daysInYear: function(year) {
+ var date = this._validate(year, this.minMonth, this.minDay,
+ $.calendars.local.invalidYear || $.calendars.regionalOptions[''].invalidYear);
+ return (this.leapYear(date) ? 366 : 365);
+ },
+
+ /** Retrieve the day of the year for a date.
+ @memberof BaseCalendar
+ @param year {CDate|number} The date to convert or the year to convert.
+ @param [month] {number} The month to convert.
+ @param [day] {number} The day to convert.
+ @return {number} The day of the year.
+ @throws Error if an invalid date or a different calendar used. */
+ dayOfYear: function(year, month, day) {
+ var date = this._validate(year, month, day,
+ $.calendars.local.invalidDate || $.calendars.regionalOptions[''].invalidDate);
+ return date.toJD() - this.newDate(date.year(),
+ this.fromMonthOfYear(date.year(), this.minMonth), this.minDay).toJD() + 1;
+ },
+
+ /** Retrieve the number of days in a week.
+ @memberof BaseCalendar
+ @return {number} The number of days. */
+ daysInWeek: function() {
+ return 7;
+ },
+
+ /** Retrieve the day of the week for a date.
+ @memberof BaseCalendar
+ @param year {CDate|number} The date to examine or the year to examine.
+ @param [month] {number} The month to examine.
+ @param [day] {number} The day to examine.
+ @return {number} The day of the week: 0 to number of days - 1.
+ @throws Error if an invalid date or a different calendar used. */
+ dayOfWeek: function(year, month, day) {
+ var date = this._validate(year, month, day,
+ $.calendars.local.invalidDate || $.calendars.regionalOptions[''].invalidDate);
+ return (Math.floor(this.toJD(date)) + 2) % this.daysInWeek();
+ },
+
+ /** Retrieve additional information about a date.
+ @memberof BaseCalendar
+ @param year {CDate|number} The date to examine or the year to examine.
+ @param [month] {number} The month to examine.
+ @param [day] {number} The day to examine.
+ @return {object} Additional information - contents depends on calendar.
+ @throws Error if an invalid date or a different calendar used. */
+ extraInfo: function(year, month, day) {
+ this._validate(year, month, day,
+ $.calendars.local.invalidDate || $.calendars.regionalOptions[''].invalidDate);
+ return {};
+ },
+
+ /** Add period(s) to a date.
+ Cater for no year zero.
+ @memberof BaseCalendar
+ @param date {CDate} The starting date.
+ @param offset {number} The number of periods to adjust by.
+ @param period {string} One of 'y' for year, 'm' for month, 'w' for week, 'd' for day.
+ @return {CDate} The updated date.
+ @throws Error if a different calendar used. */
+ add: function(date, offset, period) {
+ this._validate(date, this.minMonth, this.minDay,
+ $.calendars.local.invalidDate || $.calendars.regionalOptions[''].invalidDate);
+ return this._correctAdd(date, this._add(date, offset, period), offset, period);
+ },
+
+ /** Add period(s) to a date.
+ @memberof BaseCalendar
+ @private
+ @param date {CDate} The starting date.
+ @param offset {number} The number of periods to adjust by.
+ @param period {string} One of 'y' for year, 'm' for month, 'w' for week, 'd' for day.
+ @return {CDate} The updated date. */
+ _add: function(date, offset, period) {
+ this._validateLevel++;
+ if (period === 'd' || period === 'w') {
+ var jd = date.toJD() + offset * (period === 'w' ? this.daysInWeek() : 1);
+ var d = date.calendar().fromJD(jd);
+ this._validateLevel--;
+ return [d.year(), d.month(), d.day()];
+ }
+ try {
+ var y = date.year() + (period === 'y' ? offset : 0);
+ var m = date.monthOfYear() + (period === 'm' ? offset : 0);
+ var d = date.day();// + (period === 'd' ? offset : 0) +
+ //(period === 'w' ? offset * this.daysInWeek() : 0);
+ var resyncYearMonth = function(calendar) {
+ while (m < calendar.minMonth) {
+ y--;
+ m += calendar.monthsInYear(y);
+ }
+ var yearMonths = calendar.monthsInYear(y);
+ while (m > yearMonths - 1 + calendar.minMonth) {
+ y++;
+ m -= yearMonths;
+ yearMonths = calendar.monthsInYear(y);
+ }
+ };
+ if (period === 'y') {
+ if (date.month() !== this.fromMonthOfYear(y, m)) { // Hebrew
+ m = this.newDate(y, date.month(), this.minDay).monthOfYear();
+ }
+ m = Math.min(m, this.monthsInYear(y));
+ d = Math.min(d, this.daysInMonth(y, this.fromMonthOfYear(y, m)));
+ }
+ else if (period === 'm') {
+ resyncYearMonth(this);
+ d = Math.min(d, this.daysInMonth(y, this.fromMonthOfYear(y, m)));
+ }
+ var ymd = [y, this.fromMonthOfYear(y, m), d];
+ this._validateLevel--;
+ return ymd;
+ }
+ catch (e) {
+ this._validateLevel--;
+ throw e;
+ }
+ },
+
+ /** Correct a candidate date after adding period(s) to a date.
+ Handle no year zero if necessary.
+ @memberof BaseCalendar
+ @private
+ @param date {CDate} The starting date.
+ @param ymd {number[]} The added date.
+ @param offset {number} The number of periods to adjust by.
+ @param period {string} One of 'y' for year, 'm' for month, 'w' for week, 'd' for day.
+ @return {CDate} The updated date. */
+ _correctAdd: function(date, ymd, offset, period) {
+ if (!this.hasYearZero && (period === 'y' || period === 'm')) {
+ if (ymd[0] === 0 || // In year zero
+ (date.year() > 0) !== (ymd[0] > 0)) { // Crossed year zero
+ var adj = {y: [1, 1, 'y'], m: [1, this.monthsInYear(-1), 'm'],
+ w: [this.daysInWeek(), this.daysInYear(-1), 'd'],
+ d: [1, this.daysInYear(-1), 'd']}[period];
+ var dir = (offset < 0 ? -1 : +1);
+ ymd = this._add(date, offset * adj[0] + dir * adj[1], adj[2]);
+ }
+ }
+ return date.date(ymd[0], ymd[1], ymd[2]);
+ },
+
+ /** Set a portion of the date.
+ @memberof BaseCalendar
+ @param date {CDate} The starting date.
+ @param value {number} The new value for the period.
+ @param period {string} One of 'y' for year, 'm' for month, 'd' for day.
+ @return {CDate} The updated date.
+ @throws Error if an invalid date or a different calendar used. */
+ set: function(date, value, period) {
+ this._validate(date, this.minMonth, this.minDay,
+ $.calendars.local.invalidDate || $.calendars.regionalOptions[''].invalidDate);
+ var y = (period === 'y' ? value : date.year());
+ var m = (period === 'm' ? value : date.month());
+ var d = (period === 'd' ? value : date.day());
+ if (period === 'y' || period === 'm') {
+ d = Math.min(d, this.daysInMonth(y, m));
+ }
+ return date.date(y, m, d);
+ },
+
+ /** Determine whether a date is valid for this calendar.
+ @memberof BaseCalendar
+ @param year {number} The year to examine.
+ @param month {number} The month to examine.
+ @param day {number} The day to examine.
+ @return {boolean} true if a valid date, false if not. */
+ isValid: function(year, month, day) {
+ this._validateLevel++;
+ var valid = (this.hasYearZero || year !== 0);
+ if (valid) {
+ var date = this.newDate(year, month, this.minDay);
+ valid = (month >= this.minMonth && month - this.minMonth < this.monthsInYear(date)) &&
+ (day >= this.minDay && day - this.minDay < this.daysInMonth(date));
+ }
+ this._validateLevel--;
+ return valid;
+ },
+
+ /** Convert the date to a standard (Gregorian) JavaScript Date.
+ @memberof BaseCalendar
+ @param year {CDate|number} The date to convert or the year to convert.
+ @param [month] {number} The month to convert.
+ @param [day] {number} The day to convert.
+ @return {Date} The equivalent JavaScript date.
+ @throws Error if an invalid date or a different calendar used. */
+ toJSDate: function(year, month, day) {
+ var date = this._validate(year, month, day,
+ $.calendars.local.invalidDate || $.calendars.regionalOptions[''].invalidDate);
+ return $.calendars.instance().fromJD(this.toJD(date)).toJSDate();
+ },
+
+ /** Convert the date from a standard (Gregorian) JavaScript Date.
+ @memberof BaseCalendar
+ @param jsd {Date} The JavaScript date.
+ @return {CDate} The equivalent calendar date. */
+ fromJSDate: function(jsd) {
+ return this.fromJD($.calendars.instance().fromJSDate(jsd).toJD());
+ },
+
+ /** Check that a candidate date is from the same calendar and is valid.
+ @memberof BaseCalendar
+ @private
+ @param year {CDate|number} The date to validate or the year to validate.
+ @param [month] {number} The month to validate.
+ @param [day] {number} The day to validate.
+ @param error {string} Rrror message if invalid.
+ @throws Error if different calendars used or invalid date. */
+ _validate: function(year, month, day, error) {
+ if (year.year) {
+ if (this._validateLevel === 0 && this.name !== year.calendar().name) {
+ throw ($.calendars.local.differentCalendars || $.calendars.regionalOptions[''].differentCalendars).
+ replace(/\{0\}/, this.local.name).replace(/\{1\}/, year.calendar().local.name);
+ }
+ return year;
+ }
+ try {
+ this._validateLevel++;
+ if (this._validateLevel === 1 && !this.isValid(year, month, day)) {
+ throw error.replace(/\{0\}/, this.local.name);
+ }
+ var date = this.newDate(year, month, day);
+ this._validateLevel--;
+ return date;
+ }
+ catch (e) {
+ this._validateLevel--;
+ throw e;
+ }
+ }
+ });
+
+ /** Implementation of the Proleptic Gregorian Calendar.
+ See http://en.wikipedia.org/wiki/Gregorian_calendar
+ and http://en.wikipedia.org/wiki/Proleptic_Gregorian_calendar.
+ @class GregorianCalendar
+ @augments BaseCalendar
+ @param [language=''] {string} The language code (default English) for localisation. */
+ function GregorianCalendar(language) {
+ this.local = this.regionalOptions[language] || this.regionalOptions[''];
+ }
+
+ GregorianCalendar.prototype = new BaseCalendar;
+
+ $.extend(GregorianCalendar.prototype, {
+ /** The calendar name.
+ @memberof GregorianCalendar */
+ name: 'Gregorian',
+ /** Julian date of start of Gregorian epoch: 1 January 0001 CE.
+ @memberof GregorianCalendar */
+ jdEpoch: 1721425.5,
+ /** Days per month in a common year.
+ @memberof GregorianCalendar */
+ daysPerMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],
+ /** true if has a year zero, false if not.
+ @memberof GregorianCalendar */
+ hasYearZero: false,
+ /** The minimum month number.
+ @memberof GregorianCalendar */
+ minMonth: 1,
+ /** The first month in the year.
+ @memberof GregorianCalendar */
+ firstMonth: 1,
+ /** The minimum day number.
+ @memberof GregorianCalendar */
+ minDay: 1,
+
+ /** Localisations for the plugin.
+ Entries are objects indexed by the language code ('' being the default US/English).
+ Each object has the following attributes.
+ @memberof GregorianCalendar
+ @property name {string} The calendar name.
+ @property epochs {string[]} The epoch names.
+ @property monthNames {string[]} The long names of the months of the year.
+ @property monthNamesShort {string[]} The short names of the months of the year.
+ @property dayNames {string[]} The long names of the days of the week.
+ @property dayNamesShort {string[]} The short names of the days of the week.
+ @property dayNamesMin {string[]} The minimal names of the days of the week.
+ @property dateFormat {string} The date format for this calendar.
+ See the options on formatDate for details.
+ @property firstDay {number} The number of the first day of the week, starting at 0.
+ @property isRTL {number} true if this localisation reads right-to-left. */
+ regionalOptions: { // Localisations
+ '': {
+ name: 'Gregorian',
+ epochs: ['BCE', 'CE'],
+ monthNames: ['January', 'February', 'March', 'April', 'May', 'June',
+ 'July', 'August', 'September', 'October', 'November', 'December'],
+ monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
+ dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
+ dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
+ dayNamesMin: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],
+ digits: null,
+ dateFormat: 'mm/dd/yyyy',
+ firstDay: 0,
+ isRTL: false
+ }
+ },
+
+ /** Determine whether this date is in a leap year.
+ @memberof GregorianCalendar
+ @param year {CDate|number} The date to examine or the year to examine.
+ @return {boolean} true if this is a leap year, false if not.
+ @throws Error if an invalid year or a different calendar used. */
+ leapYear: function(year) {
+ var date = this._validate(year, this.minMonth, this.minDay,
+ $.calendars.local.invalidYear || $.calendars.regionalOptions[''].invalidYear);
+ var year = date.year() + (date.year() < 0 ? 1 : 0); // No year zero
+ return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);
+ },
+
+ /** Determine the week of the year for a date - ISO 8601.
+ @memberof GregorianCalendar
+ @param year {CDate|number} The date to examine or the year to examine.
+ @param [month] {number} The month to examine.
+ @param [day] {number} The day to examine.
+ @return {number} The week of the year, starting from 1.
+ @throws Error if an invalid date or a different calendar used. */
+ weekOfYear: function(year, month, day) {
+ // Find Thursday of this week starting on Monday
+ var checkDate = this.newDate(year, month, day);
+ checkDate.add(4 - (checkDate.dayOfWeek() || 7), 'd');
+ return Math.floor((checkDate.dayOfYear() - 1) / 7) + 1;
+ },
+
+ /** Retrieve the number of days in a month.
+ @memberof GregorianCalendar
+ @param year {CDate|number} The date to examine or the year of the month.
+ @param [month] {number} The month.
+ @return {number} The number of days in this month.
+ @throws Error if an invalid month/year or a different calendar used. */
+ daysInMonth: function(year, month) {
+ var date = this._validate(year, month, this.minDay,
+ $.calendars.local.invalidMonth || $.calendars.regionalOptions[''].invalidMonth);
+ return this.daysPerMonth[date.month() - 1] +
+ (date.month() === 2 && this.leapYear(date.year()) ? 1 : 0);
+ },
+
+ /** Determine whether this date is a week day.
+ @memberof GregorianCalendar
+ @param year {CDate|number} The date to examine or the year to examine.
+ @param [month] {number} The month to examine.
+ @param [day] {number} The day to examine.
+ @return {boolean} true if a week day, false if not.
+ @throws Error if an invalid date or a different calendar used. */
+ weekDay: function(year, month, day) {
+ return (this.dayOfWeek(year, month, day) || 7) < 6;
+ },
+
+ /** Retrieve the Julian date equivalent for this date,
+ i.e. days since January 1, 4713 BCE Greenwich noon.
+ @memberof GregorianCalendar
+ @param year {CDate|number} The date to convert or the year to convert.
+ @param [month] {number} The month to convert.
+ @param [day] {number} The day to convert.
+ @return {number} The equivalent Julian date.
+ @throws Error if an invalid date or a different calendar used. */
+ toJD: function(year, month, day) {
+ var date = this._validate(year, month, day,
+ $.calendars.local.invalidDate || $.calendars.regionalOptions[''].invalidDate);
+ year = date.year();
+ month = date.month();
+ day = date.day();
+ if (year < 0) { year++; } // No year zero
+ // Jean Meeus algorithm, "Astronomical Algorithms", 1991
+ if (month < 3) {
+ month += 12;
+ year--;
+ }
+ var a = Math.floor(year / 100);
+ var b = 2 - a + Math.floor(a / 4);
+ return Math.floor(365.25 * (year + 4716)) +
+ Math.floor(30.6001 * (month + 1)) + day + b - 1524.5;
+ },
+
+ /** Create a new date from a Julian date.
+ @memberof GregorianCalendar
+ @param jd {number} The Julian date to convert.
+ @return {CDate} The equivalent date. */
+ fromJD: function(jd) {
+ // Jean Meeus algorithm, "Astronomical Algorithms", 1991
+ var z = Math.floor(jd + 0.5);
+ var a = Math.floor((z - 1867216.25) / 36524.25);
+ a = z + 1 + a - Math.floor(a / 4);
+ var b = a + 1524;
+ var c = Math.floor((b - 122.1) / 365.25);
+ var d = Math.floor(365.25 * c);
+ var e = Math.floor((b - d) / 30.6001);
+ var day = b - d - Math.floor(e * 30.6001);
+ var month = e - (e > 13.5 ? 13 : 1);
+ var year = c - (month > 2.5 ? 4716 : 4715);
+ if (year <= 0) { year--; } // No year zero
+ return this.newDate(year, month, day);
+ },
+
+ /** Convert this date to a standard (Gregorian) JavaScript Date.
+ @memberof GregorianCalendar
+ @param year {CDate|number} The date to convert or the year to convert.
+ @param [month] {number} The month to convert.
+ @param [day] {number} The day to convert.
+ @return {Date} The equivalent JavaScript date.
+ @throws Error if an invalid date or a different calendar used. */
+ toJSDate: function(year, month, day) {
+ var date = this._validate(year, month, day,
+ $.calendars.local.invalidDate || $.calendars.regionalOptions[''].invalidDate);
+ var jsd = new Date(date.year(), date.month() - 1, date.day());
+ jsd.setHours(0);
+ jsd.setMinutes(0);
+ jsd.setSeconds(0);
+ jsd.setMilliseconds(0);
+ // Hours may be non-zero on daylight saving cut-over:
+ // > 12 when midnight changeover, but then cannot generate
+ // midnight datetime, so jump to 1AM, otherwise reset.
+ jsd.setHours(jsd.getHours() > 12 ? jsd.getHours() + 2 : 0);
+ return jsd;
+ },
+
+ /** Create a new date from a standard (Gregorian) JavaScript Date.
+ @memberof GregorianCalendar
+ @param jsd {Date} The JavaScript date to convert.
+ @return {CDate} The equivalent date. */
+ fromJSDate: function(jsd) {
+ return this.newDate(jsd.getFullYear(), jsd.getMonth() + 1, jsd.getDate());
+ }
+ });
+
+ // Singleton manager
+ $.calendars = new Calendars();
+
+ // Date template
+ $.calendars.cdate = CDate;
+
+ // Base calendar template
+ $.calendars.baseCalendar = BaseCalendar;
+
+ // Gregorian calendar implementation
+ $.calendars.calendars.gregorian = GregorianCalendar;
+
+})(jQuery);
+/* http://keith-wood.name/calendars.html
+ Calendars extras for jQuery v2.0.2.
+ Written by Keith Wood (wood.keith{at}optusnet.com.au) August 2009.
+ Available under the MIT (http://keith-wood.name/licence.html) license.
+ Please attribute the author if you use it. */
+
+(function($) { // Hide scope, no $ conflict
+
+ $.extend($.calendars.regionalOptions[''], {
+ invalidArguments: 'Invalid arguments',
+ invalidFormat: 'Cannot format a date from another calendar',
+ missingNumberAt: 'Missing number at position {0}',
+ unknownNameAt: 'Unknown name at position {0}',
+ unexpectedLiteralAt: 'Unexpected literal at position {0}',
+ unexpectedText: 'Additional text found at end'
+ });
+ $.calendars.local = $.calendars.regionalOptions[''];
+
+ $.extend($.calendars.cdate.prototype, {
+
+ /** Format this date.
+ Found in the jquery.calendars.plus.js module.
+ @memberof CDate
+ @param [format] {string} The date format to use (see formatDate).
+ @param [settings] {object} Options for the formatDate function.
+ @return {string} The formatted date. */
+ formatDate: function(format, settings) {
+ if (typeof format !== 'string') {
+ settings = format;
+ format = '';
+ }
+ return this._calendar.formatDate(format || '', this, settings);
+ }
+ });
+
+ $.extend($.calendars.baseCalendar.prototype, {
+
+ UNIX_EPOCH: $.calendars.instance().newDate(1970, 1, 1).toJD(),
+ SECS_PER_DAY: 24 * 60 * 60,
+ TICKS_EPOCH: $.calendars.instance().jdEpoch, // 1 January 0001 CE
+ TICKS_PER_DAY: 24 * 60 * 60 * 10000000,
+
+ /** Date form for ATOM (RFC 3339/ISO 8601).
+ Found in the jquery.calendars.plus.js module.
+ @memberof BaseCalendar */
+ ATOM: 'yyyy-mm-dd',
+ /** Date form for cookies.
+ Found in the jquery.calendars.plus.js module.
+ @memberof BaseCalendar */
+ COOKIE: 'D, dd M yyyy',
+ /** Date form for full date.
+ Found in the jquery.calendars.plus.js module.
+ @memberof BaseCalendar */
+ FULL: 'DD, MM d, yyyy',
+ /** Date form for ISO 8601.
+ Found in the jquery.calendars.plus.js module.
+ @memberof BaseCalendar */
+ ISO_8601: 'yyyy-mm-dd',
+ /** Date form for Julian date.
+ Found in the jquery.calendars.plus.js module.
+ @memberof BaseCalendar */
+ JULIAN: 'J',
+ /** Date form for RFC 822.
+ Found in the jquery.calendars.plus.js module.
+ @memberof BaseCalendar */
+ RFC_822: 'D, d M yy',
+ /** Date form for RFC 850.
+ Found in the jquery.calendars.plus.js module.
+ @memberof BaseCalendar */
+ RFC_850: 'DD, dd-M-yy',
+ /** Date form for RFC 1036.
+ Found in the jquery.calendars.plus.js module.
+ @memberof BaseCalendar */
+ RFC_1036: 'D, d M yy',
+ /** Date form for RFC 1123.
+ Found in the jquery.calendars.plus.js module.
+ @memberof BaseCalendar */
+ RFC_1123: 'D, d M yyyy',
+ /** Date form for RFC 2822.
+ Found in the jquery.calendars.plus.js module.
+ @memberof BaseCalendar */
+ RFC_2822: 'D, d M yyyy',
+ /** Date form for RSS (RFC 822).
+ Found in the jquery.calendars.plus.js module.
+ @memberof BaseCalendar */
+ RSS: 'D, d M yy',
+ /** Date form for Windows ticks.
+ Found in the jquery.calendars.plus.js module.
+ @memberof BaseCalendar */
+ TICKS: '!',
+ /** Date form for Unix timestamp.
+ Found in the jquery.calendars.plus.js module.
+ @memberof BaseCalendar */
+ TIMESTAMP: '@',
+ /** Date form for W3c (ISO 8601).
+ Found in the jquery.calendars.plus.js module.
+ @memberof BaseCalendar */
+ W3C: 'yyyy-mm-dd',
+
+ /** Format a date object into a string value.
+ The format can be combinations of the following:
+
+
d - day of month (no leading zero)
+
dd - day of month (two digit)
+
o - day of year (no leading zeros)
+
oo - day of year (three digit)
+
D - day name short
+
DD - day name long
+
w - week of year (no leading zero)
+
ww - week of year (two digit)
+
m - month of year (no leading zero)
+
mm - month of year (two digit)
+
M - month name short
+
MM - month name long
+
yy - year (two digit)
+
yyyy - year (four digit)
+
YYYY - formatted year
+
J - Julian date (days since January 1, 4713 BCE Greenwich noon)
+
@ - Unix timestamp (s since 01/01/1970)
+
! - Windows ticks (100ns since 01/01/0001)
+
'...' - literal text
+
'' - single quote
+
+ Found in the jquery.calendars.plus.js module.
+ @memberof BaseCalendar
+ @param [format] {string} The desired format of the date (defaults to calendar format).
+ @param date {CDate} The date value to format.
+ @param [settings] {object} Addition options, whose attributes include:
+ @property [dayNamesShort] {string[]} Abbreviated names of the days from Sunday.
+ @property [dayNames] {string[]} Names of the days from Sunday.
+ @property [monthNamesShort] {string[]} Abbreviated names of the months.
+ @property [monthNames] {string[]} Names of the months.
+ @property [calculateWeek] {CalendarsPickerCalculateWeek} Function that determines week of the year.
+ @property [localNumbers=false] {boolean} true to localise numbers (if available),
+ false to use normal Arabic numerals.
+ @return {string} The date in the above format.
+ @throws Errors if the date is from a different calendar. */
+ formatDate: function(format, date, settings) {
+ if (typeof format !== 'string') {
+ settings = date;
+ date = format;
+ format = '';
+ }
+ if (!date) {
+ return '';
+ }
+ if (date.calendar() !== this) {
+ throw $.calendars.local.invalidFormat || $.calendars.regionalOptions[''].invalidFormat;
+ }
+ format = format || this.local.dateFormat;
+ settings = settings || {};
+ var dayNamesShort = settings.dayNamesShort || this.local.dayNamesShort;
+ var dayNames = settings.dayNames || this.local.dayNames;
+ var monthNamesShort = settings.monthNamesShort || this.local.monthNamesShort;
+ var monthNames = settings.monthNames || this.local.monthNames;
+ var calculateWeek = settings.calculateWeek || this.local.calculateWeek;
+ // Check whether a format character is doubled
+ var doubled = function(match, step) {
+ var matches = 1;
+ while (iFormat + matches < format.length && format.charAt(iFormat + matches) === match) {
+ matches++;
+ }
+ iFormat += matches - 1;
+ return Math.floor(matches / (step || 1)) > 1;
+ };
+ // Format a number, with leading zeroes if necessary
+ var formatNumber = function(match, value, len, step) {
+ var num = '' + value;
+ if (doubled(match, step)) {
+ while (num.length < len) {
+ num = '0' + num;
+ }
+ }
+ return num;
+ };
+ // Format a name, short or long as requested
+ var formatName = function(match, value, shortNames, longNames) {
+ return (doubled(match) ? longNames[value] : shortNames[value]);
+ };
+ // Localise numbers if requested and available
+ var digits = this.local.digits;
+ var localiseNumbers = function(value) {
+ return (settings.localNumbers && digits ? digits(value) : value);
+ };
+ var output = '';
+ var literal = false;
+ for (var iFormat = 0; iFormat < format.length; iFormat++) {
+ if (literal) {
+ if (format.charAt(iFormat) === "'" && !doubled("'")) {
+ literal = false;
+ }
+ else {
+ output += format.charAt(iFormat);
+ }
+ }
+ else {
+ switch (format.charAt(iFormat)) {
+ case 'd': output += localiseNumbers(formatNumber('d', date.day(), 2)); break;
+ case 'D': output += formatName('D', date.dayOfWeek(),
+ dayNamesShort, dayNames); break;
+ case 'o': output += formatNumber('o', date.dayOfYear(), 3); break;
+ case 'w': output += formatNumber('w', date.weekOfYear(), 2); break;
+ case 'm': output += localiseNumbers(formatNumber('m', date.month(), 2)); break;
+ case 'M': output += formatName('M', date.month() - this.minMonth,
+ monthNamesShort, monthNames); break;
+ case 'y':
+ output += (doubled('y', 2) ? date.year() :
+ (date.year() % 100 < 10 ? '0' : '') + date.year() % 100);
+ break;
+ case 'Y':
+ doubled('Y', 2);
+ output += date.formatYear();
+ break;
+ case 'J': output += date.toJD(); break;
+ case '@': output += (date.toJD() - this.UNIX_EPOCH) * this.SECS_PER_DAY; break;
+ case '!': output += (date.toJD() - this.TICKS_EPOCH) * this.TICKS_PER_DAY; break;
+ case "'":
+ if (doubled("'")) {
+ output += "'";
+ }
+ else {
+ literal = true;
+ }
+ break;
+ default:
+ output += format.charAt(iFormat);
+ }
+ }
+ }
+ return output;
+ },
+
+ /** Parse a string value into a date object.
+ See formatDate for the possible formats, plus:
+
+
* - ignore rest of string
+
+ Found in the jquery.calendars.plus.js module.
+ @memberof BaseCalendar
+ @param format {string} The expected format of the date ('' for default calendar format).
+ @param value {string} The date in the above format.
+ @param [settings] {object} Additional options whose attributes include:
+ @property [shortYearCutoff] {number} The cutoff year for determining the century.
+ @property [dayNamesShort] {string[]} Abbreviated names of the days from Sunday.
+ @property [dayNames] {string[]} Names of the days from Sunday.
+ @property [monthNamesShort] {string[]} Abbreviated names of the months.
+ @property [monthNames] {string[]} Names of the months.
+ @return {CDate} The extracted date value or null if value is blank.
+ @throws Errors if the format and/or value are missing,
+ if the value doesn't match the format, or if the date is invalid. */
+ parseDate: function(format, value, settings) {
+ if (value == null) {
+ throw $.calendars.local.invalidArguments || $.calendars.regionalOptions[''].invalidArguments;
+ }
+ value = (typeof value === 'object' ? value.toString() : value + '');
+ if (value === '') {
+ return null;
+ }
+ format = format || this.local.dateFormat;
+ settings = settings || {};
+ var shortYearCutoff = settings.shortYearCutoff || this.shortYearCutoff;
+ shortYearCutoff = (typeof shortYearCutoff !== 'string' ? shortYearCutoff :
+ this.today().year() % 100 + parseInt(shortYearCutoff, 10));
+ var dayNamesShort = settings.dayNamesShort || this.local.dayNamesShort;
+ var dayNames = settings.dayNames || this.local.dayNames;
+ var monthNamesShort = settings.monthNamesShort || this.local.monthNamesShort;
+ var monthNames = settings.monthNames || this.local.monthNames;
+ var jd = -1;
+ var year = -1;
+ var month = -1;
+ var day = -1;
+ var doy = -1;
+ var shortYear = false;
+ var literal = false;
+ // Check whether a format character is doubled
+ var doubled = function(match, step) {
+ var matches = 1;
+ while (iFormat + matches < format.length && format.charAt(iFormat + matches) === match) {
+ matches++;
+ }
+ iFormat += matches - 1;
+ return Math.floor(matches / (step || 1)) > 1;
+ };
+ // Extract a number from the string value
+ var getNumber = function(match, step) {
+ var isDoubled = doubled(match, step);
+ var size = [2, 3, isDoubled ? 4 : 2, isDoubled ? 4 : 2, 10, 11, 20]['oyYJ@!'.indexOf(match) + 1];
+ var digits = new RegExp('^-?\\d{1,' + size + '}');
+ var num = value.substring(iValue).match(digits);
+ if (!num) {
+ throw ($.calendars.local.missingNumberAt || $.calendars.regionalOptions[''].missingNumberAt).
+ replace(/\{0\}/, iValue);
+ }
+ iValue += num[0].length;
+ return parseInt(num[0], 10);
+ };
+ // Extract a name from the string value and convert to an index
+ var calendar = this;
+ var getName = function(match, shortNames, longNames, step) {
+ var names = (doubled(match, step) ? longNames : shortNames);
+ for (var i = 0; i < names.length; i++) {
+ if (value.substr(iValue, names[i].length).toLowerCase() === names[i].toLowerCase()) {
+ iValue += names[i].length;
+ return i + calendar.minMonth;
+ }
+ }
+ throw ($.calendars.local.unknownNameAt || $.calendars.regionalOptions[''].unknownNameAt).
+ replace(/\{0\}/, iValue);
+ };
+ // Confirm that a literal character matches the string value
+ var checkLiteral = function() {
+ if (value.charAt(iValue) !== format.charAt(iFormat)) {
+ throw ($.calendars.local.unexpectedLiteralAt ||
+ $.calendars.regionalOptions[''].unexpectedLiteralAt).replace(/\{0\}/, iValue);
+ }
+ iValue++;
+ };
+ var iValue = 0;
+ for (var iFormat = 0; iFormat < format.length; iFormat++) {
+ if (literal) {
+ if (format.charAt(iFormat) === "'" && !doubled("'")) {
+ literal = false;
+ }
+ else {
+ checkLiteral();
+ }
+ }
+ else {
+ switch (format.charAt(iFormat)) {
+ case 'd': day = getNumber('d'); break;
+ case 'D': getName('D', dayNamesShort, dayNames); break;
+ case 'o': doy = getNumber('o'); break;
+ case 'w': getNumber('w'); break;
+ case 'm': month = getNumber('m'); break;
+ case 'M': month = getName('M', monthNamesShort, monthNames); break;
+ case 'y':
+ var iSave = iFormat;
+ shortYear = !doubled('y', 2);
+ iFormat = iSave;
+ year = getNumber('y', 2);
+ break;
+ case 'Y': year = getNumber('Y', 2); break;
+ case 'J':
+ jd = getNumber('J') + 0.5;
+ if (value.charAt(iValue) === '.') {
+ iValue++;
+ getNumber('J');
+ }
+ break;
+ case '@': jd = getNumber('@') / this.SECS_PER_DAY + this.UNIX_EPOCH; break;
+ case '!': jd = getNumber('!') / this.TICKS_PER_DAY + this.TICKS_EPOCH; break;
+ case '*': iValue = value.length; break;
+ case "'":
+ if (doubled("'")) {
+ checkLiteral();
+ }
+ else {
+ literal = true;
+ }
+ break;
+ default: checkLiteral();
+ }
+ }
+ }
+ if (iValue < value.length) {
+ throw $.calendars.local.unexpectedText || $.calendars.regionalOptions[''].unexpectedText;
+ }
+ if (year === -1) {
+ year = this.today().year();
+ }
+ else if (year < 100 && shortYear) {
+ year += (shortYearCutoff === -1 ? 1900 : this.today().year() -
+ this.today().year() % 100 - (year <= shortYearCutoff ? 0 : 100));
+ }
+ if (doy > -1) {
+ month = 1;
+ day = doy;
+ for (var dim = this.daysInMonth(year, month); day > dim; dim = this.daysInMonth(year, month)) {
+ month++;
+ day -= dim;
+ }
+ }
+ return (jd > -1 ? this.fromJD(jd) : this.newDate(year, month, day));
+ },
+
+ /** A date may be specified as an exact value or a relative one.
+ Found in the jquery.calendars.plus.js module.
+ @memberof BaseCalendar
+ @param dateSpec {CDate|number|string} The date as an object or string in the given format or
+ an offset - numeric days from today, or string amounts and periods, e.g. '+1m +2w'.
+ @param defaultDate {CDate} The date to use if no other supplied, may be null.
+ @param currentDate {CDate} The current date as a possible basis for relative dates,
+ if null today is used (optional)
+ @param [dateFormat] {string} The expected date format - see formatDate.
+ @param [settings] {object} Additional options whose attributes include:
+ @property [shortYearCutoff] {number} The cutoff year for determining the century.
+ @property [dayNamesShort] {string[]} Abbreviated names of the days from Sunday.
+ @property [dayNames] {string[]} Names of the days from Sunday.
+ @property [monthNamesShort] {string[]} Abbreviated names of the months.
+ @property [monthNames] {string[]} Names of the months.
+ @return {CDate} The decoded date. */
+ determineDate: function(dateSpec, defaultDate, currentDate, dateFormat, settings) {
+ if (currentDate && typeof currentDate !== 'object') {
+ settings = dateFormat;
+ dateFormat = currentDate;
+ currentDate = null;
+ }
+ if (typeof dateFormat !== 'string') {
+ settings = dateFormat;
+ dateFormat = '';
+ }
+ var calendar = this;
+ var offsetString = function(offset) {
+ try {
+ return calendar.parseDate(dateFormat, offset, settings);
+ }
+ catch (e) {
+ // Ignore
+ }
+ offset = offset.toLowerCase();
+ var date = (offset.match(/^c/) && currentDate ?
+ currentDate.newDate() : null) || calendar.today();
+ var pattern = /([+-]?[0-9]+)\s*(d|w|m|y)?/g;
+ var matches = pattern.exec(offset);
+ while (matches) {
+ date.add(parseInt(matches[1], 10), matches[2] || 'd');
+ matches = pattern.exec(offset);
+ }
+ return date;
+ };
+ defaultDate = (defaultDate ? defaultDate.newDate() : null);
+ dateSpec = (dateSpec == null ? defaultDate :
+ (typeof dateSpec === 'string' ? offsetString(dateSpec) : (typeof dateSpec === 'number' ?
+ (isNaN(dateSpec) || dateSpec === Infinity || dateSpec === -Infinity ? defaultDate :
+ calendar.today().add(dateSpec, 'd')) : calendar.newDate(dateSpec))));
+ return dateSpec;
+ }
+ });
+
+})(jQuery);
+/* http://keith-wood.name/calendars.html
+ Calendars date picker for jQuery v2.0.2.
+ Written by Keith Wood (wood.keith{at}optusnet.com.au) August 2009.
+ Available under the MIT (http://keith-wood.name/licence.html) license.
+ Please attribute the author if you use it. */
+
+(function($) { // Hide scope, no $ conflict
+
+ var pluginName = 'calendarsPicker';
+
+
+ /** Create the calendars datepicker plugin.
+
Sets an input field to popup a calendar for date entry,
+ or a div or span to show an inline calendar.
+ @class CalendarsPicker
+ @augments JQPlugin
+ @example $(selector).calendarsPicker()
+ $(selector).calendarsPicker({minDate: 0, maxDate: '+1m +1w'}) */
+ $.JQPlugin.createPlugin({
+
+ /** The name of the plugin.
+ @memberof CalendarsPicker */
+ name: pluginName,
+
+ /** Default template for generating a datepicker.
+ Insert anywhere:
+
+
'{l10n:name}' to insert localised value for name,
+
'{link:name}' to insert a link trigger for command name,
+
'{button:name}' to insert a button trigger for command name,
+
'{popup:start}...{popup:end}' to mark a section for inclusion in a popup datepicker only,
+
'{inline:start}...{inline:end}' to mark a section for inclusion in an inline datepicker only.
+
+ @memberof CalendarsPicker
+ @property picker {string} Overall structure: '{months}' to insert calendar months.
+ @property monthRow {string} One row of months: '{months}' to insert calendar months.
+ @property month {string} A single month: '{monthHeader:dateFormat}' to insert the month header -
+ dateFormat is optional and defaults to 'MM yyyy',
+ '{weekHeader}' to insert a week header, '{weeks}' to insert the month's weeks.
+ @property weekHeader {string} A week header: '{days}' to insert individual day names.
+ @property dayHeader {string} Individual day header: '{day}' to insert day name.
+ @property week {string} One week of the month: '{days}' to insert the week's days,
+ '{weekOfYear}' to insert week of year.
+ @property day {string} An individual day: '{day}' to insert day value.
+ @property monthSelector {string} jQuery selector, relative to picker, for a single month.
+ @property daySelector {string} jQuery selector, relative to picker, for individual days.
+ @property rtlClass {string} Class for right-to-left (RTL) languages.
+ @property multiClass {string} Class for multi-month datepickers.
+ @property defaultClass {string} Class for selectable dates.
+ @property selectedClass {string} Class for currently selected dates.
+ @property highlightedClass {string} Class for highlighted dates.
+ @property todayClass {string} Class for today.
+ @property otherMonthClass {string} Class for days from other months.
+ @property weekendClass {string} Class for days on weekends.
+ @property commandClass {string} Class prefix for commands.
+ @property commandButtonClass {string} Extra class(es) for commands that are buttons.
+ @property commandLinkClass {string} Extra class(es) for commands that are links.
+ @property disabledClass {string} Class for disabled commands. */
+ defaultRenderer: {
+ picker: '
' +
+ '
{link:prev}{link:today}{link:next}
{months}' +
+ '{popup:start}
{link:clear}{link:close}
{popup:end}' +
+ '
',
+ monthRow: '
{months}
',
+ month: '
{monthHeader}
' +
+ '
{weekHeader}{weeks}
',
+ weekHeader: '
{days}
',
+ dayHeader: '
{day}
',
+ week: '
{days}
',
+ day: '
{day}
',
+ monthSelector: '.calendars-month',
+ daySelector: 'td',
+ rtlClass: 'calendars-rtl',
+ multiClass: 'calendars-multi',
+ defaultClass: '',
+ selectedClass: 'calendars-selected',
+ highlightedClass: 'calendars-highlight',
+ todayClass: 'calendars-today',
+ otherMonthClass: 'calendars-other-month',
+ weekendClass: 'calendars-weekend',
+ commandClass: 'calendars-cmd',
+ commandButtonClass: '',
+ commandLinkClass: '',
+ disabledClass: 'calendars-disabled'
+ },
+
+ /** Command actions that may be added to a layout by name.
+
+
prev - Show the previous month (based on monthsToStep option) - PageUp
+
prevJump - Show the previous year (based on monthsToJump option) - Ctrl+PageUp
+
next - Show the next month (based on monthsToStep option) - PageDown
+
nextJump - Show the next year (based on monthsToJump option) - Ctrl+PageDown
+
current - Show the currently selected month or today's if none selected - Ctrl+Home
+
today - Show today's month - Ctrl+Home
+
clear - Erase the date and close the datepicker popup - Ctrl+End
+
close - Close the datepicker popup - Esc
+
prevWeek - Move the cursor to the previous week - Ctrl+Up
+
prevDay - Move the cursor to the previous day - Ctrl+Left
+
nextDay - Move the cursor to the next day - Ctrl+Right
+
nextWeek - Move the cursor to the next week - Ctrl+Down
+
+ The command name is the key name and is used to add the command to a layout
+ with '{button:name}' or '{link:name}'. Each has the following attributes.
+ @memberof CalendarsPicker
+ @property text {string} The field in the regional settings for the displayed text.
+ @property status {string} The field in the regional settings for the status text.
+ @property keystroke {object} The keystroke to trigger the action, with attributes:
+ keyCode {number} the code for the keystroke,
+ ctrlKey {boolean} true if Ctrl is required,
+ altKey {boolean} true if Alt is required,
+ shiftKey {boolean} true if Shift is required.
+ @property enabled {CalendarsPickerCommandEnabled} The function that indicates the command is enabled.
+ @property date {CalendarsPickerCommandDate} The function to get the date associated with this action.
+ @property action {CalendarsPickerCommandAction} The function that implements the action. */
+ commands: {
+ prev: {text: 'prevText', status: 'prevStatus', // Previous month
+ keystroke: {keyCode: 33}, // Page up
+ enabled: function(inst) {
+ var minDate = inst.curMinDate();
+ return (!minDate || inst.drawDate.newDate().
+ add(1 - inst.options.monthsToStep - inst.options.monthsOffset, 'm').
+ day(inst.options.calendar.minDay).add(-1, 'd').compareTo(minDate) !== -1); },
+ date: function(inst) {
+ return inst.drawDate.newDate().
+ add(-inst.options.monthsToStep - inst.options.monthsOffset, 'm').
+ day(inst.options.calendar.minDay); },
+ action: function(inst) {
+ plugin.changeMonth(this, -inst.options.monthsToStep); }
+ },
+ prevJump: {text: 'prevJumpText', status: 'prevJumpStatus', // Previous year
+ keystroke: {keyCode: 33, ctrlKey: true}, // Ctrl + Page up
+ enabled: function(inst) {
+ var minDate = inst.curMinDate();
+ return (!minDate || inst.drawDate.newDate().
+ add(1 - inst.options.monthsToJump - inst.options.monthsOffset, 'm').
+ day(inst.options.calendar.minDay).add(-1, 'd').compareTo(minDate) !== -1); },
+ date: function(inst) {
+ return inst.drawDate.newDate().
+ add(-inst.options.monthsToJump - inst.options.monthsOffset, 'm').
+ day(inst.options.calendar.minDay); },
+ action: function(inst) {
+ plugin.changeMonth(this, -inst.options.monthsToJump); }
+ },
+ next: {text: 'nextText', status: 'nextStatus', // Next month
+ keystroke: {keyCode: 34}, // Page down
+ enabled: function(inst) {
+ var maxDate = inst.get('maxDate');
+ return (!maxDate || inst.drawDate.newDate().
+ add(inst.options.monthsToStep - inst.options.monthsOffset, 'm').
+ day(inst.options.calendar.minDay).compareTo(maxDate) !== +1); },
+ date: function(inst) {
+ return inst.drawDate.newDate().
+ add(inst.options.monthsToStep - inst.options.monthsOffset, 'm').
+ day(inst.options.calendar.minDay); },
+ action: function(inst) {
+ plugin.changeMonth(this, inst.options.monthsToStep); }
+ },
+ nextJump: {text: 'nextJumpText', status: 'nextJumpStatus', // Next year
+ keystroke: {keyCode: 34, ctrlKey: true}, // Ctrl + Page down
+ enabled: function(inst) {
+ var maxDate = inst.get('maxDate');
+ return (!maxDate || inst.drawDate.newDate().
+ add(inst.options.monthsToJump - inst.options.monthsOffset, 'm').
+ day(inst.options.calendar.minDay).compareTo(maxDate) !== +1); },
+ date: function(inst) {
+ return inst.drawDate.newDate().
+ add(inst.options.monthsToJump - inst.options.monthsOffset, 'm').
+ day(inst.options.calendar.minDay); },
+ action: function(inst) {
+ plugin.changeMonth(this, inst.options.monthsToJump); }
+ },
+ current: {text: 'currentText', status: 'currentStatus', // Current month
+ keystroke: {keyCode: 36, ctrlKey: true}, // Ctrl + Home
+ enabled: function(inst) {
+ var minDate = inst.curMinDate();
+ var maxDate = inst.get('maxDate');
+ var curDate = inst.selectedDates[0] || inst.options.calendar.today();
+ return (!minDate || curDate.compareTo(minDate) !== -1) &&
+ (!maxDate || curDate.compareTo(maxDate) !== +1); },
+ date: function(inst) {
+ return inst.selectedDates[0] || inst.options.calendar.today(); },
+ action: function(inst) {
+ var curDate = inst.selectedDates[0] || inst.options.calendar.today();
+ plugin.showMonth(this, curDate.year(), curDate.month()); }
+ },
+ today: {text: 'todayText', status: 'todayStatus', // Today's month
+ keystroke: {keyCode: 36, ctrlKey: true}, // Ctrl + Home
+ enabled: function(inst) {
+ var minDate = inst.curMinDate();
+ var maxDate = inst.get('maxDate');
+ return (!minDate || inst.options.calendar.today().compareTo(minDate) !== -1) &&
+ (!maxDate || inst.options.calendar.today().compareTo(maxDate) !== +1); },
+ date: function(inst) { return inst.options.calendar.today(); },
+ action: function(inst) { plugin.showMonth(this); }
+ },
+ clear: {text: 'clearText', status: 'clearStatus', // Clear the datepicker
+ keystroke: {keyCode: 35, ctrlKey: true}, // Ctrl + End
+ enabled: function(inst) { return true; },
+ date: function(inst) { return null; },
+ action: function(inst) { plugin.clear(this); }
+ },
+ close: {text: 'closeText', status: 'closeStatus', // Close the datepicker
+ keystroke: {keyCode: 27}, // Escape
+ enabled: function(inst) { return true; },
+ date: function(inst) { return null; },
+ action: function(inst) { plugin.hide(this); }
+ },
+ prevWeek: {text: 'prevWeekText', status: 'prevWeekStatus', // Previous week
+ keystroke: {keyCode: 38, ctrlKey: true}, // Ctrl + Up
+ enabled: function(inst) {
+ var minDate = inst.curMinDate();
+ return (!minDate || inst.drawDate.newDate().
+ add(-inst.options.calendar.daysInWeek(), 'd').compareTo(minDate) !== -1); },
+ date: function(inst) { return inst.drawDate.newDate().
+ add(-inst.options.calendar.daysInWeek(), 'd'); },
+ action: function(inst) { plugin.changeDay(this, -inst.options.calendar.daysInWeek()); }
+ },
+ prevDay: {text: 'prevDayText', status: 'prevDayStatus', // Previous day
+ keystroke: {keyCode: 37, ctrlKey: true}, // Ctrl + Left
+ enabled: function(inst) {
+ var minDate = inst.curMinDate();
+ return (!minDate || inst.drawDate.newDate().add(-1, 'd').
+ compareTo(minDate) !== -1); },
+ date: function(inst) { return inst.drawDate.newDate().add(-1, 'd'); },
+ action: function(inst) { plugin.changeDay(this, -1); }
+ },
+ nextDay: {text: 'nextDayText', status: 'nextDayStatus', // Next day
+ keystroke: {keyCode: 39, ctrlKey: true}, // Ctrl + Right
+ enabled: function(inst) {
+ var maxDate = inst.get('maxDate');
+ return (!maxDate || inst.drawDate.newDate().add(1, 'd').
+ compareTo(maxDate) !== +1); },
+ date: function(inst) { return inst.drawDate.newDate().add(1, 'd'); },
+ action: function(inst) { plugin.changeDay(this, 1); }
+ },
+ nextWeek: {text: 'nextWeekText', status: 'nextWeekStatus', // Next week
+ keystroke: {keyCode: 40, ctrlKey: true}, // Ctrl + Down
+ enabled: function(inst) {
+ var maxDate = inst.get('maxDate');
+ return (!maxDate || inst.drawDate.newDate().
+ add(inst.options.calendar.daysInWeek(), 'd').compareTo(maxDate) !== +1); },
+ date: function(inst) { return inst.drawDate.newDate().
+ add(inst.options.calendar.daysInWeek(), 'd'); },
+ action: function(inst) { plugin.changeDay(this, inst.options.calendar.daysInWeek()); }
+ }
+ },
+
+ /** Determine whether a command is enabled.
+ @callback CalendarsPickerCommandEnabled
+ @param inst {object} The current instance settings.
+ @return {boolean} true if this command is enabled, false if not.
+ @example enabled: function(inst) {
+ return !!inst.curMinDate();
+ } */
+
+ /** Calculate the representative date for a command.
+ @callback CalendarsPickerCommandDate
+ @param inst {object} The current instance settings.
+ @return {CDate} A date appropriate for this command.
+ @example date: function(inst) {
+ return inst.curMinDate();
+ } */
+
+ /** Perform the action for a command.
+ @callback CalendarsPickerCommandAction
+ @param inst {object} The current instance settings.
+ @example date: function(inst) {
+ $.datepick.setDate(inst.elem, inst.curMinDate());
+ } */
+
+ /** Calculate the week of the year for a date.
+ @callback CalendarsPickerCalculateWeek
+ @param date {CDate} The date to evaluate.
+ @return {number} The week of the year.
+ @example calculateWeek: function(date) {
+ var startYear = $.calendars.newDate(date.year(), 1, 1);
+ return Math.floor((date.dayOfYear() - startYear.dayOfYear()) / 7) + 1;
+ } */
+
+ /** Provide information about an individual date shown in the calendar.
+ @callback CalendarsPickerOnDate
+ @param date {CDate} The date to evaluate.
+ @return {object} Information about that date, with the properties above.
+ @property selectable {boolean} true if this date can be selected.
+ @property dateClass {string} Class(es) to be applied to the date.
+ @property content {string} The date cell content.
+ @property tooltip {string} A popup tooltip for the date.
+ @example onDate: function(date) {
+ return {selectable: date.day() > 0 && date.day() < 5,
+ dateClass: date.day() === 4 ? 'last-day' : ''};
+ } */
+
+ /** Update the datepicker display.
+ @callback CalendarsPickerOnShow
+ @param picker {jQuery} The datepicker div to be shown.
+ @param inst {object} The current instance settings.
+ @example onShow: function(picker, inst) {
+ picker.append('<button type="button">Hi</button>').
+ find('button:last').click(function() {
+ alert('Hi!');
+ });
+ } */
+
+ /** React to navigating through the months/years.
+ @callback CalendarsPickerOnChangeMonthYear
+ @param year {number} The new year.
+ @param month {number} The new month (1 to 12).
+ @example onChangeMonthYear: function(year, month) {
+ alert('Now in ' + month + '/' + year);
+ } */
+
+ /** Datepicker on select callback.
+ Triggered when a date is selected.
+ @callback CalendarsPickerOnSelect
+ @param dates {CDate[]} The selected date(s).
+ @example onSelect: function(dates) {
+ alert('Selected ' + dates);
+ } */
+
+ /** Datepicker on close callback.
+ Triggered when a popup calendar is closed.
+ @callback CalendarsPickerOnClose
+ @param dates {CDate[]} The selected date(s).
+ @example onClose: function(dates) {
+ alert('Selected ' + dates);
+ } */
+
+ /** Default settings for the plugin.
+ @memberof CalendarsPicker
+ @property [calendar=$.calendars.instance()] {Calendar} The calendar for this datepicker.
+ @property [pickerClass=''] {string} CSS class to add to this instance of the datepicker.
+ @property [showOnFocus=true] {boolean} true for popup on focus, false for not.
+ @property [showTrigger=null] {string|Element|jQuery} Element to be cloned for a trigger, null for none.
+ @property [showAnim='show'] {string} Name of jQuery animation for popup, '' for no animation.
+ @property [showOptions=null] {object} Options for enhanced animations.
+ @property [showSpeed='normal'] {string} Duration of display/closure.
+ @property [popupContainer=null] {string|Element|jQuery} The element to which a popup calendar is added, null for body.
+ @property [alignment='bottom'] {string} Alignment of popup - with nominated corner of input:
+ 'top' or 'bottom' aligns depending on language direction,
+ 'topLeft', 'topRight', 'bottomLeft', 'bottomRight'.
+ @property [fixedWeeks=false] {boolean} true to always show 6 weeks, false to only show as many as are needed.
+ @property [firstDay=null] {number} First day of the week, 0 = Sunday, 1 = Monday, etc., null for calendar default.
+ @property [calculateWeek=null] {CalendarsPickerCalculateWeek} Calculate week of the year from a date, null for calendar default.
+ @property [localNumbers=false] {boolean} true to localise numbers (if available),
+ false to use normal Arabic numerals.
+ @property [monthsToShow=1] {number|number[]} How many months to show, cols or [rows, cols].
+ @property [monthsOffset=0] {number} How many months to offset the primary month by;
+ may be a function that takes the date and returns the offset.
+ @property [monthsToStep=1] {number} How many months to move when prev/next clicked.
+ @property [monthsToJump=12] {number} How many months to move when large prev/next clicked.
+ @property [useMouseWheel=true] {boolean} true to use mousewheel if available, false to never use it.
+ @property [changeMonth=true] {boolean} true to change month/year via drop-down, false for navigation only.
+ @property [yearRange='c-10:c+10'] {string} Range of years to show in drop-down: 'any' for direct text entry
+ or 'start:end', where start/end are '+-nn' for relative to today
+ or 'c+-nn' for relative to the currently selected date
+ or 'nnnn' for an absolute year.
+ @property [showOtherMonths=false] {boolean} true to show dates from other months, false to not show them.
+ @property [selectOtherMonths=false] {boolean} true to allow selection of dates from other months too.
+ @property [defaultDate=null] {string|number|CDate} Date to show if no other selected.
+ @property [selectDefaultDate=false] {boolean} true to pre-select the default date if no other is chosen.
+ @property [minDate=null] {string|number|CDate} The minimum selectable date.
+ @property [maxDate=null] {string|number|CDate} The maximum selectable date.
+ @property [dateFormat='mm/dd/yyyy'] {string} Format for dates.
+ @property [autoSize=false] {boolean} true to size the input field according to the date format.
+ @property [rangeSelect=false] {boolean} Allows for selecting a date range on one date picker.
+ @property [rangeSeparator=' - '] {string} Text between two dates in a range.
+ @property [multiSelect=0] {number} Maximum number of selectable dates, zero for single select.
+ @property [multiSeparator=','] {string} Text between multiple dates.
+ @property [onDate=null] {CalendarsPickerOnDate} Callback as a date is added to the datepicker.
+ @property [onShow=null] {CalendarsPickerOnShow} Callback just before a datepicker is shown.
+ @property [onChangeMonthYear=null] {CalendarsPickerOnChangeMonthYear} Callback when a new month/year is selected.
+ @property [onSelect=null] {CalendarsPickerOnSelect} Callback when a date is selected.
+ @property [onClose=null] {CalendarsPickerOnClose} Callback when a datepicker is closed.
+ @property [altField=null] {string|Element|jQuery} Alternate field to update in synch with the datepicker.
+ @property [altFormat=null] {string} Date format for alternate field, defaults to dateFormat.
+ @property [constrainInput=true] {boolean} true to constrain typed input to dateFormat allowed characters.
+ @property [commandsAsDateFormat=false] {boolean} true to apply
+ formatDate to the command texts.
+ @property [commands=this.commands] {object} Command actions that may be added to a layout by name. */
+ defaultOptions: {
+ calendar: $.calendars.instance(),
+ pickerClass: '',
+ showOnFocus: true,
+ showTrigger: null,
+ showAnim: 'show',
+ showOptions: {},
+ showSpeed: 'normal',
+ popupContainer: null,
+ alignment: 'bottom',
+ fixedWeeks: false,
+ firstDay: null,
+ calculateWeek: null,
+ localNumbers: false,
+ monthsToShow: 1,
+ monthsOffset: 0,
+ monthsToStep: 1,
+ monthsToJump: 12,
+ useMouseWheel: true,
+ changeMonth: true,
+ yearRange: 'c-10:c+10',
+ showOtherMonths: false,
+ selectOtherMonths: false,
+ defaultDate: null,
+ selectDefaultDate: false,
+ minDate: null,
+ maxDate: null,
+ dateFormat: null,
+ autoSize: false,
+ rangeSelect: false,
+ rangeSeparator: ' - ',
+ multiSelect: 0,
+ multiSeparator: ',',
+ onDate: null,
+ onShow: null,
+ onChangeMonthYear: null,
+ onSelect: null,
+ onClose: null,
+ altField: null,
+ altFormat: null,
+ constrainInput: true,
+ commandsAsDateFormat: false,
+ commands: {} // this.commands
+ },
+
+ /** Localisations for the plugin.
+ Entries are objects indexed by the language code ('' being the default US/English).
+ Each object has the following attributes.
+ @memberof CalendarsPicker
+ @property [renderer=this.defaultRenderer] {string} The rendering templates.
+ @property [prevText='<Prev'] {string} Text for the previous month command.
+ @property [prevStatus='Show the previous month'] {string} Status text for the previous month command.
+ @property [prevJumpText='<<'] {string} Text for the previous year command.
+ @property [prevJumpStatus='Show the previous year'] {string} Status text for the previous year command.
+ @property [nextText='Next>'] {string} Text for the next month command.
+ @property [nextStatus='Show the next month'] {string} Status text for the next month command.
+ @property [nextJumpText='>>'] {string} Text for the next year command.
+ @property [nextJumpStatus='Show the next year'] {string} Status text for the next year command.
+ @property [currentText='Current'] {string} Text for the current month command.
+ @property [currentStatus='Show the current month'] {string} Status text for the current month command.
+ @property [todayText='Today'] {string} Text for the today's month command.
+ @property [todayStatus='Show today\'s month'] {string} Status text for the today's month command.
+ @property [clearText='Clear'] {string} Text for the clear command.
+ @property [clearStatus='Clear all the dates'] {string} Status text for the clear command.
+ @property [closeText='Close'] {string} Text for the close command.
+ @property [closeStatus='Close the datepicker'] {string} Status text for the close command.
+ @property [yearStatus='Change the year'] {string} Status text for year selection.
+ @property [earlierText=' ▲'] {string} Text for earlier years.
+ @property [laterText=' ▼'] {string} Text for later years.
+ @property [monthStatus='Change the month'] {string} Status text for month selection.
+ @property [weekText='Wk'] {string} Text for week of the year column header.
+ @property [weekStatus='Week of the year'] {string} Status text for week of the year column header.
+ @property [dayStatus='Select DD, M d, yyyy'] {string} Status text for selectable days.
+ @property [defaultStatus='Select a date'] {string} Status text shown by default.
+ @property [isRTL=false] {boolean} true if language is right-to-left. */
+ regionalOptions: { // Available regional settings, indexed by language/country code
+ '': { // Default regional settings - English/US
+ renderer: {}, // this.defaultRenderer
+ prevText: '<Prev',
+ prevStatus: 'Show the previous month',
+ prevJumpText: '<<',
+ prevJumpStatus: 'Show the previous year',
+ nextText: 'Next>',
+ nextStatus: 'Show the next month',
+ nextJumpText: '>>',
+ nextJumpStatus: 'Show the next year',
+ currentText: 'Current',
+ currentStatus: 'Show the current month',
+ todayText: 'Today',
+ todayStatus: 'Show today\'s month',
+ clearText: 'Clear',
+ clearStatus: 'Clear all the dates',
+ closeText: 'Close',
+ closeStatus: 'Close the datepicker',
+ yearStatus: 'Change the year',
+ earlierText: ' ▲',
+ laterText: ' ▼',
+ monthStatus: 'Change the month',
+ weekText: 'Wk',
+ weekStatus: 'Week of the year',
+ dayStatus: 'Select DD, M d, yyyy',
+ defaultStatus: 'Select a date',
+ isRTL: false
+ }
+ },
+
+ /** Names of getter methods - those that can't be chained.
+ @memberof CalendarsPicker */
+ _getters: ['getDate', 'isDisabled', 'isSelectable', 'retrieveDate'],
+
+ _disabled: [],
+
+ _popupClass: 'calendars-popup', // Marker for popup division
+ _triggerClass: 'calendars-trigger', // Marker for trigger element
+ _disableClass: 'calendars-disable', // Marker for disabled element
+ _monthYearClass: 'calendars-month-year', // Marker for month/year inputs
+ _curMonthClass: 'calendars-month-', // Marker for current month/year
+ _anyYearClass: 'calendars-any-year', // Marker for year direct input
+ _curDoWClass: 'calendars-dow-', // Marker for day of week
+
+ _init: function() {
+ this.defaultOptions.commands = this.commands;
+ this.regionalOptions[''].renderer = this.defaultRenderer;
+ this._super();
+ },
+
+ _instSettings: function(elem, options) {
+ return {selectedDates: [], drawDate: null, pickingRange: false,
+ inline: ($.inArray(elem[0].nodeName.toLowerCase(), ['div', 'span']) > -1),
+ get: function(name) { // Get a setting value, computing if necessary
+ if ($.inArray(name, ['defaultDate', 'minDate', 'maxDate']) > -1) { // Decode date settings
+ return this.options.calendar.determineDate(this.options[name], null,
+ this.selectedDates[0], this.get('dateFormat'), this.getConfig());
+ }
+ if (name === 'dateFormat') {
+ return this.options.dateFormat || this.options.calendar.local.dateFormat;
+ }
+ return this.options[name];
+ },
+ curMinDate: function() {
+ return (this.pickingRange ? this.selectedDates[0] : this.get('minDate'));
+ },
+ getConfig: function() {
+ return {dayNamesShort: this.options.dayNamesShort, dayNames: this.options.dayNames,
+ monthNamesShort: this.options.monthNamesShort, monthNames: this.options.monthNames,
+ calculateWeek: this.options.calculateWeek, shortYearCutoff: this.options.shortYearCutoff};
+ }
+ };
+ },
+
+ _postAttach: function(elem, inst) {
+ if (inst.inline) {
+ inst.drawDate = plugin._checkMinMax((inst.selectedDates[0] ||
+ inst.get('defaultDate') || inst.options.calendar.today()).newDate(), inst);
+ inst.prevDate = inst.drawDate.newDate();
+ this._update(elem[0]);
+ if ($.fn.mousewheel) {
+ elem.mousewheel(this._doMouseWheel);
+ }
+ }
+ else {
+ this._attachments(elem, inst);
+ elem.on('keydown.' + inst.name, this._keyDown).on('keypress.' + inst.name, this._keyPress).
+ on('keyup.' + inst.name, this._keyUp);
+ if (elem.attr('disabled')) {
+ this.disable(elem[0]);
+ }
+ }
+ },
+
+ _optionsChanged: function(elem, inst, options) {
+ if (options.calendar && options.calendar !== inst.options.calendar) {
+ var discardDate = function(name) {
+ return (typeof inst.options[name] === 'object' ? null : inst.options[name]);
+ };
+ options = $.extend({defaultDate: discardDate('defaultDate'),
+ minDate: discardDate('minDate'), maxDate: discardDate('maxDate')}, options);
+ inst.selectedDates = [];
+ inst.drawDate = null;
+ }
+ var dates = inst.selectedDates;
+ $.extend(inst.options, options);
+ this.setDate(elem[0], dates, null, false, true);
+ inst.pickingRange = false;
+ var calendar = inst.options.calendar;
+ var defaultDate = inst.get('defaultDate');
+ inst.drawDate = this._checkMinMax((defaultDate ? defaultDate : inst.drawDate) ||
+ defaultDate || calendar.today(), inst).newDate();
+ if (!inst.inline) {
+ this._attachments(elem, inst);
+ }
+ if (inst.inline || inst.div) {
+ this._update(elem[0]);
+ }
+ },
+
+ /** Attach events and trigger, if necessary.
+ @memberof CalendarsPicker
+ @private
+ @param elem {jQuery} The control to affect.
+ @param inst {object} The current instance settings. */
+ _attachments: function(elem, inst) {
+ elem.off('focus.' + inst.name);
+ if (inst.options.showOnFocus) {
+ elem.on('focus.' + inst.name, this.show);
+ }
+ if (inst.trigger) {
+ inst.trigger.remove();
+ }
+ var trigger = inst.options.showTrigger;
+ inst.trigger = (!trigger ? $([]) :
+ $(trigger).clone().removeAttr('id').addClass(this._triggerClass)
+ [inst.options.isRTL ? 'insertBefore' : 'insertAfter'](elem).
+ click(function() {
+ if (!plugin.isDisabled(elem[0])) {
+ plugin[plugin.curInst === inst ? 'hide' : 'show'](elem[0]);
+ }
+ }));
+ this._autoSize(elem, inst);
+ var dates = this._extractDates(inst, elem.val());
+ if (dates) {
+ this.setDate(elem[0], dates, null, true);
+ }
+ var defaultDate = inst.get('defaultDate');
+ if (inst.options.selectDefaultDate && defaultDate && inst.selectedDates.length === 0) {
+ this.setDate(elem[0], (defaultDate || inst.options.calendar.today()).newDate());
+ }
+ },
+
+ /** Apply the maximum length for the date format.
+ @memberof CalendarsPicker
+ @private
+ @param elem {jQuery} The control to affect.
+ @param inst {object} The current instance settings. */
+ _autoSize: function(elem, inst) {
+ if (inst.options.autoSize && !inst.inline) {
+ var calendar = inst.options.calendar;
+ var date = calendar.newDate(2009, 10, 20); // Ensure double digits
+ var dateFormat = inst.get('dateFormat');
+ if (dateFormat.match(/[DM]/)) {
+ var findMax = function(names) {
+ var max = 0;
+ var maxI = 0;
+ for (var i = 0; i < names.length; i++) {
+ if (names[i].length > max) {
+ max = names[i].length;
+ maxI = i;
+ }
+ }
+ return maxI;
+ };
+ date.month(findMax(calendar.local[dateFormat.match(/MM/) ? // Longest month
+ 'monthNames' : 'monthNamesShort']) + 1);
+ date.day(findMax(calendar.local[dateFormat.match(/DD/) ? // Longest day
+ 'dayNames' : 'dayNamesShort']) + 20 - date.dayOfWeek());
+ }
+ inst.elem.attr('size', date.formatDate(dateFormat,
+ {localNumbers: inst.options.localnumbers}).length);
+ }
+ },
+
+ _preDestroy: function(elem, inst) {
+ if (inst.trigger) {
+ inst.trigger.remove();
+ }
+ elem.empty().off('.' + inst.name);
+ if (inst.inline && $.fn.mousewheel) {
+ elem.unmousewheel();
+ }
+ if (!inst.inline && inst.options.autoSize) {
+ elem.removeAttr('size');
+ }
+ },
+
+ /** Apply multiple event functions.
+ @memberof CalendarsPicker
+ @param fns {function} The functions to apply.
+ @example onShow: multipleEvents(fn1, fn2, ...) */
+ multipleEvents: function(fns) {
+ var funcs = arguments;
+ return function(args) {
+ for (var i = 0; i < funcs.length; i++) {
+ funcs[i].apply(this, arguments);
+ }
+ };
+ },
+
+ /** Enable the control.
+ @memberof CalendarsPicker
+ @param elem {Element} The control to affect.
+ @example $(selector).datepick('enable') */
+ enable: function(elem) {
+ elem = $(elem);
+ if (!elem.hasClass(this._getMarker())) {
+ return;
+ }
+ var inst = this._getInst(elem);
+ if (inst.inline) {
+ elem.children('.' + this._disableClass).remove().end().
+ find('button,select').prop('disabled', false).end().
+ find('a').attr('href', 'javascript:void(0)');
+ }
+ else {
+ elem.prop('disabled', false);
+ inst.trigger.filter('button.' + this._triggerClass).prop('disabled', false).end().
+ filter('img.' + this._triggerClass).css({opacity: '1.0', cursor: ''});
+ }
+ this._disabled = $.map(this._disabled,
+ function(value) { return (value === elem[0] ? null : value); }); // Delete entry
+ },
+
+ /** Disable the control.
+ @memberof CalendarsPicker
+ @param elem {Element} The control to affect.
+ @example $(selector).datepick('disable') */
+ disable: function(elem) {
+ elem = $(elem);
+ if (!elem.hasClass(this._getMarker())) {
+ return;
+ }
+ var inst = this._getInst(elem);
+ if (inst.inline) {
+ var inline = elem.children(':last');
+ var offset = inline.offset();
+ var relOffset = {left: 0, top: 0};
+ inline.parents().each(function() {
+ if ($(this).css('position') === 'relative') {
+ relOffset = $(this).offset();
+ return false;
+ }
+ });
+ var zIndex = elem.css('zIndex');
+ zIndex = (zIndex === 'auto' ? 0 : parseInt(zIndex, 10)) + 1;
+ elem.prepend('').
+ find('button,select').prop('disabled', true).end().
+ find('a').removeAttr('href');
+ }
+ else {
+ elem.prop('disabled', true);
+ inst.trigger.filter('button.' + this._triggerClass).prop('disabled', true).end().
+ filter('img.' + this._triggerClass).css({opacity: '0.5', cursor: 'default'});
+ }
+ this._disabled = $.map(this._disabled,
+ function(value) { return (value === elem[0] ? null : value); }); // Delete entry
+ this._disabled.push(elem[0]);
+ },
+
+ /** Is the first field in a jQuery collection disabled as a datepicker?
+ @memberof CalendarsPicker
+ @param elem {Element} The control to examine.
+ @return {boolean} true if disabled, false if enabled.
+ @example if ($(selector).datepick('isDisabled')) {...} */
+ isDisabled: function(elem) {
+ return (elem && $.inArray(elem, this._disabled) > -1);
+ },
+
+ /** Show a popup datepicker.
+ @memberof CalendarsPicker
+ @param elem {Event|Element} a focus event or the control to use.
+ @example $(selector).datepick('show') */
+ show: function(elem) {
+ elem = $(elem.target || elem);
+ var inst = plugin._getInst(elem);
+ if (plugin.curInst === inst) {
+ return;
+ }
+ if (plugin.curInst) {
+ plugin.hide(plugin.curInst, true);
+ }
+ if (!$.isEmptyObject(inst)) {
+ // Retrieve existing date(s)
+ inst.lastVal = null;
+ inst.selectedDates = plugin._extractDates(inst, elem.val());
+ inst.pickingRange = false;
+ inst.drawDate = plugin._checkMinMax((inst.selectedDates[0] ||
+ inst.get('defaultDate') || inst.options.calendar.today()).newDate(), inst);
+ inst.prevDate = inst.drawDate.newDate();
+ plugin.curInst = inst;
+ // Generate content
+ plugin._update(elem[0], true);
+ // Adjust position before showing
+ var offset = plugin._checkOffset(inst);
+ inst.div.css({left: offset.left, top: offset.top});
+ // And display
+ var showAnim = inst.options.showAnim;
+ var showSpeed = inst.options.showSpeed;
+ showSpeed = (showSpeed === 'normal' && $.ui &&
+ parseInt($.ui.version.substring(2)) >= 8 ? '_default' : showSpeed);
+ if ($.effects && ($.effects[showAnim] || ($.effects.effect && $.effects.effect[showAnim]))) {
+ var data = inst.div.data(); // Update old effects data
+ for (var key in data) {
+ if (key.match(/^ec\.storage\./)) {
+ data[key] = inst._mainDiv.css(key.replace(/ec\.storage\./, ''));
+ }
+ }
+ inst.div.data(data).show(showAnim, inst.options.showOptions, showSpeed);
+ }
+ else {
+ inst.div[showAnim || 'show'](showAnim ? showSpeed : 0);
+ }
+ }
+ },
+
+ /** Extract possible dates from a string.
+ @memberof CalendarsPicker
+ @private
+ @param inst {object} The current instance settings.
+ @param text {string} The text to extract from.
+ @return {CDate[]} The extracted dates. */
+ _extractDates: function(inst, datesText) {
+ if (datesText === inst.lastVal) {
+ return;
+ }
+ inst.lastVal = datesText;
+ datesText = datesText.split(inst.options.multiSelect ? inst.options.multiSeparator :
+ (inst.options.rangeSelect ? inst.options.rangeSeparator : '\x00'));
+ var dates = [];
+ for (var i = 0; i < datesText.length; i++) {
+ try {
+ var date = inst.options.calendar.parseDate(inst.get('dateFormat'), datesText[i]);
+ if (date) {
+ var found = false;
+ for (var j = 0; j < dates.length; j++) {
+ if (dates[j].compareTo(date) === 0) {
+ found = true;
+ break;
+ }
+ }
+ if (!found) {
+ dates.push(date);
+ }
+ }
+ }
+ catch (e) {
+ // Ignore
+ }
+ }
+ dates.splice(inst.options.multiSelect || (inst.options.rangeSelect ? 2 : 1), dates.length);
+ if (inst.options.rangeSelect && dates.length === 1) {
+ dates[1] = dates[0];
+ }
+ return dates;
+ },
+
+ /** Update the datepicker display.
+ @memberof CalendarsPicker
+ @private
+ @param elem {Event|Element} a focus event or the control to use.
+ @param hidden {boolean} true to initially hide the datepicker. */
+ _update: function(elem, hidden) {
+ elem = $(elem.target || elem);
+ var inst = plugin._getInst(elem);
+ if (!$.isEmptyObject(inst)) {
+ if (inst.inline || plugin.curInst === inst) {
+ if ($.isFunction(inst.options.onChangeMonthYear) && (!inst.prevDate ||
+ inst.prevDate.year() !== inst.drawDate.year() ||
+ inst.prevDate.month() !== inst.drawDate.month())) {
+ inst.options.onChangeMonthYear.apply(elem[0],
+ [inst.drawDate.year(), inst.drawDate.month()]);
+ }
+ }
+ if (inst.inline) {
+ var index = $('a, :input', elem).index($(':focus', elem));
+ elem.html(this._generateContent(elem[0], inst));
+ var focus = elem.find('a, :input');
+ focus.eq(Math.max(Math.min(index, focus.length - 1), 0)).focus();
+ }
+ else if (plugin.curInst === inst) {
+ if (!inst.div) {
+ inst.div = $('').addClass(this._popupClass).
+ css({display: (hidden ? 'none' : 'static'), position: 'absolute',
+ left: elem.offset().left, top: elem.offset().top + elem.outerHeight()}).
+ appendTo($(inst.options.popupContainer || 'body'));
+ if ($.fn.mousewheel) {
+ inst.div.mousewheel(this._doMouseWheel);
+ }
+ }
+ inst.div.html(this._generateContent(elem[0], inst));
+ elem.focus();
+ }
+ }
+ },
+
+ /** Update the input field and any alternate field with the current dates.
+ @memberof CalendarsPicker
+ @private
+ @param elem {Element} The control to use.
+ @param keyUp {boolean} true if coming from keyUp processing (internal). */
+ _updateInput: function(elem, keyUp) {
+ var inst = this._getInst(elem);
+ if (!$.isEmptyObject(inst)) {
+ var value = '';
+ var altValue = '';
+ var sep = (inst.options.multiSelect ? inst.options.multiSeparator :
+ inst.options.rangeSeparator);
+ var calendar = inst.options.calendar;
+ var dateFormat = inst.get('dateFormat');
+ var altFormat = inst.options.altFormat || dateFormat;
+ var settings = {localNumbers: inst.options.localNumbers};
+ for (var i = 0; i < inst.selectedDates.length; i++) {
+ value += (keyUp ? '' : (i > 0 ? sep : '') +
+ calendar.formatDate(dateFormat, inst.selectedDates[i], settings));
+ altValue += (i > 0 ? sep : '') +
+ calendar.formatDate(altFormat, inst.selectedDates[i], settings);
+ }
+ if (!inst.inline && !keyUp) {
+ $(elem).val(value);
+ }
+ $(inst.options.altField).val(altValue);
+ if ($.isFunction(inst.options.onSelect) && !keyUp && !inst.inSelect) {
+ inst.inSelect = true; // Prevent endless loops
+ inst.options.onSelect.apply(elem, [inst.selectedDates]);
+ inst.inSelect = false;
+ }
+ }
+ },
+
+ /** Retrieve the size of left and top borders for an element.
+ @memberof CalendarsPicker
+ @private
+ @param elem {jQuery} The element of interest.
+ @return {number[]} The left and top borders. */
+ _getBorders: function(elem) {
+ var convert = function(value) {
+ return {thin: 1, medium: 3, thick: 5}[value] || value;
+ };
+ return [parseFloat(convert(elem.css('border-left-width'))),
+ parseFloat(convert(elem.css('border-top-width')))];
+ },
+
+ /** Check positioning to remain on the screen.
+ @memberof CalendarsPicker
+ @private
+ @param inst {object} The current instance settings.
+ @return {object} The updated offset for the datepicker. */
+ _checkOffset: function(inst) {
+ var base = (inst.elem.is(':hidden') && inst.trigger ? inst.trigger : inst.elem);
+ var offset = base.offset();
+ var browserWidth = $(window).width();
+ var browserHeight = $(window).height();
+ if (browserWidth === 0) {
+ return offset;
+ }
+ var isFixed = false;
+ $(inst.elem).parents().each(function() {
+ isFixed |= $(this).css('position') === 'fixed';
+ return !isFixed;
+ });
+ var scrollX = document.documentElement.scrollLeft || document.body.scrollLeft;
+ var scrollY = document.documentElement.scrollTop || document.body.scrollTop;
+ var above = offset.top - (isFixed ? scrollY : 0) - inst.div.outerHeight();
+ var below = offset.top - (isFixed ? scrollY : 0) + base.outerHeight();
+ var alignL = offset.left - (isFixed ? scrollX : 0);
+ var alignR = offset.left - (isFixed ? scrollX : 0) + base.outerWidth() - inst.div.outerWidth();
+ var tooWide = (offset.left - scrollX + inst.div.outerWidth()) > browserWidth;
+ var tooHigh = (offset.top - scrollY + inst.elem.outerHeight() +
+ inst.div.outerHeight()) > browserHeight;
+ inst.div.css('position', isFixed ? 'fixed' : 'absolute');
+ var alignment = inst.options.alignment;
+ if (alignment === 'topLeft') {
+ offset = {left: alignL, top: above};
+ }
+ else if (alignment === 'topRight') {
+ offset = {left: alignR, top: above};
+ }
+ else if (alignment === 'bottomLeft') {
+ offset = {left: alignL, top: below};
+ }
+ else if (alignment === 'bottomRight') {
+ offset = {left: alignR, top: below};
+ }
+ else if (alignment === 'top') {
+ offset = {left: (inst.options.isRTL || tooWide ? alignR : alignL), top: above};
+ }
+ else { // bottom
+ offset = {left: (inst.options.isRTL || tooWide ? alignR : alignL),
+ top: (tooHigh ? above : below)};
+ }
+ offset.left = Math.max((isFixed ? 0 : scrollX), offset.left);
+ offset.top = Math.max((isFixed ? 0 : scrollY), offset.top);
+ return offset;
+ },
+
+ /** Close date picker if clicked elsewhere.
+ @memberof CalendarsPicker
+ @private
+ @param event {MouseEvent} The mouse click to check. */
+ _checkExternalClick: function(event) {
+ if (!plugin.curInst) {
+ return;
+ }
+ var elem = $(event.target);
+ if (elem.closest('.' + plugin._popupClass + ',.' + plugin._triggerClass).length === 0 &&
+ !elem.hasClass(plugin._getMarker())) {
+ plugin.hide(plugin.curInst);
+ }
+ },
+
+ /** Hide a popup datepicker.
+ @memberof CalendarsPicker
+ @param elem {Element|object} The control to use or the current instance settings.
+ @param immediate {boolean} true to close immediately without animation (internal).
+ @example $(selector).datepick('hide') */
+ hide: function(elem, immediate) {
+ if (!elem) {
+ return;
+ }
+ var inst = this._getInst(elem);
+ if ($.isEmptyObject(inst)) {
+ inst = elem;
+ }
+ if (inst && inst === plugin.curInst) {
+ var showAnim = (immediate ? '' : inst.options.showAnim);
+ var showSpeed = inst.options.showSpeed;
+ showSpeed = (showSpeed === 'normal' && $.ui &&
+ parseInt($.ui.version.substring(2)) >= 8 ? '_default' : showSpeed);
+ var postProcess = function() {
+ if (!inst.div) {
+ return;
+ }
+ inst.div.remove();
+ inst.div = null;
+ plugin.curInst = null;
+ if ($.isFunction(inst.options.onClose)) {
+ inst.options.onClose.apply(elem, [inst.selectedDates]);
+ }
+ };
+ inst.div.stop();
+ if ($.effects && ($.effects[showAnim] || ($.effects.effect && $.effects.effect[showAnim]))) {
+ inst.div.hide(showAnim, inst.options.showOptions, showSpeed, postProcess);
+ }
+ else {
+ var hideAnim = (showAnim === 'slideDown' ? 'slideUp' :
+ (showAnim === 'fadeIn' ? 'fadeOut' : 'hide'));
+ inst.div[hideAnim]((showAnim ? showSpeed : ''), postProcess);
+ }
+ if (!showAnim) {
+ postProcess();
+ }
+ }
+ },
+
+ /** Handle keystrokes in the datepicker.
+ @memberof CalendarsPicker
+ @private
+ @param event {KeyEvent} The keystroke.
+ @return {boolean} true if not handled, false if handled. */
+ _keyDown: function(event) {
+ var elem = (event.data && event.data.elem) || event.target;
+ var inst = plugin._getInst(elem);
+ var handled = false;
+ if (inst.inline || inst.div) {
+ if (event.keyCode === 9) { // Tab - close
+ plugin.hide(elem);
+ }
+ else if (event.keyCode === 13) { // Enter - select
+ plugin.selectDate(elem,
+ $('a.' + inst.options.renderer.highlightedClass, inst.div)[0]);
+ handled = true;
+ }
+ else { // Command keystrokes
+ var commands = inst.options.commands;
+ for (var name in commands) {
+ var command = commands[name];
+ if (command.keystroke.keyCode === event.keyCode &&
+ !!command.keystroke.ctrlKey === !!(event.ctrlKey || event.metaKey) &&
+ !!command.keystroke.altKey === event.altKey &&
+ !!command.keystroke.shiftKey === event.shiftKey) {
+ plugin.performAction(elem, name);
+ handled = true;
+ break;
+ }
+ }
+ }
+ }
+ else { // Show on 'current' keystroke
+ var command = inst.options.commands.current;
+ if (command.keystroke.keyCode === event.keyCode &&
+ !!command.keystroke.ctrlKey === !!(event.ctrlKey || event.metaKey) &&
+ !!command.keystroke.altKey === event.altKey &&
+ !!command.keystroke.shiftKey === event.shiftKey) {
+ plugin.show(elem);
+ handled = true;
+ }
+ }
+ inst.ctrlKey = ((event.keyCode < 48 && event.keyCode !== 32) || event.ctrlKey || event.metaKey);
+ if (handled) {
+ event.preventDefault();
+ event.stopPropagation();
+ }
+ return !handled;
+ },
+
+ /** Filter keystrokes in the datepicker.
+ @memberof CalendarsPicker
+ @private
+ @param event {KeyEvent} The keystroke.
+ @return {boolean} true if allowed, false if not allowed. */
+ _keyPress: function(event) {
+ var inst = plugin._getInst((event.data && event.data.elem) || event.target);
+ if (!$.isEmptyObject(inst) && inst.options.constrainInput) {
+ var ch = String.fromCharCode(event.keyCode || event.charCode);
+ var allowedChars = plugin._allowedChars(inst);
+ return (event.metaKey || inst.ctrlKey || ch < ' ' ||
+ !allowedChars || allowedChars.indexOf(ch) > -1);
+ }
+ return true;
+ },
+
+ /** Determine the set of characters allowed by the date format.
+ @memberof CalendarsPicker
+ @private
+ @param inst {object} The current instance settings.
+ @return {string} The set of allowed characters, or null if anything allowed. */
+ _allowedChars: function(inst) {
+ var allowedChars = (inst.options.multiSelect ? inst.options.multiSeparator :
+ (inst.options.rangeSelect ? inst.options.rangeSeparator : ''));
+ var literal = false;
+ var hasNum = false;
+ var dateFormat = inst.get('dateFormat');
+ for (var i = 0; i < dateFormat.length; i++) {
+ var ch = dateFormat.charAt(i);
+ if (literal) {
+ if (ch === "'" && dateFormat.charAt(i + 1) !== "'") {
+ literal = false;
+ }
+ else {
+ allowedChars += ch;
+ }
+ }
+ else {
+ switch (ch) {
+ case 'd': case 'm': case 'o': case 'w':
+ allowedChars += (hasNum ? '' : '0123456789'); hasNum = true; break;
+ case 'y': case '@': case '!':
+ allowedChars += (hasNum ? '' : '0123456789') + '-'; hasNum = true; break;
+ case 'J':
+ allowedChars += (hasNum ? '' : '0123456789') + '-.'; hasNum = true; break;
+ case 'D': case 'M': case 'Y':
+ return null; // Accept anything
+ case "'":
+ if (dateFormat.charAt(i + 1) === "'") {
+ allowedChars += "'";
+ }
+ else {
+ literal = true;
+ }
+ break;
+ default:
+ allowedChars += ch;
+ }
+ }
+ }
+ return allowedChars;
+ },
+
+ /** Synchronise datepicker with the field.
+ @memberof CalendarsPicker
+ @private
+ @param event {KeyEvent} The keystroke.
+ @return {boolean} true if allowed, false if not allowed. */
+ _keyUp: function(event) {
+ var elem = (event.data && event.data.elem) || event.target;
+ var inst = plugin._getInst(elem);
+ if (!$.isEmptyObject(inst) && !inst.ctrlKey && inst.lastVal !== inst.elem.val()) {
+ try {
+ var dates = plugin._extractDates(inst, inst.elem.val());
+ if (dates.length > 0) {
+ plugin.setDate(elem, dates, null, true);
+ }
+ }
+ catch (event) {
+ // Ignore
+ }
+ }
+ return true;
+ },
+
+ /** Increment/decrement month/year on mouse wheel activity.
+ @memberof CalendarsPicker
+ @private
+ @param event {event} The mouse wheel event.
+ @param delta {number} The amount of change. */
+ _doMouseWheel: function(event, delta) {
+ var elem = (plugin.curInst && plugin.curInst.elem[0]) ||
+ $(event.target).closest('.' + plugin._getMarker())[0];
+ if (plugin.isDisabled(elem)) {
+ return;
+ }
+ var inst = plugin._getInst(elem);
+ if (inst.options.useMouseWheel) {
+ delta = (delta < 0 ? -1 : +1);
+ plugin.changeMonth(elem, -inst.options[event.ctrlKey ? 'monthsToJump' : 'monthsToStep'] * delta);
+ }
+ event.preventDefault();
+ },
+
+ /** Clear an input and close a popup datepicker.
+ @memberof CalendarsPicker
+ @param elem {Element} The control to use.
+ @example $(selector).datepick('clear') */
+ clear: function(elem) {
+ var inst = this._getInst(elem);
+ if (!$.isEmptyObject(inst)) {
+ inst.selectedDates = [];
+ this.hide(elem);
+ var defaultDate = inst.get('defaultDate');
+ if (inst.options.selectDefaultDate && defaultDate) {
+ this.setDate(elem, (defaultDate || inst.options.calendar.today()).newDate());
+ }
+ else {
+ this._updateInput(elem);
+ }
+ }
+ },
+
+ /** Retrieve the selected date(s) for a datepicker.
+ @memberof CalendarsPicker
+ @param elem {Element} The control to examine.
+ @return {CDate[]} The selected date(s).
+ @example var dates = $(selector).datepick('getDate') */
+ getDate: function(elem) {
+ var inst = this._getInst(elem);
+ return (!$.isEmptyObject(inst) ? inst.selectedDates : []);
+ },
+
+ /** Set the selected date(s) for a datepicker.
+ @memberof CalendarsPicker
+ @param elem {Element} the control to examine.
+ @param dates {CDate|number|string|array} the selected date(s).
+ @param [endDate] {CDate|number|string} the ending date for a range.
+ @param [keyUp] {boolean} true if coming from keyUp processing (internal).
+ @param [setOpt] {boolean} true if coming from option processing (internal).
+ @example $(selector).datepick('setDate', new Date(2014, 12-1, 25))
+ $(selector).datepick('setDate', '12/25/2014', '01/01/2015')
+ $(selector).datepick('setDate', [date1, date2, date3]) */
+ setDate: function(elem, dates, endDate, keyUp, setOpt) {
+ var inst = this._getInst(elem);
+ if (!$.isEmptyObject(inst)) {
+ if (!$.isArray(dates)) {
+ dates = [dates];
+ if (endDate) {
+ dates.push(endDate);
+ }
+ }
+ var minDate = inst.get('minDate');
+ var maxDate = inst.get('maxDate');
+ var curDate = inst.selectedDates[0];
+ inst.selectedDates = [];
+ for (var i = 0; i < dates.length; i++) {
+ var date = inst.options.calendar.determineDate(
+ dates[i], null, curDate, inst.get('dateFormat'), inst.getConfig());
+ if (date) {
+ if ((!minDate || date.compareTo(minDate) !== -1) &&
+ (!maxDate || date.compareTo(maxDate) !== +1)) {
+ var found = false;
+ for (var j = 0; j < inst.selectedDates.length; j++) {
+ if (inst.selectedDates[j].compareTo(date) === 0) {
+ found = true;
+ break;
+ }
+ }
+ if (!found) {
+ inst.selectedDates.push(date);
+ }
+ }
+ }
+ }
+ inst.selectedDates.splice(inst.options.multiSelect ||
+ (inst.options.rangeSelect ? 2 : 1), inst.selectedDates.length);
+ if (inst.options.rangeSelect) {
+ switch (inst.selectedDates.length) {
+ case 1: inst.selectedDates[1] = inst.selectedDates[0]; break;
+ case 2: inst.selectedDates[1] =
+ (inst.selectedDates[0].compareTo(inst.selectedDates[1]) === +1 ?
+ inst.selectedDates[0] : inst.selectedDates[1]); break;
+ }
+ inst.pickingRange = false;
+ }
+ inst.prevDate = (inst.drawDate ? inst.drawDate.newDate() : null);
+ inst.drawDate = this._checkMinMax((inst.selectedDates[0] ||
+ inst.get('defaultDate') || inst.options.calendar.today()).newDate(), inst);
+ if (!setOpt) {
+ this._update(elem);
+ this._updateInput(elem, keyUp);
+ }
+ }
+ },
+
+ /** Determine whether a date is selectable for this datepicker.
+ @memberof CalendarsPicker
+ @private
+ @param elem {Element} The control to check.
+ @param date {CDate|string|number} The date to check.
+ @return {boolean} true if selectable, false if not.
+ @example var selectable = $(selector).datepick('isSelectable', date) */
+ isSelectable: function(elem, date) {
+ var inst = this._getInst(elem);
+ if ($.isEmptyObject(inst)) {
+ return false;
+ }
+ date = inst.options.calendar.determineDate(date,
+ inst.selectedDates[0] || inst.options.calendar.today(), null,
+ inst.options.dateFormat, inst.getConfig());
+ return this._isSelectable(elem, date, inst.options.onDate,
+ inst.get('minDate'), inst.get('maxDate'));
+ },
+
+ /** Internally determine whether a date is selectable for this datepicker.
+ @memberof CalendarsPicker
+ @private
+ @param elem {Element} the control to check.
+ @param date {CDate} The date to check.
+ @param onDate {function|boolean} Any onDate callback or callback.selectable.
+ @param minDate {CDate} The minimum allowed date.
+ @param maxDate {CDate} The maximum allowed date.
+ @return {boolean} true if selectable, false if not. */
+ _isSelectable: function(elem, date, onDate, minDate, maxDate) {
+ var dateInfo = (typeof onDate === 'boolean' ? {selectable: onDate} :
+ (!$.isFunction(onDate) ? {} : onDate.apply(elem, [date, true])));
+ return (dateInfo.selectable !== false) &&
+ (!minDate || date.toJD() >= minDate.toJD()) && (!maxDate || date.toJD() <= maxDate.toJD());
+ },
+
+ /** Perform a named action for a datepicker.
+ @memberof CalendarsPicker
+ @param elem {element} The control to affect.
+ @param action {string} The name of the action. */
+ performAction: function(elem, action) {
+ var inst = this._getInst(elem);
+ if (!$.isEmptyObject(inst) && !this.isDisabled(elem)) {
+ var commands = inst.options.commands;
+ if (commands[action] && commands[action].enabled.apply(elem, [inst])) {
+ commands[action].action.apply(elem, [inst]);
+ }
+ }
+ },
+
+ /** Set the currently shown month, defaulting to today's.
+ @memberof CalendarsPicker
+ @param elem {Element} The control to affect.
+ @param [year] {number} The year to show.
+ @param [month] {number} The month to show (1-12).
+ @param [day] {number} The day to show.
+ @example $(selector).datepick('showMonth', 2014, 12, 25) */
+ showMonth: function(elem, year, month, day) {
+ var inst = this._getInst(elem);
+ if (!$.isEmptyObject(inst) && (day != null ||
+ (inst.drawDate.year() !== year || inst.drawDate.month() !== month))) {
+ inst.prevDate = inst.drawDate.newDate();
+ var calendar = inst.options.calendar;
+ var show = this._checkMinMax((year != null ?
+ calendar.newDate(year, month, 1) : calendar.today()), inst);
+ inst.drawDate.date(show.year(), show.month(),
+ (day != null ? day : Math.min(inst.drawDate.day(),
+ calendar.daysInMonth(show.year(), show.month()))));
+ this._update(elem);
+ }
+ },
+
+ /** Adjust the currently shown month.
+ @memberof CalendarsPicker
+ @param elem {Element} The control to affect.
+ @param offset {number} The number of months to change by.
+ @example $(selector).datepick('changeMonth', 2)*/
+ changeMonth: function(elem, offset) {
+ var inst = this._getInst(elem);
+ if (!$.isEmptyObject(inst)) {
+ var date = inst.drawDate.newDate().add(offset, 'm');
+ this.showMonth(elem, date.year(), date.month());
+ }
+ },
+
+ /** Adjust the currently shown day.
+ @memberof CalendarsPicker
+ @param elem {Element} The control to affect.
+ @param offset {number} The number of days to change by.
+ @example $(selector).datepick('changeDay', 7)*/
+ changeDay: function(elem, offset) {
+ var inst = this._getInst(elem);
+ if (!$.isEmptyObject(inst)) {
+ var date = inst.drawDate.newDate().add(offset, 'd');
+ this.showMonth(elem, date.year(), date.month(), date.day());
+ }
+ },
+
+ /** Restrict a date to the minimum/maximum specified.
+ @memberof CalendarsPicker
+ @private
+ @param date {CDate} The date to check.
+ @param inst {object} The current instance settings. */
+ _checkMinMax: function(date, inst) {
+ var minDate = inst.get('minDate');
+ var maxDate = inst.get('maxDate');
+ date = (minDate && date.compareTo(minDate) === -1 ? minDate.newDate() : date);
+ date = (maxDate && date.compareTo(maxDate) === +1 ? maxDate.newDate() : date);
+ return date;
+ },
+
+ /** Retrieve the date associated with an entry in the datepicker.
+ @memberof CalendarsPicker
+ @param elem {Element} The control to examine.
+ @param target {Element} The selected datepicker element.
+ @return {CDate} The corresponding date, or null.
+ @example var date = $(selector).datepick('retrieveDate', $('div.datepick-popup a:contains(10)')[0]) */
+ retrieveDate: function(elem, target) {
+ var inst = this._getInst(elem);
+ return ($.isEmptyObject(inst) ? null : inst.options.calendar.fromJD(
+ parseFloat(target.className.replace(/^.*jd(\d+\.5).*$/, '$1'))));
+ },
+
+ /** Select a date for this datepicker.
+ @memberof CalendarsPicker
+ @param elem {Element} The control to examine.
+ @param target {Element} The selected datepicker element.
+ @example $(selector).datepick('selectDate', $('div.datepick-popup a:contains(10)')[0]) */
+ selectDate: function(elem, target) {
+ var inst = this._getInst(elem);
+ if (!$.isEmptyObject(inst) && !this.isDisabled(elem)) {
+ var date = this.retrieveDate(elem, target);
+ if (inst.options.multiSelect) {
+ var found = false;
+ for (var i = 0; i < inst.selectedDates.length; i++) {
+ if (date.compareTo(inst.selectedDates[i]) === 0) {
+ inst.selectedDates.splice(i, 1);
+ found = true;
+ break;
+ }
+ }
+ if (!found && inst.selectedDates.length < inst.options.multiSelect) {
+ inst.selectedDates.push(date);
+ }
+ }
+ else if (inst.options.rangeSelect) {
+ if (inst.pickingRange) {
+ inst.selectedDates[1] = date;
+ }
+ else {
+ inst.selectedDates = [date, date];
+ }
+ inst.pickingRange = !inst.pickingRange;
+ }
+ else {
+ inst.selectedDates = [date];
+ }
+ inst.prevDate = inst.drawDate = date.newDate();
+ this._updateInput(elem);
+ if (inst.inline || inst.pickingRange || inst.selectedDates.length <
+ (inst.options.multiSelect || (inst.options.rangeSelect ? 2 : 1))) {
+ this._update(elem);
+ }
+ else {
+ this.hide(elem);
+ }
+ }
+ },
+
+ /** Generate the datepicker content for this control.
+ @memberof CalendarsPicker
+ @private
+ @param elem {Element} The control to affect.
+ @param inst {object} The current instance settings.
+ @return {jQuery} The datepicker content */
+ _generateContent: function(elem, inst) {
+ var monthsToShow = inst.options.monthsToShow;
+ monthsToShow = ($.isArray(monthsToShow) ? monthsToShow : [1, monthsToShow]);
+ inst.drawDate = this._checkMinMax(
+ inst.drawDate || inst.get('defaultDate') || inst.options.calendar.today(), inst);
+ var drawDate = inst.drawDate.newDate().add(-inst.options.monthsOffset, 'm');
+ // Generate months
+ var monthRows = '';
+ for (var row = 0; row < monthsToShow[0]; row++) {
+ var months = '';
+ for (var col = 0; col < monthsToShow[1]; col++) {
+ months += this._generateMonth(elem, inst, drawDate.year(),
+ drawDate.month(), inst.options.calendar, inst.options.renderer, (row === 0 && col === 0));
+ drawDate.add(1, 'm');
+ }
+ monthRows += this._prepare(inst.options.renderer.monthRow, inst).replace(/\{months\}/, months);
+ }
+ var picker = this._prepare(inst.options.renderer.picker, inst).replace(/\{months\}/, monthRows).
+ replace(/\{weekHeader\}/g, this._generateDayHeaders(inst, inst.options.calendar, inst.options.renderer));
+ // Add commands
+ var addCommand = function(type, open, close, name, classes) {
+ if (picker.indexOf('{' + type + ':' + name + '}') === -1) {
+ return;
+ }
+ var command = inst.options.commands[name];
+ var date = (inst.options.commandsAsDateFormat ? command.date.apply(elem, [inst]) : null);
+ picker = picker.replace(new RegExp('\\{' + type + ':' + name + '\\}', 'g'),
+ '<' + open + (command.status ? ' title="' + inst.options[command.status] + '"' : '') +
+ ' class="' + inst.options.renderer.commandClass + ' ' +
+ inst.options.renderer.commandClass + '-' + name + ' ' + classes +
+ (command.enabled(inst) ? '' : ' ' + inst.options.renderer.disabledClass) + '">' +
+ (date ? date.formatDate(inst.options[command.text], {localNumbers: inst.options.localNumbers}) :
+ inst.options[command.text]) + '' + close + '>');
+ };
+ for (var name in inst.options.commands) {
+ addCommand('button', 'button type="button"', 'button', name,
+ inst.options.renderer.commandButtonClass);
+ addCommand('link', 'a href="javascript:void(0)"', 'a', name,
+ inst.options.renderer.commandLinkClass);
+ }
+ picker = $(picker);
+ if (monthsToShow[1] > 1) {
+ var count = 0;
+ $(inst.options.renderer.monthSelector, picker).each(function() {
+ var nth = ++count % monthsToShow[1];
+ $(this).addClass(nth === 1 ? 'first' : (nth === 0 ? 'last' : ''));
+ });
+ }
+ // Add datepicker behaviour
+ var self = this;
+ function removeHighlight() {
+ (inst.inline ? $(this).closest('.' + self._getMarker()) : inst.div).
+ find(inst.options.renderer.daySelector + ' a').
+ removeClass(inst.options.renderer.highlightedClass);
+ }
+ picker.find(inst.options.renderer.daySelector + ' a').hover(
+ function() {
+ removeHighlight.apply(this);
+ $(this).addClass(inst.options.renderer.highlightedClass);
+ },
+ removeHighlight).
+ click(function() {
+ self.selectDate(elem, this);
+ }).end().
+ find('select.' + this._monthYearClass + ':not(.' + this._anyYearClass + ')').
+ change(function() {
+ var monthYear = $(this).val().split('/');
+ self.showMonth(elem, parseInt(monthYear[1], 10), parseInt(monthYear[0], 10));
+ }).end().
+ find('select.' + this._anyYearClass).click(function() {
+ $(this).css('visibility', 'hidden').
+ next('input').css({left: this.offsetLeft, top: this.offsetTop,
+ width: this.offsetWidth, height: this.offsetHeight}).show().focus();
+ }).end().
+ find('input.' + self._monthYearClass).change(function() {
+ try {
+ var year = parseInt($(this).val(), 10);
+ year = (isNaN(year) ? inst.drawDate.year() : year);
+ self.showMonth(elem, year, inst.drawDate.month(), inst.drawDate.day());
+ }
+ catch (e) {
+ alert(e);
+ }
+ }).keydown(function(event) {
+ if (event.keyCode === 13) { // Enter
+ $(event.elem).change();
+ }
+ else if (event.keyCode === 27) { // Escape
+ $(event.elem).hide().prev('select').css('visibility', 'visible');
+ inst.elem.focus();
+ }
+ });
+ // Add keyboard handling
+ var data = {elem: inst.elem[0]};
+ picker.keydown(data, this._keyDown).keypress(data, this._keyPress).keyup(data, this._keyUp);
+ // Add command behaviour
+ picker.find('.' + inst.options.renderer.commandClass).click(function() {
+ if (!$(this).hasClass(inst.options.renderer.disabledClass)) {
+ var action = this.className.replace(
+ new RegExp('^.*' + inst.options.renderer.commandClass + '-([^ ]+).*$'), '$1');
+ plugin.performAction(elem, action);
+ }
+ });
+ // Add classes
+ if (inst.options.isRTL) {
+ picker.addClass(inst.options.renderer.rtlClass);
+ }
+ if (monthsToShow[0] * monthsToShow[1] > 1) {
+ picker.addClass(inst.options.renderer.multiClass);
+ }
+ if (inst.options.pickerClass) {
+ picker.addClass(inst.options.pickerClass);
+ }
+ // Resize
+ $('body').append(picker);
+ var width = 0;
+ picker.find(inst.options.renderer.monthSelector).each(function() {
+ width += $(this).outerWidth();
+ });
+ picker.width(width / monthsToShow[0]);
+ // Pre-show customisation
+ if ($.isFunction(inst.options.onShow)) {
+ inst.options.onShow.apply(elem, [picker, inst.options.calendar, inst]);
+ }
+ return picker;
+ },
+
+ /** Generate the content for a single month.
+ @memberof CalendarsPicker
+ @private
+ @param elem {Element} The control to affect.
+ @param inst {object} The current instance settings.
+ @param year {number} The year to generate.
+ @param month {number} The month to generate.
+ @param calendar {BaseCalendar} The current calendar.
+ @param renderer {object} The rendering templates.
+ @param first {boolean} true if first of multiple months.
+ @return {string} The month content. */
+ _generateMonth: function(elem, inst, year, month, calendar, renderer, first) {
+ var daysInMonth = calendar.daysInMonth(year, month);
+ var monthsToShow = inst.options.monthsToShow;
+ monthsToShow = ($.isArray(monthsToShow) ? monthsToShow : [1, monthsToShow]);
+ var fixedWeeks = inst.options.fixedWeeks || (monthsToShow[0] * monthsToShow[1] > 1);
+ var firstDay = inst.options.firstDay;
+ firstDay = (firstDay == null ? calendar.local.firstDay : firstDay);
+ var leadDays = (calendar.dayOfWeek(year, month, calendar.minDay) -
+ firstDay + calendar.daysInWeek()) % calendar.daysInWeek();
+ var numWeeks = (fixedWeeks ? 6 : Math.ceil((leadDays + daysInMonth) / calendar.daysInWeek()));
+ var selectOtherMonths = inst.options.selectOtherMonths && inst.options.showOtherMonths;
+ var minDate = (inst.pickingRange ? inst.selectedDates[0] : inst.get('minDate'));
+ var maxDate = inst.get('maxDate');
+ var showWeeks = renderer.week.indexOf('{weekOfYear}') > -1;
+ var today = calendar.today();
+ var drawDate = calendar.newDate(year, month, calendar.minDay);
+ drawDate.add(-leadDays - (fixedWeeks &&
+ (drawDate.dayOfWeek() === firstDay || drawDate.daysInMonth() < calendar.daysInWeek())?
+ calendar.daysInWeek() : 0), 'd');
+ var jd = drawDate.toJD();
+ // Localise numbers if requested and available
+ var localiseNumbers = function(value) {
+ return (inst.options.localNumbers && calendar.local.digits ? calendar.local.digits(value) : value);
+ };
+ // Generate weeks
+ var weeks = '';
+ for (var week = 0; week < numWeeks; week++) {
+ var weekOfYear = (!showWeeks ? '' : '' +
+ ($.isFunction(inst.options.calculateWeek) ?
+ inst.options.calculateWeek(drawDate) : drawDate.weekOfYear()) + '');
+ var days = '';
+ for (var day = 0; day < calendar.daysInWeek(); day++) {
+ var selected = false;
+ if (inst.options.rangeSelect && inst.selectedDates.length > 0) {
+ selected = (drawDate.compareTo(inst.selectedDates[0]) !== -1 &&
+ drawDate.compareTo(inst.selectedDates[1]) !== +1)
+ }
+ else {
+ for (var i = 0; i < inst.selectedDates.length; i++) {
+ if (inst.selectedDates[i].compareTo(drawDate) === 0) {
+ selected = true;
+ break;
+ }
+ }
+ }
+ var dateInfo = (!$.isFunction(inst.options.onDate) ? {} :
+ inst.options.onDate.apply(elem, [drawDate, drawDate.month() === month]));
+ var selectable = (selectOtherMonths || drawDate.month() === month) &&
+ this._isSelectable(elem, drawDate, dateInfo.selectable, minDate, maxDate);
+ days += this._prepare(renderer.day, inst).replace(/\{day\}/g,
+ (selectable ? '' +
+ (inst.options.showOtherMonths || drawDate.month() === month ?
+ dateInfo.content || localiseNumbers(drawDate.day()) : ' ') +
+ (selectable ? '' : ''));
+ drawDate.add(1, 'd');
+ jd++;
+ }
+ weeks += this._prepare(renderer.week, inst).replace(/\{days\}/g, days).
+ replace(/\{weekOfYear\}/g, weekOfYear);
+ }
+ var monthHeader = this._prepare(renderer.month, inst).match(/\{monthHeader(:[^\}]+)?\}/);
+ monthHeader = (monthHeader[0].length <= 13 ? 'MM yyyy' :
+ monthHeader[0].substring(13, monthHeader[0].length - 1));
+ monthHeader = (first ? this._generateMonthSelection(
+ inst, year, month, minDate, maxDate, monthHeader, calendar, renderer) :
+ calendar.formatDate(monthHeader, calendar.newDate(year, month, calendar.minDay),
+ {localNumbers: inst.options.localNumbers}));
+ var weekHeader = this._prepare(renderer.weekHeader, inst).
+ replace(/\{days\}/g, this._generateDayHeaders(inst, calendar, renderer));
+ return this._prepare(renderer.month, inst).replace(/\{monthHeader(:[^\}]+)?\}/g, monthHeader).
+ replace(/\{weekHeader\}/g, weekHeader).replace(/\{weeks\}/g, weeks);
+ },
+
+ /** Generate the HTML for the day headers.
+ @memberof CalendarsPicker
+ @private
+ @param inst {object} The current instance settings.
+ @param calendar {BaseCalendar} The current calendar.
+ @param renderer {object} The rendering templates.
+ @return {string} A week's worth of day headers. */
+ _generateDayHeaders: function(inst, calendar, renderer) {
+ var firstDay = inst.options.firstDay;
+ firstDay = (firstDay == null ? calendar.local.firstDay : firstDay);
+ var header = '';
+ for (var day = 0; day < calendar.daysInWeek(); day++) {
+ var dow = (day + firstDay) % calendar.daysInWeek();
+ header += this._prepare(renderer.dayHeader, inst).replace(/\{day\}/g,
+ '' + calendar.local.dayNamesMin[dow] + '');
+ }
+ return header;
+ },
+
+ /** Generate selection controls for month.
+ @memberof CalendarsPicker
+ @private
+ @param inst {object} The current instance settings.
+ @param year {number} The year to generate.
+ @param month {number} The month to generate.
+ @param minDate {CDate} The minimum date allowed.
+ @param maxDate {CDate} The maximum date allowed.
+ @param monthHeader {string} The month/year format.
+ @param calendar {BaseCalendar} The current calendar.
+ @return {string} The month selection content. */
+ _generateMonthSelection: function(inst, year, month, minDate, maxDate, monthHeader, calendar) {
+ if (!inst.options.changeMonth) {
+ return calendar.formatDate(monthHeader, calendar.newDate(year, month, 1),
+ {localNumbers: inst.options.localNumbers});
+ }
+ // Months
+ var monthNames = calendar.local[
+ 'monthNames' + (monthHeader.match(/mm/i) ? '' : 'Short')];
+ var html = monthHeader.replace(/m+/i, '\\x2E').replace(/y+/i, '\\x2F');
+ var selector = '';
+ html = html.replace(/\\x2E/, selector);
+ // Years
+ var yearRange = inst.options.yearRange;
+ if (yearRange === 'any') {
+ selector = '' +
+ '';
+ }
+ else {
+ yearRange = yearRange.split(':');
+ var todayYear = calendar.today().year();
+ var start = (yearRange[0].match('c[+-].*') ? year + parseInt(yearRange[0].substring(1), 10) :
+ ((yearRange[0].match('[+-].*') ? todayYear : 0) + parseInt(yearRange[0], 10)));
+ var end = (yearRange[1].match('c[+-].*') ? year + parseInt(yearRange[1].substring(1), 10) :
+ ((yearRange[1].match('[+-].*') ? todayYear : 0) + parseInt(yearRange[1], 10)));
+ selector = '';
+ }
+ html = html.replace(/\\x2F/, selector);
+ return html;
+ },
+
+ /** Prepare a render template for use.
+ Exclude popup/inline sections that are not applicable.
+ Localise text of the form: {l10n:name}.
+ @memberof CalendarsPicker
+ @private
+ @param text {string} The text to localise.
+ @param inst {object} The current instance settings.
+ @return {string} The localised text. */
+ _prepare: function(text, inst) {
+ var replaceSection = function(type, retain) {
+ while (true) {
+ var start = text.indexOf('{' + type + ':start}');
+ if (start === -1) {
+ return;
+ }
+ var end = text.substring(start).indexOf('{' + type + ':end}');
+ if (end > -1) {
+ text = text.substring(0, start) +
+ (retain ? text.substr(start + type.length + 8, end - type.length - 8) : '') +
+ text.substring(start + end + type.length + 6);
+ }
+ }
+ };
+ replaceSection('inline', inst.inline);
+ replaceSection('popup', !inst.inline);
+ var pattern = /\{l10n:([^\}]+)\}/;
+ var matches = null;
+ while (matches = pattern.exec(text)) {
+ text = text.replace(matches[0], inst.options[matches[1]]);
+ }
+ return text;
+ }
+ });
+
+ var plugin = $.calendarsPicker; // Singleton instance
+
+ $(function() {
+ $(document).on('mousedown.' + pluginName, plugin._checkExternalClick).
+ on('resize.' + pluginName, function() { plugin.hide(plugin.curInst); });
+ });
+
+})(jQuery);
diff --git a/jquery-src/jquery.calendars.all.min.js b/jquery-src/jquery.calendars.all.min.js
new file mode 100755
index 0000000..e22eef6
--- /dev/null
+++ b/jquery-src/jquery.calendars.all.min.js
@@ -0,0 +1,6 @@
+/* http://keith-wood.name/calendars.html
+ Calendars for jQuery v2.0.2.
+ Written by Keith Wood (wood.keith{at}optusnet.com.au) August 2009.
+ Available under the MIT (http://keith-wood.name/licence.html) license.
+ Please attribute the author if you use it. */
+(function($){function Calendars(){this.regionalOptions=[];this.regionalOptions['']={invalidCalendar:'Calendar {0} not found',invalidDate:'Invalid {0} date',invalidMonth:'Invalid {0} month',invalidYear:'Invalid {0} year',differentCalendars:'Cannot mix {0} and {1} dates'};this.local=this.regionalOptions[''];this.calendars={};this._localCals={}}$.extend(Calendars.prototype,{instance:function(a,b){a=(a||'gregorian').toLowerCase();b=b||'';var c=this._localCals[a+'-'+b];if(!c&&this.calendars[a]){c=new this.calendars[a](b);this._localCals[a+'-'+b]=c}if(!c){throw(this.local.invalidCalendar||this.regionalOptions[''].invalidCalendar).replace(/\{0\}/,a)}return c},newDate:function(a,b,c,d,e){d=(a!=null&&a.year?a.calendar():(typeof d==='string'?this.instance(d,e):d))||this.instance();return d.newDate(a,b,c)},substituteDigits:function(c){return function(b){return(b+'').replace(/[0-9]/g,function(a){return c[a]})}},substituteChineseDigits:function(e,f){return function(a){var b='';var c=0;while(a>0){var d=a%10;b=(d===0?'':e[d]+f[c])+b;c++;a=Math.floor(a/10)}if(b.indexOf(e[1]+f[1])===0){b=b.substr(1)}return b||e[0]}}});function CDate(a,b,c,d){this._calendar=a;this._year=b;this._month=c;this._day=d;if(this._calendar._validateLevel===0&&!this._calendar.isValid(this._year,this._month,this._day)){throw($.calendars.local.invalidDate||$.calendars.regionalOptions[''].invalidDate).replace(/\{0\}/,this._calendar.local.name)}}function pad(a,b){a=''+a;return'000000'.substring(0,b-a.length)+a}$.extend(CDate.prototype,{newDate:function(a,b,c){return this._calendar.newDate((a==null?this:a),b,c)},year:function(a){return(arguments.length===0?this._year:this.set(a,'y'))},month:function(a){return(arguments.length===0?this._month:this.set(a,'m'))},day:function(a){return(arguments.length===0?this._day:this.set(a,'d'))},date:function(a,b,c){if(!this._calendar.isValid(a,b,c)){throw($.calendars.local.invalidDate||$.calendars.regionalOptions[''].invalidDate).replace(/\{0\}/,this._calendar.local.name)}this._year=a;this._month=b;this._day=c;return this},leapYear:function(){return this._calendar.leapYear(this)},epoch:function(){return this._calendar.epoch(this)},formatYear:function(){return this._calendar.formatYear(this)},monthOfYear:function(){return this._calendar.monthOfYear(this)},weekOfYear:function(){return this._calendar.weekOfYear(this)},daysInYear:function(){return this._calendar.daysInYear(this)},dayOfYear:function(){return this._calendar.dayOfYear(this)},daysInMonth:function(){return this._calendar.daysInMonth(this)},dayOfWeek:function(){return this._calendar.dayOfWeek(this)},weekDay:function(){return this._calendar.weekDay(this)},extraInfo:function(){return this._calendar.extraInfo(this)},add:function(a,b){return this._calendar.add(this,a,b)},set:function(a,b){return this._calendar.set(this,a,b)},compareTo:function(a){if(this._calendar.name!==a._calendar.name){throw($.calendars.local.differentCalendars||$.calendars.regionalOptions[''].differentCalendars).replace(/\{0\}/,this._calendar.local.name).replace(/\{1\}/,a._calendar.local.name)}var c=(this._year!==a._year?this._year-a._year:this._month!==a._month?this.monthOfYear()-a.monthOfYear():this._day-a._day);return(c===0?0:(c<0?-1:+1))},calendar:function(){return this._calendar},toJD:function(){return this._calendar.toJD(this)},fromJD:function(a){return this._calendar.fromJD(a)},toJSDate:function(){return this._calendar.toJSDate(this)},fromJSDate:function(a){return this._calendar.fromJSDate(a)},toString:function(){return(this.year()<0?'-':'')+pad(Math.abs(this.year()),4)+'-'+pad(this.month(),2)+'-'+pad(this.day(),2)}});function BaseCalendar(){this.shortYearCutoff='+10'}$.extend(BaseCalendar.prototype,{_validateLevel:0,newDate:function(a,b,c){if(a==null){return this.today()}if(a.year){this._validate(a,b,c,$.calendars.local.invalidDate||$.calendars.regionalOptions[''].invalidDate);c=a.day();b=a.month();a=a.year()}return new CDate(this,a,b,c)},today:function(){return this.fromJSDate(new Date())},epoch:function(a){var b=this._validate(a,this.minMonth,this.minDay,$.calendars.local.invalidYear||$.calendars.regionalOptions[''].invalidYear);return(b.year()<0?this.local.epochs[0]:this.local.epochs[1])},formatYear:function(a){var b=this._validate(a,this.minMonth,this.minDay,$.calendars.local.invalidYear||$.calendars.regionalOptions[''].invalidYear);return(b.year()<0?'-':'')+pad(Math.abs(b.year()),4)},monthsInYear:function(a){this._validate(a,this.minMonth,this.minDay,$.calendars.local.invalidYear||$.calendars.regionalOptions[''].invalidYear);return 12},monthOfYear:function(a,b){var c=this._validate(a,b,this.minDay,$.calendars.local.invalidMonth||$.calendars.regionalOptions[''].invalidMonth);return(c.month()+this.monthsInYear(c)-this.firstMonth)%this.monthsInYear(c)+this.minMonth},fromMonthOfYear:function(a,b){var m=(b+this.firstMonth-2*this.minMonth)%this.monthsInYear(a)+this.minMonth;this._validate(a,m,this.minDay,$.calendars.local.invalidMonth||$.calendars.regionalOptions[''].invalidMonth);return m},daysInYear:function(a){var b=this._validate(a,this.minMonth,this.minDay,$.calendars.local.invalidYear||$.calendars.regionalOptions[''].invalidYear);return(this.leapYear(b)?366:365)},dayOfYear:function(a,b,c){var d=this._validate(a,b,c,$.calendars.local.invalidDate||$.calendars.regionalOptions[''].invalidDate);return d.toJD()-this.newDate(d.year(),this.fromMonthOfYear(d.year(),this.minMonth),this.minDay).toJD()+1},daysInWeek:function(){return 7},dayOfWeek:function(a,b,c){var d=this._validate(a,b,c,$.calendars.local.invalidDate||$.calendars.regionalOptions[''].invalidDate);return(Math.floor(this.toJD(d))+2)%this.daysInWeek()},extraInfo:function(a,b,c){this._validate(a,b,c,$.calendars.local.invalidDate||$.calendars.regionalOptions[''].invalidDate);return{}},add:function(a,b,c){this._validate(a,this.minMonth,this.minDay,$.calendars.local.invalidDate||$.calendars.regionalOptions[''].invalidDate);return this._correctAdd(a,this._add(a,b,c),b,c)},_add:function(c,f,g){this._validateLevel++;if(g==='d'||g==='w'){var h=c.toJD()+f*(g==='w'?this.daysInWeek():1);var d=c.calendar().fromJD(h);this._validateLevel--;return[d.year(),d.month(),d.day()]}try{var y=c.year()+(g==='y'?f:0);var m=c.monthOfYear()+(g==='m'?f:0);var d=c.day();var i=function(a){while(mb-1+a.minMonth){y++;m-=b;b=a.monthsInYear(y)}};if(g==='y'){if(c.month()!==this.fromMonthOfYear(y,m)){m=this.newDate(y,c.month(),this.minDay).monthOfYear()}m=Math.min(m,this.monthsInYear(y));d=Math.min(d,this.daysInMonth(y,this.fromMonthOfYear(y,m)))}else if(g==='m'){i(this);d=Math.min(d,this.daysInMonth(y,this.fromMonthOfYear(y,m)))}var j=[y,this.fromMonthOfYear(y,m),d];this._validateLevel--;return j}catch(e){this._validateLevel--;throw e;}},_correctAdd:function(a,b,c,d){if(!this.hasYearZero&&(d==='y'||d==='m')){if(b[0]===0||(a.year()>0)!==(b[0]>0)){var e={y:[1,1,'y'],m:[1,this.monthsInYear(-1),'m'],w:[this.daysInWeek(),this.daysInYear(-1),'d'],d:[1,this.daysInYear(-1),'d']}[d];var f=(c<0?-1:+1);b=this._add(a,c*e[0]+f*e[1],e[2])}}return a.date(b[0],b[1],b[2])},set:function(a,b,c){this._validate(a,this.minMonth,this.minDay,$.calendars.local.invalidDate||$.calendars.regionalOptions[''].invalidDate);var y=(c==='y'?b:a.year());var m=(c==='m'?b:a.month());var d=(c==='d'?b:a.day());if(c==='y'||c==='m'){d=Math.min(d,this.daysInMonth(y,m))}return a.date(y,m,d)},isValid:function(a,b,c){this._validateLevel++;var d=(this.hasYearZero||a!==0);if(d){var e=this.newDate(a,b,this.minDay);d=(b>=this.minMonth&&b-this.minMonth=this.minDay&&c-this.minDay13.5?13:1);var i=c-(h>2.5?4716:4715);if(i<=0){i--}return this.newDate(i,h,g)},toJSDate:function(a,b,c){var d=this._validate(a,b,c,$.calendars.local.invalidDate||$.calendars.regionalOptions[''].invalidDate);var e=new Date(d.year(),d.month()-1,d.day());e.setHours(0);e.setMinutes(0);e.setSeconds(0);e.setMilliseconds(0);e.setHours(e.getHours()>12?e.getHours()+2:0);return e},fromJSDate:function(a){return this.newDate(a.getFullYear(),a.getMonth()+1,a.getDate())}});$.calendars=new Calendars();$.calendars.cdate=CDate;$.calendars.baseCalendar=BaseCalendar;$.calendars.calendars.gregorian=GregorianCalendar})(jQuery);(function($){$.extend($.calendars.regionalOptions[''],{invalidArguments:'Invalid arguments',invalidFormat:'Cannot format a date from another calendar',missingNumberAt:'Missing number at position {0}',unknownNameAt:'Unknown name at position {0}',unexpectedLiteralAt:'Unexpected literal at position {0}',unexpectedText:'Additional text found at end'});$.calendars.local=$.calendars.regionalOptions[''];$.extend($.calendars.cdate.prototype,{formatDate:function(a,b){if(typeof a!=='string'){b=a;a=''}return this._calendar.formatDate(a||'',this,b)}});$.extend($.calendars.baseCalendar.prototype,{UNIX_EPOCH:$.calendars.instance().newDate(1970,1,1).toJD(),SECS_PER_DAY:24*60*60,TICKS_EPOCH:$.calendars.instance().jdEpoch,TICKS_PER_DAY:24*60*60*10000000,ATOM:'yyyy-mm-dd',COOKIE:'D, dd M yyyy',FULL:'DD, MM d, yyyy',ISO_8601:'yyyy-mm-dd',JULIAN:'J',RFC_822:'D, d M yy',RFC_850:'DD, dd-M-yy',RFC_1036:'D, d M yy',RFC_1123:'D, d M yyyy',RFC_2822:'D, d M yyyy',RSS:'D, d M yy',TICKS:'!',TIMESTAMP:'@',W3C:'yyyy-mm-dd',formatDate:function(f,g,h){if(typeof f!=='string'){h=g;g=f;f=''}if(!g){return''}if(g.calendar()!==this){throw $.calendars.local.invalidFormat||$.calendars.regionalOptions[''].invalidFormat;}f=f||this.local.dateFormat;h=h||{};var i=h.dayNamesShort||this.local.dayNamesShort;var j=h.dayNames||this.local.dayNames;var k=h.monthNamesShort||this.local.monthNamesShort;var l=h.monthNames||this.local.monthNames;var m=h.calculateWeek||this.local.calculateWeek;var n=function(a,b){var c=1;while(u+c1};var o=function(a,b,c,d){var e=''+b;if(n(a,d)){while(e.length1};var x=function(a,b){var c=w(a,b);var d=[2,3,c?4:2,c?4:2,10,11,20]['oyYJ@!'.indexOf(a)+1];var e=new RegExp('^-?\\d{1,'+d+'}');var f=h.substring(B).match(e);if(!f){throw($.calendars.local.missingNumberAt||$.calendars.regionalOptions[''].missingNumberAt).replace(/\{0\}/,B)}B+=f[0].length;return parseInt(f[0],10)};var y=this;var z=function(a,b,c,d){var e=(w(a,d)?c:b);for(var i=0;i-1){r=1;s=t;for(var E=this.daysInMonth(q,r);s>E;E=this.daysInMonth(q,r)){r++;s-=E}}return(p>-1?this.fromJD(p):this.newDate(q,r,s))},determineDate:function(f,g,h,i,j){if(h&&typeof h!=='object'){j=i;i=h;h=null}if(typeof i!=='string'){j=i;i=''}var k=this;var l=function(a){try{return k.parseDate(i,a,j)}catch(e){}a=a.toLowerCase();var b=(a.match(/^c/)&&h?h.newDate():null)||k.today();var c=/([+-]?[0-9]+)\s*(d|w|m|y)?/g;var d=c.exec(a);while(d){b.add(parseInt(d[1],10),d[2]||'d');d=c.exec(a)}return b};g=(g?g.newDate():null);f=(f==null?g:(typeof f==='string'?l(f):(typeof f==='number'?(isNaN(f)||f===Infinity||f===-Infinity?g:k.today().add(f,'d')):k.newDate(f))));return f}})})(jQuery);(function($){var H='calendarsPicker';$.JQPlugin.createPlugin({name:H,defaultRenderer:{picker:'